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+fgojIGlyZWFsLnM6CiMJVGhpcyBmaWxlIGlzIGFwcGVuZGVkIHRvIHRoZSB0b3Agb2YgdGhlIDA2MElTUCBwYWNrYWdlCiMgYW5kIGNvbnRhaW5zIHRoZSBlbnRyeSBwb2ludHMgaW50byB0aGUgcGFja2FnZS4gVGhlIHVzZXIsIGluCiMgZWZmZWN0LCBicmFuY2hlcyB0byBvbmUgb2YgdGhlIGJyYW5jaCB0YWJsZSBlbnRyaWVzIGxvY2F0ZWQKIyBhZnRlciBfMDYwSVNQX1RBQkxFLgojCUFsc28sIHN1YnJvdXRpbmUgc3R1YnMgZXhpc3QgaW4gdGhpcyBmaWxlIChfaXNwX2RvbmUgZm9yCiMgZXhhbXBsZSkgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgSVNQIHBhY2thZ2UgaXRzZWxmIGluIG9yZGVyCiMgdG8gY2FsbCBhIGdpdmVuIHJvdXRpbmUuIFRoZSBzdHViIHJvdXRpbmUgYWN0dWFsbHkgcGVyZm9ybXMgdGhlCiMgY2FsbG91dC4gVGhlIElTUCBjb2RlIGRvZXMgYSAiYnNyIiB0byB0aGUgc3R1YiByb3V0aW5lLiBUaGlzCiMgZXh0cmEgbGF5ZXIgb2YgaGllcmFyY2h5IGFkZHMgYSBzbGlnaHQgcGVyZm9ybWFuY2UgcGVuYWx0eSBidXQKIyBpdCBtYWtlcyB0aGUgSVNQIGNvZGUgZWFzaWVyIHRvIHJlYWQgYW5kIG1vcmUgbWFpbmF0aW5hYmxlLgojCgpzZXQJX29mZl9jaGssCTB4MDAKc2V0CV9vZmZfZGl2Ynl6ZXJvLAkweDA0CnNldAlfb2ZmX3RyYWNlLAkweDA4CnNldAlfb2ZmX2FjY2VzcywJMHgwYwpzZXQJX29mZl9kb25lLAkweDEwCgpzZXQJX29mZl9jYXMsCTB4MTQKc2V0CV9vZmZfY2FzMiwJMHgxOApzZXQJX29mZl9sb2NrLAkweDFjCnNldAlfb2ZmX3VubG9jaywJMHgyMAoKc2V0CV9vZmZfaW1yLAkweDQwCnNldAlfb2ZmX2RtciwJMHg0NApzZXQJX29mZl9kbXcsCTB4NDgKc2V0CV9vZmZfaXJ3LAkweDRjCnNldAlfb2ZmX2lybCwJMHg1MApzZXQJX29mZl9kcmIsCTB4NTQKc2V0CV9vZmZfZHJ3LAkweDU4CnNldAlfb2ZmX2RybCwJMHg1YwpzZXQJX29mZl9kd2IsCTB4NjAKc2V0CV9vZmZfZHd3LAkweDY0CnNldAlfb2ZmX2R3bCwJMHg2OAoKXzA2MElTUF9UQUJMRToKCiMgSGVyZSdzIHRoZSB0YWJsZSBvZiBFTlRSWSBQT0lOVFMgZm9yIHRob3NlIGxpbmtpbmcgdGhlIHBhY2thZ2UuCglicmEubAkJX2lzcF91bmltcAoJc2hvcnQJCTB4MDAwMAoKCWJyYS5sCQlfaXNwX2NhcwoJc2hvcnQJCTB4MDAwMAoKCWJyYS5sCQlfaXNwX2NhczIKCXNob3J0CQkweDAwMDAKCglicmEubAkJX2lzcF9jYXNfZmluaXNoCglzaG9ydAkJMHgwMDAwCgoJYnJhLmwJCV9pc3BfY2FzMl9maW5pc2gKCXNob3J0CQkweDAwMDAKCglicmEubAkJX2lzcF9jYXNfaW5yYW5nZQoJc2hvcnQJCTB4MDAwMAoKCWJyYS5sCQlfaXNwX2Nhc190ZXJtaW5hdGUKCXNob3J0CQkweDAwMDAKCglicmEubAkJX2lzcF9jYXNfcmVzdGFydAoJc2hvcnQJCTB4MDAwMAoKCXNwYWNlCQk2NAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJX3JlYWxfY2hrCl9yZWFsX2NoazoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2NoaywlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX3JlYWxfZGl2Ynl6ZXJvCl9yZWFsX2RpdmJ5emVybzoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2RpdmJ5emVybywlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX3JlYWxfdHJhY2UKX3JlYWxfdHJhY2U6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl90cmFjZSwlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX3JlYWxfYWNjZXNzCl9yZWFsX2FjY2VzczoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2FjY2VzcywlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2lzcF9kb25lCl9pc3BfZG9uZToKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2RvbmUsJXBjKSwlZDAKCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJX3JlYWxfY2FzCl9yZWFsX2NhczoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2NhcywlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX3JlYWxfY2FzMgpfcmVhbF9jYXMyOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfY2FzMiwlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX3JlYWxfbG9ja19wYWdlCl9yZWFsX2xvY2tfcGFnZToKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2xvY2ssJXBjKSwlZDAKCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9yZWFsX3VubG9ja19wYWdlCl9yZWFsX3VubG9ja19wYWdlOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfdW5sb2NrLCVwYyksJWQwCglwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCV9pbWVtX3JlYWQKX2ltZW1fcmVhZDoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2ltciwlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2RtZW1fcmVhZApfZG1lbV9yZWFkOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfZG1yLCVwYyksJWQwCglwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfZG1lbV93cml0ZQpfZG1lbV93cml0ZToKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2RtdywlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2ltZW1fcmVhZF93b3JkCl9pbWVtX3JlYWRfd29yZDoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2lydywlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2ltZW1fcmVhZF9sb25nCl9pbWVtX3JlYWRfbG9uZzoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2lybCwlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2RtZW1fcmVhZF9ieXRlCl9kbWVtX3JlYWRfYnl0ZToKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2RyYiwlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2RtZW1fcmVhZF93b3JkCl9kbWVtX3JlYWRfd29yZDoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2RydywlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2RtZW1fcmVhZF9sb25nCl9kbWVtX3JlYWRfbG9uZzoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2RybCwlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKCWdsb2JhbAkJX2RtZW1fd3JpdGVfYnl0ZQpfZG1lbV93cml0ZV9ieXRlOgoJbW92LmwJCSVkMCwtKCVzcCkKCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfZHdiLCVwYyksJWQwCglwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQoJbW92LmwJCTB4NCglc3ApLCVkMAoJcnRkCQkmMHg0CgoJZ2xvYmFsCQlfZG1lbV93cml0ZV93b3JkCl9kbWVtX3dyaXRlX3dvcmQ6Cgltb3YubAkJJWQwLC0oJXNwKQoJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl9kd3csJXBjKSwlZDAKCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCgltb3YubAkJMHg0KCVzcCksJWQwCglydGQJCSYweDQKCglnbG9iYWwJCV9kbWVtX3dyaXRlX2xvbmcKX2RtZW1fd3JpdGVfbG9uZzoKCW1vdi5sCQklZDAsLSglc3ApCgltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2R3bCwlcGMpLCVkMAoJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKCW1vdi5sCQkweDQoJXNwKSwlZDAKCXJ0ZAkJJjB4NAoKIwojIFRoaXMgZmlsZSBjb250YWlucyBhIHNldCBvZiBkZWZpbmUgc3RhdGVtZW50cyBmb3IgY29uc3RhbnRzCiMgaW4gb3JlZGVyIHRvIHByb21vdGUgcmVhZGFiaWxpdHkgd2l0aGluIHRoZSBjb3JlIGNvZGUgaXRzZWxmLgojCgpzZXQgTE9DQUxfU0laRSwJCTk2CQkJIyBzdGFjayBmcmFtZSBzaXplKGJ5dGVzKQpzZXQgTFYsCQkJLUxPQ0FMX1NJWkUJCSMgc3RhY2sgb2Zmc2V0CgpzZXQgRVhDX0lTUiwJCTB4NAkJCSMgc3RhY2sgc3RhdHVzIHJlZ2lzdGVyCnNldCBFWENfSVBDLAkJMHg2CQkJIyBzdGFjayBwYwpzZXQgRVhDX0lWT0ZGLAkJMHhhCQkJIyBzdGFja2VkIHZlY3RvciBvZmZzZXQKCnNldCBFWENfQVJFR1MsCQlMVis2NAkJCSMgb2Zmc2V0IG9mIGFsbCBhZGRyZXNzIHJlZ3MKc2V0IEVYQ19EUkVHUywJCUxWKzMyCQkJIyBvZmZzZXQgb2YgYWxsIGRhdGEgcmVncwoKc2V0IEVYQ19BNywJCUVYQ19BUkVHUysoNyo0KQkJIyBvZmZzZXQgb2YgYTcKc2V0IEVYQ19BNiwJCUVYQ19BUkVHUysoNio0KQkJIyBvZmZzZXQgb2YgYTYKc2V0IEVYQ19BNSwJCUVYQ19BUkVHUysoNSo0KQkJIyBvZmZzZXQgb2YgYTUKc2V0IEVYQ19BNCwJCUVYQ19BUkVHUysoNCo0KQkJIyBvZmZzZXQgb2YgYTQKc2V0IEVYQ19BMywJCUVYQ19BUkVHUysoMyo0KQkJIyBvZmZzZXQgb2YgYTMKc2V0IEVYQ19BMiwJCUVYQ19BUkVHUysoMio0KQkJIyBvZmZzZXQgb2YgYTIKc2V0IEVYQ19BMSwJCUVYQ19BUkVHUysoMSo0KQkJIyBvZmZzZXQgb2YgYTEKc2V0IEVYQ19BMCwJCUVYQ19BUkVHUysoMCo0KQkJIyBvZmZzZXQgb2YgYTAKc2V0IEVYQ19ENywJCUVYQ19EUkVHUysoNyo0KQkJIyBvZmZzZXQgb2YgZDcKc2V0IEVYQ19ENiwJCUVYQ19EUkVHUysoNio0KQkJIyBvZmZzZXQgb2YgZDYKc2V0IEVYQ19ENSwJCUVYQ19EUkVHUysoNSo0KQkJIyBvZmZzZXQgb2YgZDUKc2V0IEVYQ19ENCwJCUVYQ19EUkVHUysoNCo0KQkJIyBvZmZzZXQgb2YgZDQKc2V0IEVYQ19EMywJCUVYQ19EUkVHUysoMyo0KQkJIyBvZmZzZXQgb2YgZDMKc2V0IEVYQ19EMiwJCUVYQ19EUkVHUysoMio0KQkJIyBvZmZzZXQgb2YgZDIKc2V0IEVYQ19EMSwJCUVYQ19EUkVHUysoMSo0KQkJIyBvZmZzZXQgb2YgZDEKc2V0IEVYQ19EMCwJCUVYQ19EUkVHUysoMCo0KQkJIyBvZmZzZXQgb2YgZDAKCnNldCBFWENfVEVNUCwJCUxWKzE2CQkJIyBvZmZzZXQgb2YgdGVtcCBzdGFjayBzcGFjZQoKc2V0IEVYQ19TQVZWQUwsCQlMVisxMgkJCSMgb2Zmc2V0IG9mIG9sZCBhcmVnIHZhbHVlCnNldCBFWENfU0FWUkVHLAkJTFYrMTEJCQkjIG9mZnNldCBvZiBvbGQgYXJlZyBpbmRleAoKc2V0IFNQQ09ORF9GTEcsCQlMVisxMAkJCSMgb2Zmc2V0IG9mIHNwYyBjb25kaXRpb24gZmxnCgpzZXQgRVhDX0NDLAkJTFYrOAkJCSMgb2Zmc2V0IG9mIGNjIHJlZ2lzdGVyCnNldCBFWENfRVhUV1BUUiwJTFYrNAkJCSMgb2Zmc2V0IG9mIGN1cnJlbnQgUEMKc2V0IEVYQ19FWFRXT1JELAlMVisyCQkJIyBvZmZzZXQgb2YgY3VycmVudCBleHQgb3B3b3JkCnNldCBFWENfT1BXT1JELAkJTFYrMAkJCSMgb2Zmc2V0IG9mIGN1cnJlbnQgb3B3b3JkCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBTUGVjaWFsIENPTkRpdGlvbiBGTGFHcyAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzZXQgbWlhN19mbGcsCQkweDA0CQkJIyAoYTcpKyBmbGFnCnNldCBtZGE3X2ZsZywJCTB4MDgJCQkjIC0oYTcpIGZsYWcKc2V0IGljaGtfZmxnLAkJMHgxMAkJCSMgY2hrIGV4Y2VwdGlvbiBmbGFnCnNldCBpZGJ5el9mbGcsCQkweDIwCQkJIyBkaXZieXplcm8gZmxhZwpzZXQgcmVzdG9yZV9mbGcsCTB4NDAJCQkjIHJlc3RvcmUgLShhbikrIGZsYWcKc2V0IGltbWVkX2ZsZywJCTB4ODAJCQkjIGltbWVkaWF0ZSBkYXRhIGZsYWcKCnNldCBtaWE3X2JpdCwJCTB4MgkJCSMgKGE3KSsgYml0CnNldCBtZGE3X2JpdCwJCTB4MwkJCSMgLShhNykgYml0CnNldCBpY2hrX2JpdCwJCTB4NAkJCSMgY2hrIGV4Y2VwdGlvbiBiaXQKc2V0IGlkYnl6X2JpdCwJCTB4NQkJCSMgZGl2Ynl6ZXJvIGJpdApzZXQgcmVzdG9yZV9iaXQsCTB4NgkJCSMgcmVzdG9yZSAtKGE3KSsgYml0CnNldCBpbW1lZF9iaXQsCQkweDcJCQkjIGltbWVkaWF0ZSBkYXRhIGJpdAoKIyMjIyMjIyMjCiMgTWlzYy4gIwojIyMjIyMjIyMKc2V0IEJZVEUsCQkxCQkJIyBsZW4oYnl0ZSkgPT0gMSBieXRlCnNldCBXT1JELAkJMgkJCSMgbGVuKHdvcmQpID09IDIgYnl0ZXMKc2V0IExPTkcsCQk0CQkJIyBsZW4obG9uZ3dvcmQpID09IDQgYnl0ZXMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9pc3BfdW5pbXAoKTogMDYwSVNQIGVudHJ5IHBvaW50IGZvciBVbmltcGxlbWVudGVkIEluc3RydWN0aW9uCSMKIwkJCQkJCQkJCSMKIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCiMJIlVuaW1wbGVtZW50ZWQgSW50ZWdlciBJbnN0cnVjdGlvbiIgZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZwkjCiMJc3lzdGVtLgkJCQkJCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2ltZW1fcmVhZF97d29yZCxsb25nfSgpIC0gcmVhZCBpbnN0cnVjdGlvbiB3b3JkL2xvbmd3b3JkCSMKIwlfbXVsNjQoKSAtIGVtdWxhdGUgNjQtYml0IG11bHRpcGx5CQkJCSMKIwlfZGl2NjQoKSAtIGVtdWxhdGUgNjQtYml0IGRpdmlkZQkJCQkjCiMJX21vdmVwZXJpcGhlcmFsKCkgLSBlbXVsYXRlICJtb3ZlcCIJCQkJIwojCV9jb21wYW5kc2V0KCkgLSBlbXVsYXRlIG1pc2FsaWduZWQgImNhcyIJCQkjCiMJX2NvbXBhbmRzZXQyKCkgLSBlbXVsYXRlICJjYXMyIgkJCQkJIwojCV9jaGsyX2NtcDIoKSAtIGVtdWxhdGUgImNtcDIiIGFuZCAiY2hrMiIJCQkjCiMJX2lzcF9kb25lKCkgLSAiY2FsbG91dCIgZm9yIG5vcm1hbCBmaW5hbCBleGl0CQkJIwojCV9yZWFsX3RyYWNlKCkgLSAiY2FsbG91dCIgZm9yIFRyYWNlIGV4Y2VwdGlvbgkJCSMKIwlfcmVhbF9jaGsoKSAtICJjYWxsb3V0IiBmb3IgQ2hrIGV4Y2VwdGlvbgkJCSMKIwlfcmVhbF9kaXZieXplcm8oKSAtICJjYWxsb3V0IiBmb3IgRFogZXhjZXB0aW9uCQkJIwojCV9yZWFsX2FjY2VzcygpIC0gImNhbGxvdXQiIGZvciBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIFVuaW1wIEludCBJbnN0ciBzdGFjayBmcmFtZQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJZiBUcmFjZSBleGNlcHRpb246CQkJCQkJIwojCS0gVGhlIHN5c3RlbSBzdGFjayBjaGFuZ2VkIHRvIGNvbnRhaW4gVHJhY2UgZXhjIHN0YWNrIGZyYW1lCSMKIwlJZiBDaGsgZXhjZXB0aW9uOgkJCQkJCSMKIwktIFRoZSBzeXN0ZW0gc3RhY2sgY2hhbmdlZCB0byBjb250YWluIENoayBleGMgc3RhY2sgZnJhbWUJIwojCUlmIERaIGV4Y2VwdGlvbjoJCQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGNoYW5nZWQgdG8gY29udGFpbiBEWiBleGMgc3RhY2sgZnJhbWUJIwojCUlmIGFjY2VzcyBlcnJvciBleGNlcHRpb246CQkJCQkjCiMJLSBUaGUgc3lzdGVtIHN0YWNrIGNoYW5nZWQgdG8gY29udGFpbiBhY2Nlc3MgZXJyIGV4YyBzdGsgZnJhbWUJIwojCUVsc2U6CQkJCQkJCQkjCiMJLSBSZXN1bHRzIHNhdmVkIGFzIGFwcHJvcHJpYXRlCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUaGlzIGhhbmRsZXIgZmV0Y2hlcyB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQgZnJvbQkjCiMgbWVtb3J5IGFuZCBkZWNvZGVzIGl0IHRvIGRldGVybWluZSB3aGljaCBvZiB0aGUgdW5pbXBsZW1lbnRlZAkJIwojIGludGVnZXIgaW5zdHJ1Y3Rpb25zIGNhdXNlZCB0aGlzIGV4Y2VwdGlvbi4gVGhpcyBoYW5kbGVyIHRoZW4gY2FsbHMJIwojIG9uZSBvZiBfbXVsNjQoKSwgX2RpdjY0KCksIF9tb3ZlcGVyaXBoZXJhbCgpLCBfY29tcGFuZHNldCgpLAkJIwojIF9jb21wYW5kc2V0MigpLCBvciBfY2hrMl9jbXAyKCkgYXMgYXBwcm9wcmlhdGUuCQkJIwojCVNvbWUgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zLCBieSB0aGVpciBuYXR1cmUsIG1heSBwcm9kdWNlIG90aGVyCSMKIyB0eXBlcyBvZiBleGNlcHRpb25zLiAiZGl2IiBjYW4gcHJvZHVjZSBhIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbiwJIwojIGFuZCAiY2hrMiIgY2FuIGNhdXNlIGEgIkNoayIgZXhjZXB0aW9uLiBJbiBib3RoIGNhc2VzLCB0aGUgY3VycmVudAkjCiMgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIG11c3QgYmUgY29udmVydGVkIHRvIGFuIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCiMgb2YgdGhlIGNvcnJlY3QgZXhjZXB0aW9uIHR5cGUgYW5kIGFuIGV4aXQgbXVzdCBiZSBtYWRlIHRocm91Z2gJIwojIF9yZWFsX2RpdmJ5emVybygpIG9yIF9yZWFsX2NoaygpIGFzIGFwcHJvcHJpYXRlLiBJbiBhZGRpdGlvbiwgYWxsCSMKIyBpbnN0cnVjdGlvbnMgbWF5IGJlIGV4ZWN1dGluZyB3aGlsZSBUcmFjZSBpcyBlbmFibGVkLiBJZiBzbywgdGhlbgkjCiMgYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgbXVzdCBiZSBjcmVhdGVkIGFuZCBhbiBleGl0IG1hZGUJIwojIHRocm91Z2ggX3JlYWxfdHJhY2UoKS4JCQkJCQkjCiMJTWVhbndoaWxlLCBpZiBhbnkgcmVhZCBvciB3cml0ZSB0byBtZW1vcnkgdXNpbmcgdGhlCQkjCiMgX21lbV97cmVhZCx3cml0ZX0oKSAiY2FsbG91dCJzIHJldHVybnMgYSBmYWlsaW5nIHZhbHVlLCB0aGVuIGFuCSMKIyBhY2Nlc3MgZXJyb3IgZnJhbWUgbXVzdCBiZSBjcmVhdGVkIGFuZCBhbiBleGl0IG1hZGUgdGhyb3VnaAkJIwojIF9yZWFsX2FjY2VzcygpLgkJCQkJCQkjCiMJSWYgbm9uZSBvZiB0aGVzZSBvY2N1ciwgdGhlbiBhIG5vcm1hbCBleGl0IGlzIG1hZGUgdGhyb3VnaAkjCiMgX2lzcF9kb25lKCkuCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMJVGhpcyBoYW5kbGVyLCB1cG9uIGVudHJ5LCBzYXZlcyBhbG1vc3QgYWxsIHVzZXItdmlzaWJsZQkJIwojIGFkZHJlc3MgYW5kIGRhdGEgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWx0aG91Z2ggdGhpcyBtYXkgc2VlbSB0bwkjCiMgY2F1c2UgZXhjZXNzIG1lbW9yeSB0cmFmZmljLCBpdCB3YXMgZm91bmQgdGhhdCBkdWUgdG8gaGF2aW5nIHRvCSMKIyBhY2Nlc3MgdGhlc2UgcmVnaXN0ZXIgZmlsZXMgZm9yIHRoaW5ncyBsaWtlIGRhdGEgcmV0cmlldmFsIGFuZCA8ZWE+CSMKIyBjYWxjdWxhdGlvbnMsIGl0IHdhcyBtb3JlIGVmZmljaWVudCB0byBoYXZlIHRoZW0gb24gdGhlIHN0YWNrIHdoZXJlCSMKIyB0aGV5IGNvdWxkIGJlIGFjY2Vzc2VkIGJ5IGluZGV4aW5nIHJhdGhlciB0aGFuIHRvIG1ha2Ugc3Vicm91dGluZQkjCiMgY2FsbHMgdG8gcmV0cmlldmUgYSByZWdpc3RlciBvZiBhIHBhcnRpY3VsYXIgaW5kZXguCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlfaXNwX3VuaW1wCl9pc3BfdW5pbXA6CglsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBjcmVhdGUgcm9vbSBmb3Igc3RhY2sgZnJhbWUKCgltb3ZtLmwJCSYweDNmZmYsRVhDX0RSRUdTKCVhNikJIyBzdG9yZSBkMC1kNy9hMC1hNQoJbW92LmwJCSglYTYpLEVYQ19BNiglYTYpCSMgc3RvcmUgYTYKCglidHN0CQkmMHg1LEVYQ19JU1IoJWE2KQkjIGZyb20gcyBvciB1IG1vZGU/CglibmUuYgkJdWllaF9zCQkJIyBzdXBlcnZpc29yIG1vZGUKdWllaF91OgoJbW92LmwJCSV1c3AsJWEwCQkjIGZldGNoIHVzZXIgc3RhY2sgcG9pbnRlcgoJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzdG9yZSBhNwoJYnJhLmIJCXVpZWhfY29udAp1aWVoX3M6CglsZWEJCTB4YyglYTYpLCVhMAoJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzdG9yZSBjb3JyZWN0ZWQgc3AKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnVpZWhfY29udDoKCWNsci5iCQlTUENPTkRfRkxHKCVhNikJCSMgY2xlYXIgInNwZWNpYWwgY2FzZSIgZmxhZwoKCW1vdi53CQlFWENfSVNSKCVhNiksRVhDX0NDKCVhNikgIyBzdG9yZSBjYyBjb3B5IG9uIHN0YWNrCgltb3YubAkJRVhDX0lQQyglYTYpLEVYQ19FWFRXUFRSKCVhNikgIyBzdG9yZSBleHR3cHRyIG9uIHN0YWNrCgojCiMgZmV0Y2ggdGhlIG9wd29yZCBhbmQgZmlyc3QgZXh0ZW5zaW9uIHdvcmQgcG9pbnRlZCB0byBieSB0aGUgc3RhY2tlZCBwYwojIGFuZCBzdG9yZSB0aGVtIHRvIHRoZSBzdGFjayBmb3Igbm93CiMKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggb3B3b3JkICYgZXh0d29yZAoJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikJIyBzdG9yZSBleHR3b3JkIG9uIHN0YWNrCgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIG11bHMubAkwMTAwIDExMDAgMDAgfDxlYT58CTAqKiogMTEwMCAwMDAwIDAqKioJCSMKIyBtdWx1LmwJMDEwMCAxMTAwIDAwIHw8ZWE+fAkwKioqIDAxMDAgMDAwMCAwKioqCQkjCiMJCQkJCQkJCQkjCiMgZGl2cy5sCTAxMDAgMTEwMCAwMSB8PGVhPnwJMCoqKiAxMTAwIDAwMDAgMCoqKgkJIwojIGRpdnUubAkwMTAwIDExMDAgMDEgfDxlYT58CTAqKiogMDEwMCAwMDAwIDAqKioJCSMKIwkJCQkJCQkJCSMKIyBtb3ZlcC53IG0ycgkwMDAwICoqKjEgMDAgMDAxKioqCXwgPGRpc3BsYWNlbWVudD4gIHwJCSMKIyBtb3ZlcC5sIG0ycgkwMDAwICoqKjEgMDEgMDAxKioqCXwgPGRpc3BsYWNlbWVudD4gIHwJCSMKIyBtb3ZlcC53IHIybQkwMDAwICoqKjEgMTAgMDAxKioqCXwgPGRpc3BsYWNlbWVudD4gIHwJCSMKIyBtb3ZlcC5sIHIybQkwMDAwICoqKjEgMTEgMDAxKioqCXwgPGRpc3BsYWNlbWVudD4gIHwJCSMKIwkJCQkJCQkJCSMKIyBjYXMudwkJMDAwMCAxMTAwIDExIHw8ZWE+fAkwMDAwIDAwMCogKiowMCAwKioqCQkjCiMgY2FzLmwJCTAwMDAgMTExMCAxMSB8PGVhPnwJMDAwMCAwMDAqICoqMDAgMCoqKgkJIwojCQkJCQkJCQkJIwojIGNhczIudwkwMDAwIDExMDAgMTEgMTExMTAwCSoqKiogMDAwKiAqKjAwIDAqKioJCSMKIwkJCQkJKioqKiAwMDAqICoqMDAgMCoqKgkJIwojIGNhczIubAkwMDAwIDExMTAgMTEgMTExMTAwCSoqKiogMDAwKiAqKjAwIDAqKioJCSMKIwkJCQkJKioqKiAwMDAqICoqMDAgMCoqKgkJIwojCQkJCQkJCQkJIwojIGNoazIuYgkwMDAwIDAwMDAgMTEgfDxlYT58CSoqKiogMTAwMCAwMDAwIDAwMDAJCSMKIyBjaGsyLncJMDAwMCAwMDEwIDExIHw8ZWE+fAkqKioqIDEwMDAgMDAwMCAwMDAwCQkjCiMgY2hrMi5sCTAwMDAgMDEwMCAxMSB8PGVhPnwJKioqKiAxMDAwIDAwMDAgMDAwMAkJIwojCQkJCQkJCQkJIwojIGNtcDIuYgkwMDAwIDAwMDAgMTEgfDxlYT58CSoqKiogMDAwMCAwMDAwIDAwMDAJCSMKIyBjbXAyLncJMDAwMCAwMDEwIDExIHw8ZWE+fAkqKioqIDAwMDAgMDAwMCAwMDAwCQkjCiMgY21wMi5sCTAwMDAgMDEwMCAxMSB8PGVhPnwJKioqKiAwMDAwIDAwMDAgMDAwMAkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgdXNpbmcgYml0IDE0IG9mIHRoZSBvcGVyYXRpb24gd29yZCwgc2VwYXJhdGUgaW50byAyIGdyb3VwczoKIyAoZ3JvdXAxKSBtdWw2NCwgZGl2NjQKIyAoZ3JvdXAyKSBtb3ZlcCwgY2hrMiwgY21wMiwgY2FzMiwgY2FzCiMKCWJ0c3QJCSYweDFlLCVkMAkJIyBncm91cDEgb3IgZ3JvdXAyCgliZXEuYgkJdWllaF9ncm91cDIJCSMgZ28gaGFuZGxlIGdyb3VwMgoKIwojIG5vdywgdy8gZ3JvdXAxLCBtYWtlIG11bDY0J3MgZGVjb2RlIHRoZSBmYXN0ZXN0IHNpbmNlIGl0IHdpbGwKIyBtb3N0IGxpa2VseSBiZSB1c2VkIHRoZSBtb3N0LgojCnVpZWhfZ3JvdXAxOgoJYnRzdAkJJjB4MTYsJWQwCQkjIHRlc3QgZm9yIGRpdjY0CglibmUuYgkJdWllaF9kaXY2NAkJIyBnbyBoYW5kbGUgZGl2NjQKCnVpZWhfbXVsNjQ6CiMgbXVsNjQoKSBtYXkgdXNlICgpKyBhZGRyZXNzaW5nIGFuZCBtYXksIHRoZXJlZm9yZSwgYWx0ZXIgYTcKCglic3IubAkJX211bDY0CQkJIyBfbXVsNjQoKQoKCWJ0c3QJCSYweDUsRVhDX0lTUiglYTYpCSMgc3VwZXJ2aXNvciBtb2RlPwoJYmVxLncJCXVpZWhfZG9uZQoJYnRzdAkJJm1pYTdfYml0LFNQQ09ORF9GTEcoJWE2KSAjIHdhcyBhNyBjaGFuZ2VkPwoJYmVxLncJCXVpZWhfZG9uZQkJIyBubwoJYnRzdAkJJjB4NyxFWENfSVNSKCVhNikJIyBpcyB0cmFjZSBlbmFibGVkPwoJYm5lLncJCXVpZWhfdHJhY2VfYTcJCSMgeWVzCglicmEudwkJdWllaF9hNwkJCSMgbm8KCnVpZWhfZGl2NjQ6CiMgZGl2NjQoKSBtYXkgdXNlICgpKyBhZGRyZXNzaW5nIGFuZCBtYXksIHRoZXJlZm9yZSwgYWx0ZXIgYTcuCiMgZGl2NjQoKSBtYXkgdGFrZSBhIGRpdmlkZSBieSB6ZXJvIGV4Y2VwdGlvbi4KCglic3IubAkJX2RpdjY0CQkJIyBfZGl2NjQoKQoKIyBoZXJlLCB3ZSBzb3J0IG91dCBhbGwgb2YgdGhlIHNwZWNpYWwgY2FzZXMgdGhhdCBtYXkgaGF2ZSBoYXBwZW5lZC4KCWJ0c3QJCSZtaWE3X2JpdCxTUENPTkRfRkxHKCVhNikgIyB3YXMgYTcgY2hhbmdlZD8KCWJuZS5iCQl1aWVoX2RpdjY0X2E3CQkjIHllcwp1aWVoX2RpdjY0X2RieXo6CglidHN0CQkmaWRieXpfYml0LFNQQ09ORF9GTEcoJWE2KSAjIGRpZCBkaXZpZGUtYnktemVybyBvY2N1cj8KCWJuZS53CQl1aWVoX2RpdmJ5emVybwkJIyB5ZXMKCWJyYS53CQl1aWVoX2RvbmUJCSMgbm8KdWllaF9kaXY2NF9hNzoKCWJ0c3QJCSYweDUsRVhDX0lTUiglYTYpCSMgc3VwZXJ2aXNvciBtb2RlPwoJYmVxLmIJCXVpZWhfZGl2NjRfZGJ5egkJIyBubwojIGhlcmUsIGE3IGhhcyBiZWVuIGluY3JlbWVudGVkIGJ5IDQgYnl0ZXMgaW4gc3VwZXJ2aXNvciBtb2RlLiB3ZSBzdGlsbAojIG1heSBoYXZlIHRoZSBmb2xsb3dpbmcgMyBjYXNlczoKIwkoaSkJKGE3KSsKIwkoaWkpCShhNykrOyB0cmFjZQojCShpaWkpCShhNykrOyBkaXZpZGUtYnktemVybwojCglidHN0CQkmaWRieXpfYml0LFNQQ09ORF9GTEcoJWE2KSAjIGRpZCBkaXZpZGUtYnktemVybyBvY2N1cj8KCWJuZS53CQl1aWVoX2RpdmJ5emVyb19hNwkjIHllcwoJdHN0LmIJCUVYQ19JU1IoJWE2KQkJIyBubzsgaXMgdHJhY2UgZW5hYmxlZD8KCWJtaS53CQl1aWVoX3RyYWNlX2E3CQkjIHllcwoJYnJhLncJCXVpZWhfYTcJCQkjIG5vCgojCiMgbm93LCB3LyBncm91cDIsIG1ha2UgbW92ZXAncyBkZWNvZGUgdGhlIGZhc3Rlc3Qgc2luY2UgaXQgd2lsbAojIG1vc3QgbGlrZWx5IGJlIHVzZWQgdGhlIG1vc3QuCiMKdWllaF9ncm91cDI6CglidHN0CQkmMHgxOCwlZDAJCSMgdGVzdCBmb3Igbm90IG1vdmVwCgliZXEuYgkJdWllaF9ub3RfbW92ZXAKCgoJYnNyLmwJCV9tb3ZlcGVyaXBoZXJhbAkJIyBfbW92ZXAoKQoJYnJhLncJCXVpZWhfZG9uZQoKdWllaF9ub3RfbW92ZXA6CglidHN0CQkmMHgxYiwlZDAJCSMgdGVzdCBmb3IgY2hrMixjbXAyCgliZXEuYgkJdWllaF9jaGsyY21wMgkJIyBnbyBoYW5kbGUgY2hrMixjbXAyCgoJc3dhcAkJJWQwCQkJIyBwdXQgb3B3b3JkIGluIGxvIHdvcmQKCWNtcGkuYgkJJWQwLCYweGZjCQkjIHRlc3QgZm9yIGNhczIKCWJlcS5iCQl1aWVoX2NhczIJCSMgZ28gaGFuZGxlIGNhczIKCnVpZWhfY2FzOgoKCWJzci5sCQlfY29tcGFuZHNldAkJIyBfY2FzKCkKCiMgdGhlIGNhc2VzIG9mICJjYXMgRGMsRHUsKGE3KSsiIGFuZCAiY2FzIERjLER1LC0oYTcpIiB1c2VkIGZyb20gc3VwZXJ2aXNvcgojIG1vZGUgYXJlIHNpbXBseSBub3QgY29uc2lkZXJlZCB2YWxpZCBhbmQgdGhlcmVmb3JlIGFyZSBub3QgaGFuZGxlZC4KCglicmEudwkJdWllaF9kb25lCgp1aWVoX2NhczI6CgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyByZWFkIGV4dGVuc2lvbiB3b3JkCgoJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPwoJYm5lLncJCWlzcF9pYWNjCQkjIHllcwoKCWJzci5sCQlfY29tcGFuZHNldDIJCSMgX2NhczIoKQoJYnJhLncJCXVpZWhfZG9uZQoKdWllaF9jaGsyY21wMjoKIyBjaGsyIG1heSB0YWtlIGEgY2hrIGV4Y2VwdGlvbgoKCWJzci5sCQlfY2hrMl9jbXAyCQkjIF9jaGsyX2NtcDIoKQoKIyBoZXJlIHdlIGNoZWNrIHRvIHNlZSBpZiBhIGNoayB0cmFwIHNob3VsZCBiZSB0YWtlbgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJmljaGtfZmxnCglibmUudwkJdWllaF9kb25lCglicmEuYgkJdWllaF9jaGtfdHJhcAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojCiMgdGhlIHJlcXVpcmVkIGVtdWxhdGlvbiBoYXMgYmVlbiBjb21wbGV0ZWQuIG5vdywgY2xlYW4gdXAgdGhlIG5lY2Vzc2FyeSBzdGFjawojIGluZm8gYW5kIHByZXBhcmUgZm9yIHJ0ZQojCnVpZWhfZG9uZToKCW1vdi5iCQlFWENfQ0MrMSglYTYpLEVYQ19JU1IrMSglYTYpICMgaW5zZXJ0IG5ldyBjY29kZXMKCiMgaWYgZXhjZXB0aW9uIG9jY3VycmVkIGluIHVzZXIgbW9kZSwgdGhlbiB3ZSBoYXZlIHRvIHJlc3RvcmUgYTcgaW4gY2FzZSBpdAojIGNoYW5nZWQuIHdlIGRvbid0IGhhdmUgdG8gdXBkYXRlIGE3ICBmb3Igc3VwZXJ2aXNvciBtb3NlIGJlY2F1c2UgdGhhdCBjYXNlCiMgZG9lc24ndCBmbG93IHRocm91Z2ggaGVyZQoJYnRzdAkJJjB4NSxFWENfSVNSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3I/CglibmUuYgkJdWllaF9maW5pc2gJCSMgc3VwZXJ2aXNvcgoKCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgZmV0Y2ggdXNlciBzdGFjayBwb2ludGVyCgltb3YubAkJJWEwLCV1c3AJCSMgcmVzdG9yZSBpdAoKdWllaF9maW5pc2g6Cgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDNmZmYJIyByZXN0b3JlIGQwLWQ3L2EwLWE1CgoJYnRzdAkJJjB4NyxFWENfSVNSKCVhNikJIyBpcyB0cmFjZSBtb2RlIG9uPwoJYm5lLmIJCXVpZWhfdHJhY2UJCSMgeWVzO2dvIGhhbmRsZSB0cmFjZSBtb2RlCgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksRVhDX0lQQyglYTYpICMgbmV3IHBjIG9uIHN0YWNrIGZyYW1lCgltb3YubAkJRVhDX0E2KCVhNiksKCVhNikJIyBwcmVwYXJlIG5ldyBhNiBmb3IgdW5saW5rCgl1bmxrCQklYTYJCQkjIHVubGluayBzdGFjayBmcmFtZQoJYnJhLmwJCV9pc3BfZG9uZQoKIwojIFRoZSBpbnN0cnVjdGlvbiB0aGF0IHdhcyBqdXN0IGVtdWxhdGVkIHdhcyBhbHNvIGJlaW5nIHRyYWNlZC4gVGhlIHRyYWNlCiMgdHJhcCBmb3IgdGhpcyBpbnN0cnVjdGlvbiB3aWxsIGJlIGxvc3QgdW5sZXNzIHdlIGp1bXAgdG8gdGhlIHRyYWNlIGhhbmRsZXIuCiMgU28sIGhlcmUgd2UgY3JlYXRlIGEgVHJhY2UgRXhjZXB0aW9uIGZvcm1hdCBudW1iZXIgdHdvIGV4Y2VwdGlvbiBzdGFjawojIGZyYW1lIGZyb20gdGhlIFVuaW1wbGVtZW50ZWQgSW50ZWdlciBJbnRydWN0aW9uIEV4Y2VwdGlvbiBzdGFjayBmcmFtZQojIGZvcm1hdCBudW1iZXIgemVybyBhbmQganVtcCB0byB0aGUgdXNlciBzdXBwbGllZCBob29rICJfcmVhbF90cmFjZSgpIi4KIwojCQkgICBVSUVIIEZSQU1FCQkgICBUUkFDRSBGUkFNRQojCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCQkqIDB4MCAqICAweDBmNAkqCSogICAgQ3VycmVudAkqCiMJCSoqKioqKioqKioqKioqKioqCSogICAgICBQQwkqCiMJCSogICAgQ3VycmVudAkqCSoqKioqKioqKioqKioqKioqCiMJCSogICAgICBQQwkqCSogMHgyICogIDB4MDI0CSoKIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkJKiAgICAgIFNSCSoJKiAgICAgTmV4dAkqCiMJCSoqKioqKioqKioqKioqKioqCSogICAgICBQQwkqCiMJICAgICAgLT4qICAgICBPbGQJKgkqKioqKioqKioqKioqKioqKgojICBmcm9tIGxpbmsgLS0+KiAgICAgIEE2CSoJKiAgICAgIFNSCSoKIwkgICAgICAgICoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJICAgICAgIC8qICAgICAgQTcJKgkqICAgICAgTmV3CSogPC0tIGZvciBmaW5hbCB1bmxpbmsKIwkgICAgICAvICoJCSoJKiAgICAgIEE2CSoKIyBsaW5rIGZyYW1lIDwgICoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJICAgICAgXCB+CQl+CX4JCX4KIwkgICAgICAgXCoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMKdWllaF90cmFjZToKCW1vdi5sCQlFWENfQTYoJWE2KSwtMHg0KCVhNikKCW1vdi53CQlFWENfSVNSKCVhNiksMHgwKCVhNikKCW1vdi5sCQlFWENfSVBDKCVhNiksMHg4KCVhNikKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLDB4MiglYTYpCgltb3YudwkJJjB4MjAyNCwweDYoJWE2KQoJc3ViLmwJCSYweDQsJWE2Cgl1bmxrCQklYTYKCWJyYS5sCQlfcmVhbF90cmFjZQoKIwojCSAgIFVJRUggRlJBTUUJCSAgICBDSEsgRlJBTUUKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCSogMHgwICogIDB4MGY0CSoJKiAgICBDdXJyZW50CSoKIwkqKioqKioqKioqKioqKioqKgkqICAgICAgUEMJKgojCSogICAgQ3VycmVudAkqCSoqKioqKioqKioqKioqKioqCiMJKiAgICAgIFBDCSoJKiAweDIgKiAgMHgwMTgJKgojCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJKiAgICAgIFNSCSoJKiAgICAgTmV4dAkqCiMJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKIwkgICAgKDQgd29yZHMpCQkqKioqKioqKioqKioqKioqKgojCQkJCSogICAgICBTUgkqCiMJCQkJKioqKioqKioqKioqKioqKioKIwkJCQkgICAgKDYgd29yZHMpCiMKIyB0aGUgY2hrMiBpbnN0cnVjdGlvbiBzaG91bGQgdGFrZSBhIGNoayB0cmFwLiBzbywgaGVyZSB3ZSBtdXN0IGNyZWF0ZSBhCiMgY2hrIHN0YWNrIGZyYW1lIGZyb20gYW4gdW5pbXBsZW1lbnRlZCBpbnRlZ2VyIGluc3RydWN0aW9uIGV4Y2VwdGlvbiBmcmFtZQojIGFuZCBqdW1wIHRvIHRoZSB1c2VyIHN1cHBsaWVkIGVudHJ5IHBvaW50ICJfcmVhbF9jaGsoKSIuCiMKdWllaF9jaGtfdHJhcDoKCW1vdi5iCQlFWENfQ0MrMSglYTYpLEVYQ19JU1IrMSglYTYpICMgaW5zZXJ0IG5ldyBjY29kZXMKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4M2ZmZgkjIHJlc3RvcmUgZDAtZDcvYTAtYTUKCgltb3YudwkJRVhDX0lTUiglYTYpLCglYTYpCSMgcHV0IG5ldyBTUiBvbiBzdGFjawoJbW92LmwJCUVYQ19JUEMoJWE2KSwweDgoJWE2KQkjIHB1dCAiQ3VycmVudCBQQyIgb24gc3RhY2sKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLDB4MiglYTYpICMgcHV0ICJOZXh0IFBDIiBvbiBzdGFjawoJbW92LncJCSYweDIwMTgsMHg2KCVhNikJIyBwdXQgVmVjdG9yIE9mZnNldCBvbiBzdGFjawoKCW1vdi5sCQlFWENfQTYoJWE2KSwlYTYJCSMgcmVzdG9yZSBhNgoJYWRkLmwJCSZMT0NBTF9TSVpFLCVzcAkJIyBjbGVhciBzdGFjayBmcmFtZQoKCWJyYS5sCQlfcmVhbF9jaGsKCiMKIwkgICBVSUVIIEZSQU1FCQkgRElWQllaRVJPIEZSQU1FCiMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkqIDB4MCAqICAweDBmNAkqCSogICAgQ3VycmVudAkqCiMJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKIwkqICAgIEN1cnJlbnQJKgkqKioqKioqKioqKioqKioqKgojCSogICAgICBQQwkqCSogMHgyICogIDB4MDE0CSoKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCSogICAgICBTUgkqCSogICAgIE5leHQJKgojCSoqKioqKioqKioqKioqKioqCSogICAgICBQQwkqCiMJICAgICg0IHdvcmRzKQkJKioqKioqKioqKioqKioqKioKIwkJCQkqICAgICAgU1IJKgojCQkJCSoqKioqKioqKioqKioqKioqCiMJCQkJICAgICg2IHdvcmRzKQojCiMgdGhlIGRpdmlkZSBpbnN0cnVjdGlvbiBzaG91bGQgdGFrZSBhbiBpbnRlZ2VyIGRpdmlkZSBieSB6ZXJvIHRyYXAuIHNvLCBoZXJlCiMgd2UgbXVzdCBjcmVhdGUgYSBkaXZieXplcm8gc3RhY2sgZnJhbWUgZnJvbSBhbiB1bmltcGxlbWVudGVkIGludGVnZXIKIyBpbnN0cnVjdGlvbiBleGNlcHRpb24gZnJhbWUgYW5kIGp1bXAgdG8gdGhlIHVzZXIgc3VwcGxpZWQgZW50cnkgcG9pbnQKIyAiX3JlYWxfZGl2Ynl6ZXJvKCkiLgojCnVpZWhfZGl2Ynl6ZXJvOgoJbW92LmIJCUVYQ19DQysxKCVhNiksRVhDX0lTUisxKCVhNikgIyBpbnNlcnQgbmV3IGNjb2RlcwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgzZmZmCSMgcmVzdG9yZSBkMC1kNy9hMC1hNQoKCW1vdi53CQlFWENfSVNSKCVhNiksKCVhNikJIyBwdXQgbmV3IFNSIG9uIHN0YWNrCgltb3YubAkJRVhDX0lQQyglYTYpLDB4OCglYTYpCSMgcHV0ICJDdXJyZW50IFBDIiBvbiBzdGFjawoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksMHgyKCVhNikgIyBwdXQgIk5leHQgUEMiIG9uIHN0YWNrCgltb3YudwkJJjB4MjAxNCwweDYoJWE2KQkjIHB1dCBWZWN0b3IgT2Zmc2V0IG9uIHN0YWNrCgoJbW92LmwJCUVYQ19BNiglYTYpLCVhNgkJIyByZXN0b3JlIGE2CglhZGQubAkJJkxPQ0FMX1NJWkUsJXNwCQkjIGNsZWFyIHN0YWNrIGZyYW1lCgoJYnJhLmwJCV9yZWFsX2RpdmJ5emVybwoKIwojCQkJCSBESVZCWVpFUk8gRlJBTUUKIwkJCQkqKioqKioqKioqKioqKioqKgojCQkJCSogICAgQ3VycmVudAkqCiMJICAgVUlFSCBGUkFNRQkJKiAgICAgIFBDCSoKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCSogMHgwICogIDB4MGY0CSoJKiAweDIgKiAweDAxNAkqCiMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkqICAgIEN1cnJlbnQJKgkqICAgICBOZXh0CSoKIwkqICAgICAgUEMJKgkqICAgICAgUEMJKgojCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCSAgICAoNCB3b3JkcykJCSAgICAoNiB3b3JkcykKIwojIHRoZSBkaXZpZGUgaW5zdHJ1Y3Rpb24gc2hvdWxkIHRha2UgYW4gaW50ZWdlciBkaXZpZGUgYnkgemVybyB0cmFwLiBzbywgaGVyZQojIHdlIG11c3QgY3JlYXRlIGEgZGl2Ynl6ZXJvIHN0YWNrIGZyYW1lIGZyb20gYW4gdW5pbXBsZW1lbnRlZCBpbnRlZ2VyCiMgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIGZyYW1lIGFuZCBqdW1wIHRvIHRoZSB1c2VyIHN1cHBsaWVkIGVudHJ5IHBvaW50CiMgIl9yZWFsX2RpdmJ5emVybygpIi4KIwojIEhvd2V2ZXIsIHdlIG11c3QgYWxzbyBkZWFsIHdpdGggdGhlIGZhY3QgdGhhdCAoYTcpKyB3YXMgdXNlZCBmcm9tIHN1cGVydmlzb3IKIyBtb2RlLCB0aGVyZWJ5IHNoaWZ0aW5nIHRoZSBzdGFjayBmcmFtZSB1cCA0IGJ5dGVzLgojCnVpZWhfZGl2Ynl6ZXJvX2E3OgoJbW92LmIJCUVYQ19DQysxKCVhNiksRVhDX0lTUisxKCVhNikgIyBpbnNlcnQgbmV3IGNjb2RlcwoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgzZmZmCSMgcmVzdG9yZSBkMC1kNy9hMC1hNQoKCW1vdi5sCQlFWENfSVBDKCVhNiksMHhjKCVhNikJIyBwdXQgIkN1cnJlbnQgUEMiIG9uIHN0YWNrCgltb3YudwkJJjB4MjAxNCwweGEoJWE2KQkjIHB1dCBWZWN0b3IgT2Zmc2V0IG9uIHN0YWNrCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwweDYoJWE2KSAjIHB1dCAiTmV4dCBQQyIgb24gc3RhY2sKCgltb3YubAkJRVhDX0E2KCVhNiksJWE2CQkjIHJlc3RvcmUgYTYKCWFkZC5sCQkmNCtMT0NBTF9TSVpFLCVzcAkjIGNsZWFyIHN0YWNrIGZyYW1lCgoJYnJhLmwJCV9yZWFsX2RpdmJ5emVybwoKIwojCQkJCSAgIFRSQUNFIEZSQU1FCiMJCQkJKioqKioqKioqKioqKioqKioKIwkJCQkqICAgIEN1cnJlbnQJKgojCSAgIFVJRUggRlJBTUUJCSogICAgICBQQwkqCiMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkqIDB4MCAqICAweDBmNAkqCSogMHgyICogMHgwMjQJKgojCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCiMJKiAgICBDdXJyZW50CSoJKiAgICAgTmV4dAkqCiMJKiAgICAgIFBDCSoJKiAgICAgIFBDCSoKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCSogICAgICBTUgkqCSogICAgICBTUgkqCiMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKIwkgICAgKDQgd29yZHMpCQkgICAgKDYgd29yZHMpCiMKIwojIFRoZSBpbnN0cnVjdGlvbiB0aGF0IHdhcyBqdXN0IGVtdWxhdGVkIHdhcyBhbHNvIGJlaW5nIHRyYWNlZC4gVGhlIHRyYWNlCiMgdHJhcCBmb3IgdGhpcyBpbnN0cnVjdGlvbiB3aWxsIGJlIGxvc3QgdW5sZXNzIHdlIGp1bXAgdG8gdGhlIHRyYWNlIGhhbmRsZXIuCiMgU28sIGhlcmUgd2UgY3JlYXRlIGEgVHJhY2UgRXhjZXB0aW9uIGZvcm1hdCBudW1iZXIgdHdvIGV4Y2VwdGlvbiBzdGFjawojIGZyYW1lIGZyb20gdGhlIFVuaW1wbGVtZW50ZWQgSW50ZWdlciBJbnRydWN0aW9uIEV4Y2VwdGlvbiBzdGFjayBmcmFtZQojIGZvcm1hdCBudW1iZXIgemVybyBhbmQganVtcCB0byB0aGUgdXNlciBzdXBwbGllZCBob29rICJfcmVhbF90cmFjZSgpIi4KIwojIEhvd2V2ZXIsIHdlIG11c3QgYWxzbyBkZWFsIHdpdGggdGhlIGZhY3QgdGhhdCAoYTcpKyB3YXMgdXNlZCBmcm9tIHN1cGVydmlzb3IKIyBtb2RlLCB0aGVyZWJ5IHNoaWZ0aW5nIHRoZSBzdGFjayBmcmFtZSB1cCA0IGJ5dGVzLgojCnVpZWhfdHJhY2VfYTc6Cgltb3YuYgkJRVhDX0NDKzEoJWE2KSxFWENfSVNSKzEoJWE2KSAjIGluc2VydCBuZXcgY2NvZGVzCgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDNmZmYJIyByZXN0b3JlIGQwLWQ3L2EwLWE1CgoJbW92LmwJCUVYQ19JUEMoJWE2KSwweGMoJWE2KQkjIHB1dCAiQ3VycmVudCBQQyIgb24gc3RhY2sKCW1vdi53CQkmMHgyMDI0LDB4YSglYTYpCSMgcHV0IFZlY3RvciBPZmZzZXQgb24gc3RhY2sKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLDB4NiglYTYpICMgcHV0ICJOZXh0IFBDIiBvbiBzdGFjawoKCW1vdi5sCQlFWENfQTYoJWE2KSwlYTYJCSMgcmVzdG9yZSBhNgoJYWRkLmwJCSY0K0xPQ0FMX1NJWkUsJXNwCSMgY2xlYXIgc3RhY2sgZnJhbWUKCglicmEubAkJX3JlYWxfdHJhY2UKCiMKIwkJCQkgICBVSUVIIEZSQU1FCiMJCQkJKioqKioqKioqKioqKioqKioKIwkJCQkqIDB4MCAqIDB4MGY0CSoKIwkgICBVSUVIIEZSQU1FCQkqKioqKioqKioqKioqKioqKgojCSoqKioqKioqKioqKioqKioqCSogICAgIE5leHQJKgojCSogMHgwICogIDB4MGY0CSoJKiAgICAgIFBDCSoKIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgojCSogICAgQ3VycmVudAkqCSogICAgICBTUgkqCiMJKiAgICAgIFBDCSoJKioqKioqKioqKioqKioqKioKIwkqKioqKioqKioqKioqKioqKgkgICAgKDQgd29yZHMpCiMJKiAgICAgIFNSCSoKIwkqKioqKioqKioqKioqKioqKgojCSAgICAoNCB3b3JkcykKdWllaF9hNzoKCW1vdi5iCQlFWENfQ0MrMSglYTYpLEVYQ19JU1IrMSglYTYpICMgaW5zZXJ0IG5ldyBjY29kZXMKCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4M2ZmZgkjIHJlc3RvcmUgZDAtZDcvYTAtYTUKCgltb3YudwkJJjB4MDBmNCwweGUoJWE2KQkjIHB1dCBWZWN0b3IgT2Zmc2V0IG9uIHN0YWNrCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwweGEoJWE2KSAjIHB1dCAiTmV4dCBQQyIgb24gc3RhY2sKCW1vdi53CQlFWENfSVNSKCVhNiksMHg4KCVhNikJIyBwdXQgU1Igb24gc3RhY2sKCgltb3YubAkJRVhDX0E2KCVhNiksJWE2CQkjIHJlc3RvcmUgYTYKCWFkZC5sCQkmOCtMT0NBTF9TSVpFLCVzcAkjIGNsZWFyIHN0YWNrIGZyYW1lCglicmEubAkJX2lzcF9kb25lCgojIyMjIyMjIyMjCgojIHRoaXMgaXMgdGhlIGV4aXQgcG9pbnQgaWYgYSBkYXRhIHJlYWQgb3Igd3JpdGUgZmFpbHMuCiMgYTAgPSBmYWlsaW5nIGFkZHJlc3MKIyBkMCA9IGZzbHcKaXNwX2RhY2M6Cgltb3YubAkJJWEwLCglYTYpCQkjIHNhdmUgYWRkcmVzcwoJbW92LmwJCSVkMCwtMHg0KCVhNikJCSMgc2F2ZSBwYXJ0aWFsIGZzbHcKCglsZWEJCS02NCglYTYpLCVzcAoJbW92bS5sCQkoJXNwKSssJjB4N2ZmZgkJIyByZXN0b3JlIGQwLWQ3L2EwLWE2CgoJbW92LmwJCTB4Yyglc3ApLC0oJXNwKQkJIyBtb3ZlIHZvZmYsaGkocGMpCgltb3YubAkJMHg0KCVzcCksMHgxMCglc3ApCSMgc3RvcmUgZnNsdwoJbW92LmwJCTB4Yyglc3ApLDB4NCglc3ApCSMgc3RvcmUgc3IsbG8ocGMpCgltb3YubAkJMHg4KCVzcCksMHhjKCVzcCkJIyBzdG9yZSBhZGRyZXNzCgltb3YubAkJKCVzcCkrLDB4NCglc3ApCQkjIHN0b3JlIHZvZmYsaGkocGMpCgltb3YudwkJJjB4NDAwOCwweDYoJXNwKQkjIHN0b3JlIG5ldyB2b2ZmCgoJYnJhLmIJCWlzcF9hY2NfZXhpdAoKIyB0aGlzIGlzIHRoZSBleGl0IHBvaW50IGlmIGFuIGluc3RydWN0aW9uIHdvcmQgcmVhZCBmYWlscy4KIyBGU0xXOgojCW1pc2FsaWduZWQgPSB0cnVlCiMJcmVhZCA9IHRydWUKIwlzaXplID0gd29yZAojCWluc3RydWN0aW9uID0gdHJ1ZQojCXNvZnR3YXJlIGVtdWxhdGlvbiBlcnJvciA9IHRydWUKaXNwX2lhY2M6Cgltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDNmZmYJIyByZXN0b3JlIGQwLWQ3L2EwLWE1Cgl1bmxrCQklYTYJCQkjIHVubGluayBmcmFtZQoJc3ViLncJCSYweDgsJXNwCQkjIG1ha2Ugcm9vbSBmb3IgYWNjIGZyYW1lCgltb3YubAkJMHg4KCVzcCksKCVzcCkJCSMgc3RvcmUgc3IsbG8ocGMpCgltb3YudwkJMHhjKCVzcCksMHg0KCVzcCkJIyBzdG9yZSBoaShwYykKCW1vdi53CQkmMHg0MDA4LDB4Niglc3ApCSMgc3RvcmUgbmV3IHZvZmYKCW1vdi5sCQkweDIoJXNwKSwweDgoJXNwKQkjIHN0b3JlIGFkZHJlc3MgKD1wYykKCW1vdi5sCQkmMHgwOTQyODAwMSwweGMoJXNwKQkjIHN0b3JlIGZzbHcKCmlzcF9hY2NfZXhpdDoKCWJ0c3QJCSYweDUsKCVzcCkJCSMgdXNlciBvciBzdXBlcnZpc29yPwoJYmVxLmIJCWlzcF9hY2NfZXhpdDIJCSMgdXNlcgoJYnNldAkJJjB4MiwweGQoJXNwKQkJIyBzZXQgc3VwZXJ2aXNvciBUTSBiaXQKaXNwX2FjY19leGl0MjoKCWJyYS5sCQlfcmVhbF9hY2Nlc3MKCiMgaWYgdGhlIGFkZHJlc3NpbmcgbW9kZSB3YXMgKGFuKSsgb3IgLShhbiksIHRoZSBhZGRyZXNzIHJlZ2lzdGVyIG11c3QKIyBiZSByZXN0b3JlZCB0byBpdHMgcHJlLWV4Y2VwdGlvbiB2YWx1ZSBiZWZvcmUgZW50ZXJpbmcgX3JlYWxfYWNjZXNzLgppc3BfcmVzdG9yZToKCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZyZXN0b3JlX2ZsZyAjIGRvIHdlIG5lZWQgYSByZXN0b3JlPwoJYm5lLmIJCWlzcF9yZXN0b3JlX2RvbmUJIyBubwoJY2xyLmwJCSVkMAoJbW92LmIJCUVYQ19TQVZSRUcoJWE2KSwlZDAJIyByZWdubyB0byByZXN0b3JlCgltb3YubAkJRVhDX1NBVlZBTCglYTYpLChFWENfQVJFR1MsJWE2LCVkMC5sKjQpICMgcmVzdG9yZSB2YWx1ZQppc3BfcmVzdG9yZV9kb25lOgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfY2FsY19lYSgpOiByb3V0aW5lIHRvIGNhbGN1bGF0ZSBlZmZlY3RpdmUgYWRkcmVzcwkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2ltZW1fcmVhZF93b3JkKCkgLSByZWFkIGluc3RydWN0aW9uIHdvcmQJCQkjCiMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIwojCV9kbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBkYXRhIGxvbmd3b3JkIChmb3IgbWVtb3J5IGluZGlyZWN0KQkjCiMJaXNwX2lhY2MoKSAtIGhhbmRsZSBpbnN0cnVjdGlvbiBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkjCiMJaXNwX2RhY2MoKSAtIGhhbmRsZSBkYXRhIGFjY2VzcyBlcnJvciBleGNlcHRpb24JCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlkMCA9IG51bWJlciBvZiBieXRlcyByZWxhdGVkIHRvIGVmZmVjdGl2ZSBhZGRyZXNzICh3LGwpCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJZiBleGl0aW5nIHRocm91Z2ggaXNwX2RhY2MuLi4JCQkJCSMKIwkJYTAgPSBmYWlsaW5nIGFkZHJlc3MJCQkJCSMKIwkJZDAgPSBGU0xXCQkJCQkJIwojCWVsc2lmIGV4aXRpbmcgdGhvdWdoIGlzcF9pYWNjLi4uCQkJCSMKIwkJbm9uZQkJCQkJCQkjCiMJZWxzZQkJCQkJCQkJIwojCQlhMCA9IGVmZmVjdGl2ZSBhZGRyZXNzCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlUaGUgZWZmZWN0aXZlIGFkZHJlc3MgdHlwZSBpcyBkZWNvZGVkIGZyb20gdGhlIG9wd29yZCByZXNpZGluZwkjCiMgb24gdGhlIHN0YWNrLiBBIGp1bXAgdGFibGUgaXMgdXNlZCB0byB2ZWN0b3IgdG8gYSByb3V0aW5lIGZvciB0aGUJIwojIGFwcHJvcHJpYXRlIG1vZGUuIFNpbmNlIG5vbmUgb2YgdGhlIGVtdWxhdGVkIGludGVnZXIgaW5zdHJ1Y3Rpb25zCSMKIyB1c2VzIGJ5dGUtc2l6ZWQgb3BlcmFuZHMsIG9ubHkgaGFuZGxlIHdvcmQgYW5kIGxvbmcgb3BlcmF0aW9ucy4JIwojCQkJCQkJCQkJIwojCURuLEFuCS0gc2hvdWxkbid0IGVudGVyIGhlcmUJCQkJCSMKIwkoQW4pCS0gZmV0Y2ggQW4gdmFsdWUgZnJvbSBzdGFjawkJCQkjCiMJLShBbikJLSBmZXRjaCBBbiB2YWx1ZSBmcm9tIHN0YWNrOyByZXR1cm4gZGVjciB2YWx1ZTsJCSMKIwkJICBwbGFjZSBkZWNyIHZhbHVlIG9uIHN0YWNrOyBzdG9yZSBvbGQgdmFsdWUgaW4gY2FzZSBvZgkjCiMJCSAgZnV0dXJlIGFjY2VzcyBlcnJvcjsgaWYgLShhNyksIHNldCBtZGE3X2ZsZyBpbgkjCiMJCSAgU1BDT05EX0ZMRwkJCQkJCSMKIwkoQW4pKwktIGZldGNoIEFuIHZhbHVlIGZyb20gc3RhY2s7IHJldHVybiB2YWx1ZTsJCSMKIwkJICBwbGFjZSBpbmNyIHZhbHVlIG9uIHN0YWNrOyBzdG9yZSBvbGQgdmFsdWUgaW4gY2FzZSBvZgkjCiMJCSAgZnV0dXJlIGFjY2VzcyBlcnJvcjsgaWYgKGE3KSssIHNldCBtaWE3X2ZsZyBpbgkjCiMJCSAgU1BDT05EX0ZMRwkJCQkJCSMKIwkoZDE2LEFuKSAtIGZldGNoIEFuIHZhbHVlIGZyb20gc3RhY2s7IHJlYWQgZDE2IHVzaW5nCQkjCiMJCSAgX2ltZW1fcmVhZF93b3JkKCk7IGZldGNoIG1heSBmYWlsIC0+IGJyYW5jaCB0bwkjCiMJCSAgaXNwX2lhY2MoKQkJCQkJCSMKIwkoeHh4KS53LCh4eHgpLmwgLSB1c2UgX2ltZW1fcmVhZF97d29yZCxsb25nfSgpIHRvIGZldGNoCQkjCiMJCSAgYWRkcmVzczsgZmV0Y2ggbWF5IGZhaWwJCQkJIwojCSM8ZGF0YT4gLSByZXR1cm4gYWRkcmVzcyBvZiBpbW1lZGlhdGUgdmFsdWU7IHNldCBpbW1lZF9mbGcJIwojCQkgIGluIFNQQ09ORF9GTEcJCQkJCQkjCiMJKGQxNixQQykgLSBmZXRjaCBzdGFja2VkIFBDIHZhbHVlOyByZWFkIGQxNiB1c2luZwkJIwojCQkgIF9pbWVtX3JlYWRfd29yZCgpOyBmZXRjaCBtYXkgZmFpbCAtPiBicmFuY2ggdG8JIwojCQkgIGlzcF9pYWNjKCkJCQkJCQkjCiMJZXZlcnl0aGluZyBlbHNlIC0gcmVhZCBuZWVkZWQgZGlzcGxhY2VtZW50cyBhcyBhcHByb3ByaWF0ZSB3LwkjCiMJCSAgX2ltZW1fcmVhZF97d29yZCxsb25nfSgpOyByZWFkIG1heSBmYWlsOyBpZiBtZW1vcnkJIwojCQkgIGluZGlyZWN0LCByZWFkIGluZGlyZWN0IGFkZHJlc3MgdXNpbmcJCQkjCiMJCSAgX2RtZW1fcmVhZF9sb25nKCkgd2hpY2ggbWF5IGFsc28gZmFpbAkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCWdsb2JhbAkJX2NhbGNfZWEKX2NhbGNfZWE6Cgltb3YubAkJJWQwLCVhMAkJCSMgbW92ZSAjIGJ5dGVzIHRvIGEwCgojIE1PREUgYW5kIFJFRyBhcmUgdGFrZW4gZnJvbSB0aGUgRVhDX09QV09SRC4KCW1vdi53CQlFWENfT1BXT1JEKCVhNiksJWQwCSMgZmV0Y2ggb3Bjb2RlIHdvcmQKCW1vdi53CQklZDAsJWQxCQkJIyBtYWtlIGEgY29weQoKCWFuZGkudwkJJjB4M2YsJWQwCQkjIGV4dHJhY3QgbW9kZSBmaWVsZAoJYW5kaS5sCQkmMHg3LCVkMQkJIyBleHRyYWN0IHJlZyAgZmllbGQKCiMganVtcCB0byB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBmb3IgZWFjaCB7TU9ERSxSRUd9IHBhaXIuCgltb3YudwkJKHRibF9lYV9tb2RlLmIsJXBjLCVkMC53KjIpLCAlZDAgIyBmZXRjaCBqbXAgZGlzdGFuY2UKCWptcAkJKHRibF9lYV9tb2RlLmIsJXBjLCVkMC53KjEpICMgam1wIHRvIGNvcnJlY3QgZWEgbW9kZQoKCXN3YmVnCQkmNjQKdGJsX2VhX21vZGU6CglzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCglzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCglzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKCglzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCglzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCglzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKCglzaG9ydAkJYWRkcl9pbmRfYTAJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCWFkZHJfaW5kX2ExCS0JdGJsX2VhX21vZGUKCXNob3J0CQlhZGRyX2luZF9hMgktCXRibF9lYV9tb2RlCglzaG9ydAkJYWRkcl9pbmRfYTMJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCWFkZHJfaW5kX2E0CS0JdGJsX2VhX21vZGUKCXNob3J0CQlhZGRyX2luZF9hNQktCXRibF9lYV9tb2RlCglzaG9ydAkJYWRkcl9pbmRfYTYJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCWFkZHJfaW5kX2E3CS0JdGJsX2VhX21vZGUKCglzaG9ydAkJYWRkcl9pbmRfcF9hMAktCXRibF9lYV9tb2RlCglzaG9ydAkJYWRkcl9pbmRfcF9hMQktCXRibF9lYV9tb2RlCglzaG9ydAkJYWRkcl9pbmRfcF9hMgktCXRibF9lYV9tb2RlCglzaG9ydAkJYWRkcl9pbmRfcF9hMwktCXRibF9lYV9tb2RlCglzaG9ydAkJYWRkcl9pbmRfcF9hNAktCXRibF9lYV9tb2RlCglzaG9ydAkJYWRkcl9pbmRfcF9hNQktCXRibF9lYV9tb2RlCglzaG9ydAkJYWRkcl9pbmRfcF9hNgktCXRibF9lYV9tb2RlCglzaG9ydAkJYWRkcl9pbmRfcF9hNwktCXRibF9lYV9tb2RlCgoJc2hvcnQJCWFkZHJfaW5kX21fYTAJCS0JdGJsX2VhX21vZGUKCXNob3J0CQlhZGRyX2luZF9tX2ExCQktCXRibF9lYV9tb2RlCglzaG9ydAkJYWRkcl9pbmRfbV9hMgkJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCWFkZHJfaW5kX21fYTMJCS0JdGJsX2VhX21vZGUKCXNob3J0CQlhZGRyX2luZF9tX2E0CQktCXRibF9lYV9tb2RlCglzaG9ydAkJYWRkcl9pbmRfbV9hNQkJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCWFkZHJfaW5kX21fYTYJCS0JdGJsX2VhX21vZGUKCXNob3J0CQlhZGRyX2luZF9tX2E3CQktCXRibF9lYV9tb2RlCgoJc2hvcnQJCWFkZHJfaW5kX2Rpc3BfYTAJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCWFkZHJfaW5kX2Rpc3BfYTEJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCWFkZHJfaW5kX2Rpc3BfYTIJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCWFkZHJfaW5kX2Rpc3BfYTMJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCWFkZHJfaW5kX2Rpc3BfYTQJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCWFkZHJfaW5kX2Rpc3BfYTUJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCWFkZHJfaW5kX2Rpc3BfYTYJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCWFkZHJfaW5kX2Rpc3BfYTcJLQl0YmxfZWFfbW9kZQoKCXNob3J0CQlfYWRkcl9pbmRfZXh0CQktCXRibF9lYV9tb2RlCglzaG9ydAkJX2FkZHJfaW5kX2V4dAkJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCV9hZGRyX2luZF9leHQJCS0JdGJsX2VhX21vZGUKCXNob3J0CQlfYWRkcl9pbmRfZXh0CQktCXRibF9lYV9tb2RlCglzaG9ydAkJX2FkZHJfaW5kX2V4dAkJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCV9hZGRyX2luZF9leHQJCS0JdGJsX2VhX21vZGUKCXNob3J0CQlfYWRkcl9pbmRfZXh0CQktCXRibF9lYV9tb2RlCglzaG9ydAkJX2FkZHJfaW5kX2V4dAkJLQl0YmxfZWFfbW9kZQoKCXNob3J0CQlhYnNfc2hvcnQJCS0JdGJsX2VhX21vZGUKCXNob3J0CQlhYnNfbG9uZwkJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCXBjX2luZAkJCS0JdGJsX2VhX21vZGUKCXNob3J0CQlwY19pbmRfZXh0CQktCXRibF9lYV9tb2RlCglzaG9ydAkJaW1tZWRpYXRlCQktCXRibF9lYV9tb2RlCglzaG9ydAkJdGJsX2VhX21vZGUJCS0JdGJsX2VhX21vZGUKCXNob3J0CQl0YmxfZWFfbW9kZQkJLQl0YmxfZWFfbW9kZQoJc2hvcnQJCXRibF9lYV9tb2RlCQktCXRibF9lYV9tb2RlCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Q6IChBbikgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwphZGRyX2luZF9hMDoKCW1vdi5sCQlFWENfQTAoJWE2KSwlYTAJCSMgR2V0IGN1cnJlbnQgYTAKCXJ0cwoKYWRkcl9pbmRfYTE6Cgltb3YubAkJRVhDX0ExKCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGExCglydHMKCmFkZHJfaW5kX2EyOgoJbW92LmwJCUVYQ19BMiglYTYpLCVhMAkJIyBHZXQgY3VycmVudCBhMgoJcnRzCgphZGRyX2luZF9hMzoKCW1vdi5sCQlFWENfQTMoJWE2KSwlYTAJCSMgR2V0IGN1cnJlbnQgYTMKCXJ0cwoKYWRkcl9pbmRfYTQ6Cgltb3YubAkJRVhDX0E0KCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGE0CglydHMKCmFkZHJfaW5kX2E1OgoJbW92LmwJCUVYQ19BNSglYTYpLCVhMAkJIyBHZXQgY3VycmVudCBhNQoJcnRzCgphZGRyX2luZF9hNjoKCW1vdi5sCQlFWENfQTYoJWE2KSwlYTAJCSMgR2V0IGN1cnJlbnQgYTYKCXJ0cwoKYWRkcl9pbmRfYTc6Cgltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGE3CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3LyBwb3N0aW5jcmVtZW50OiAoQW4pKyAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmFkZHJfaW5kX3BfYTA6Cgltb3YubAkJJWEwLCVkMAkJCSMgY29weSBuby4gYnl0ZXMKCW1vdi5sCQlFWENfQTAoJWE2KSwlYTAJCSMgbG9hZCBjdXJyZW50IHZhbHVlCglhZGQubAkJJWEwLCVkMAkJCSMgaW5jcmVtZW50Cgltb3YubAkJJWQwLEVYQ19BMCglYTYpCQkjIHNhdmUgaW5jcmVtZW50ZWQgdmFsdWUKCgltb3YubAkJJWEwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKCW1vdi5iCQkmMHgwLEVYQ19TQVZSRUcoJWE2KQkjIHNhdmUgcmVnbm8sIHRvbwoJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZwoJcnRzCgphZGRyX2luZF9wX2ExOgoJbW92LmwJCSVhMCwlZDAJCQkjIGNvcHkgbm8uIGJ5dGVzCgltb3YubAkJRVhDX0ExKCVhNiksJWEwCQkjIGxvYWQgY3VycmVudCB2YWx1ZQoJYWRkLmwJCSVhMCwlZDAJCQkjIGluY3JlbWVudAoJbW92LmwJCSVkMCxFWENfQTEoJWE2KQkJIyBzYXZlIGluY3JlbWVudGVkIHZhbHVlCgoJbW92LmwJCSVhMCxFWENfU0FWVkFMKCVhNikJIyBzYXZlIGluIGNhc2Ugb2YgYWNjZXNzIGVycm9yCgltb3YuYgkJJjB4MSxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KCW1vdi5iCQkmcmVzdG9yZV9mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0IGZsYWcKCXJ0cwoKYWRkcl9pbmRfcF9hMjoKCW1vdi5sCQklYTAsJWQwCQkJIyBjb3B5IG5vLiBieXRlcwoJbW92LmwJCUVYQ19BMiglYTYpLCVhMAkJIyBsb2FkIGN1cnJlbnQgdmFsdWUKCWFkZC5sCQklYTAsJWQwCQkJIyBpbmNyZW1lbnQKCW1vdi5sCQklZDAsRVhDX0EyKCVhNikJCSMgc2F2ZSBpbmNyZW1lbnRlZCB2YWx1ZQoKCW1vdi5sCQklYTAsRVhDX1NBVlZBTCglYTYpCSMgc2F2ZSBpbiBjYXNlIG9mIGFjY2VzcyBlcnJvcgoJbW92LmIJCSYweDIsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCgltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCglydHMKCmFkZHJfaW5kX3BfYTM6Cgltb3YubAkJJWEwLCVkMAkJCSMgY29weSBuby4gYnl0ZXMKCW1vdi5sCQlFWENfQTMoJWE2KSwlYTAJCSMgbG9hZCBjdXJyZW50IHZhbHVlCglhZGQubAkJJWEwLCVkMAkJCSMgaW5jcmVtZW50Cgltb3YubAkJJWQwLEVYQ19BMyglYTYpCQkjIHNhdmUgaW5jcmVtZW50ZWQgdmFsdWUKCgltb3YubAkJJWEwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKCW1vdi5iCQkmMHgzLEVYQ19TQVZSRUcoJWE2KQkjIHNhdmUgcmVnbm8sIHRvbwoJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZwoJcnRzCgphZGRyX2luZF9wX2E0OgoJbW92LmwJCSVhMCwlZDAJCQkjIGNvcHkgbm8uIGJ5dGVzCgltb3YubAkJRVhDX0E0KCVhNiksJWEwCQkjIGxvYWQgY3VycmVudCB2YWx1ZQoJYWRkLmwJCSVhMCwlZDAJCQkjIGluY3JlbWVudAoJbW92LmwJCSVkMCxFWENfQTQoJWE2KQkJIyBzYXZlIGluY3JlbWVudGVkIHZhbHVlCgoJbW92LmwJCSVhMCxFWENfU0FWVkFMKCVhNikJIyBzYXZlIGluIGNhc2Ugb2YgYWNjZXNzIGVycm9yCgltb3YuYgkJJjB4NCxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KCW1vdi5iCQkmcmVzdG9yZV9mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0IGZsYWcKCXJ0cwoKYWRkcl9pbmRfcF9hNToKCW1vdi5sCQklYTAsJWQwCQkJIyBjb3B5IG5vLiBieXRlcwoJbW92LmwJCUVYQ19BNSglYTYpLCVhMAkJIyBsb2FkIGN1cnJlbnQgdmFsdWUKCWFkZC5sCQklYTAsJWQwCQkJIyBpbmNyZW1lbnQKCW1vdi5sCQklZDAsRVhDX0E1KCVhNikJCSMgc2F2ZSBpbmNyZW1lbnRlZCB2YWx1ZQoKCW1vdi5sCQklYTAsRVhDX1NBVlZBTCglYTYpCSMgc2F2ZSBpbiBjYXNlIG9mIGFjY2VzcyBlcnJvcgoJbW92LmIJCSYweDUsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCgltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCglydHMKCmFkZHJfaW5kX3BfYTY6Cgltb3YubAkJJWEwLCVkMAkJCSMgY29weSBuby4gYnl0ZXMKCW1vdi5sCQlFWENfQTYoJWE2KSwlYTAJCSMgbG9hZCBjdXJyZW50IHZhbHVlCglhZGQubAkJJWEwLCVkMAkJCSMgaW5jcmVtZW50Cgltb3YubAkJJWQwLEVYQ19BNiglYTYpCQkjIHNhdmUgaW5jcmVtZW50ZWQgdmFsdWUKCgltb3YubAkJJWEwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKCW1vdi5iCQkmMHg2LEVYQ19TQVZSRUcoJWE2KQkjIHNhdmUgcmVnbm8sIHRvbwoJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZwoJcnRzCgphZGRyX2luZF9wX2E3OgoJbW92LmIJCSZtaWE3X2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgInNwZWNpYWwgY2FzZSIgZmxhZwoKCW1vdi5sCQklYTAsJWQwCQkJIyBjb3B5IG5vLiBieXRlcwoJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyBsb2FkIGN1cnJlbnQgdmFsdWUKCWFkZC5sCQklYTAsJWQwCQkJIyBpbmNyZW1lbnQKCW1vdi5sCQklZDAsRVhDX0E3KCVhNikJCSMgc2F2ZSBpbmNyZW1lbnRlZCB2YWx1ZQoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3LyBwcmVkZWNyZW1lbnQ6IC0oQW4pICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwphZGRyX2luZF9tX2EwOgoJbW92LmwJCUVYQ19BMCglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhMAoJbW92LmwJCSVkMCxFWENfU0FWVkFMKCVhNikJIyBzYXZlIGluIGNhc2Ugb2YgYWNjZXNzIGVycm9yCglzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50Cgltb3YubAkJJWQwLEVYQ19BMCglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQoJbW92LmwJCSVkMCwlYTAKCgltb3YuYgkJJjB4MCxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KCW1vdi5iCQkmcmVzdG9yZV9mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0IGZsYWcKCXJ0cwoKYWRkcl9pbmRfbV9hMToKCW1vdi5sCQlFWENfQTEoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTEKCW1vdi5sCQklZDAsRVhDX1NBVlZBTCglYTYpCSMgc2F2ZSBpbiBjYXNlIG9mIGFjY2VzcyBlcnJvcgoJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAoJbW92LmwJCSVkMCxFWENfQTEoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKCW1vdi5sCQklZDAsJWEwCgoJbW92LmIJCSYweDEsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCgltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCglydHMKCmFkZHJfaW5kX21fYTI6Cgltb3YubAkJRVhDX0EyKCVhNiksJWQwCQkjIEdldCBjdXJyZW50IGEyCgltb3YubAkJJWQwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKCW1vdi5sCQklZDAsRVhDX0EyKCVhNikJCSMgU2F2ZSBkZWNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoKCW1vdi5iCQkmMHgyLEVYQ19TQVZSRUcoJWE2KQkjIHNhdmUgcmVnbm8sIHRvbwoJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZwoJcnRzCgphZGRyX2luZF9tX2EzOgoJbW92LmwJCUVYQ19BMyglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhMwoJbW92LmwJCSVkMCxFWENfU0FWVkFMKCVhNikJIyBzYXZlIGluIGNhc2Ugb2YgYWNjZXNzIGVycm9yCglzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50Cgltb3YubAkJJWQwLEVYQ19BMyglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQoJbW92LmwJCSVkMCwlYTAKCgltb3YuYgkJJjB4MyxFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KCW1vdi5iCQkmcmVzdG9yZV9mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0IGZsYWcKCXJ0cwoKYWRkcl9pbmRfbV9hNDoKCW1vdi5sCQlFWENfQTQoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTQKCW1vdi5sCQklZDAsRVhDX1NBVlZBTCglYTYpCSMgc2F2ZSBpbiBjYXNlIG9mIGFjY2VzcyBlcnJvcgoJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAoJbW92LmwJCSVkMCxFWENfQTQoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKCW1vdi5sCQklZDAsJWEwCgoJbW92LmIJCSYweDQsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCgltb3YuYgkJJnJlc3RvcmVfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBmbGFnCglydHMKCmFkZHJfaW5kX21fYTU6Cgltb3YubAkJRVhDX0E1KCVhNiksJWQwCQkjIEdldCBjdXJyZW50IGE1Cgltb3YubAkJJWQwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKCW1vdi5sCQklZDAsRVhDX0E1KCVhNikJCSMgU2F2ZSBkZWNyIHZhbHVlCgltb3YubAkJJWQwLCVhMAoKCW1vdi5iCQkmMHg1LEVYQ19TQVZSRUcoJWE2KQkjIHNhdmUgcmVnbm8sIHRvbwoJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZwoJcnRzCgphZGRyX2luZF9tX2E2OgoJbW92LmwJCUVYQ19BNiglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNgoJbW92LmwJCSVkMCxFWENfU0FWVkFMKCVhNikJIyBzYXZlIGluIGNhc2Ugb2YgYWNjZXNzIGVycm9yCglzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50Cgltb3YubAkJJWQwLEVYQ19BNiglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQoJbW92LmwJCSVkMCwlYTAKCgltb3YuYgkJJjB4NixFWENfU0FWUkVHKCVhNikJIyBzYXZlIHJlZ25vLCB0b28KCW1vdi5iCQkmcmVzdG9yZV9mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0IGZsYWcKCXJ0cwoKYWRkcl9pbmRfbV9hNzoKCW1vdi5iCQkmbWRhN19mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0ICJzcGVjaWFsIGNhc2UiIGZsYWcKCgltb3YubAkJRVhDX0E3KCVhNiksJWQwCQkjIEdldCBjdXJyZW50IGE3CglzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50Cgltb3YubAkJJWQwLEVYQ19BNyglYTYpCQkjIFNhdmUgZGVjciB2YWx1ZQoJbW92LmwJCSVkMCwlYTAKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHcvIGRpc3BsYWNlbWVudDogKGQxNiwgQW4pICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKYWRkcl9pbmRfZGlzcF9hMDoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKCgl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CglibmUubAkJaXNwX2lhY2MJCSMgeWVzCgoJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAoJYWRkLmwJCUVYQ19BMCglYTYpLCVhMAkJIyBhMCArIGQxNgoJcnRzCgphZGRyX2luZF9kaXNwX2ExOgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAoKCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKCgltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CglhZGQubAkJRVhDX0ExKCVhNiksJWEwCQkjIGExICsgZDE2CglydHMKCmFkZHJfaW5kX2Rpc3BfYTI6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCgoJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPwoJYm5lLmwJCWlzcF9pYWNjCQkjIHllcwoKCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKCWFkZC5sCQlFWENfQTIoJWE2KSwlYTAJCSMgYTIgKyBkMTYKCXJ0cwoKYWRkcl9pbmRfZGlzcF9hMzoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKCgl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CglibmUubAkJaXNwX2lhY2MJCSMgeWVzCgoJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAoJYWRkLmwJCUVYQ19BMyglYTYpLCVhMAkJIyBhMyArIGQxNgoJcnRzCgphZGRyX2luZF9kaXNwX2E0OgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAoKCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKCgltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CglhZGQubAkJRVhDX0E0KCVhNiksJWEwCQkjIGE0ICsgZDE2CglydHMKCmFkZHJfaW5kX2Rpc3BfYTU6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCgoJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPwoJYm5lLmwJCWlzcF9pYWNjCQkjIHllcwoKCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKCWFkZC5sCQlFWENfQTUoJWE2KSwlYTAJCSMgYTUgKyBkMTYKCXJ0cwoKYWRkcl9pbmRfZGlzcF9hNjoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKCgl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CglibmUubAkJaXNwX2lhY2MJCSMgeWVzCgoJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAoJYWRkLmwJCUVYQ19BNiglYTYpLCVhMAkJIyBhNiArIGQxNgoJcnRzCgphZGRyX2luZF9kaXNwX2E3OgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAoKCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKCgltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CglhZGQubAkJRVhDX0E3KCVhNiksJWEwCQkjIGE3ICsgZDE2CglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgdy8gaW5kZXgoOC1iaXQgZGlzcGxhY2VtZW50KTogKGRuLCBBbiwgWG4pICMKIyAgICAiICAgICAgICIgICAgICAgICAiICAgIHcvICAgIiAgKGJhc2UgZGlzcGxhY2VtZW50KTogKGJkLCBBbiwgWG4pICAjCiMgTWVtb3J5IGluZGlyZWN0IHBvc3RpbmRleGVkOiAoW2JkLCBBbl0sIFhuLCBvZCkJCSAgICAgICAjCiMgTWVtb3J5IGluZGlyZWN0IHByZWluZGV4ZWQ6IChbYmQsIEFuLCBYbl0sIG9kKQkJICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCl9hZGRyX2luZF9leHQ6Cgltb3YubAkJJWQxLC0oJXNwKQoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggZXh0d29yZCBpbiBkMAoKCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKCgltb3YubAkJKCVzcCkrLCVkMQoKCW1vdi5sCQkoRVhDX0FSRUdTLCVhNiwlZDEudyo0KSwlYTAgIyBwdXQgYmFzZSBpbiBhMAoKCWJ0c3QJCSYweDgsJWQwCgliZXEuYgkJYWRkcl9pbmRfaW5kZXhfOGJpdAkjIGZvciBleHQgd29yZCBvciBub3Q/CgoJbW92bS5sCQkmMHgzYzAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ1CgoJbW92LmwJCSVkMCwlZDUJCQkjIHB1dCBleHR3b3JkIGluIGQ1Cgltb3YubAkJJWEwLCVkMwkJCSMgcHV0IGJhc2UgaW4gZDMKCglicmEubAkJY2FsY19tZW1faW5kCQkjIGNhbGMgbWVtb3J5IGluZGlyZWN0CgphZGRyX2luZF9pbmRleF84Yml0OgoJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBvbGQgZDIKCgltb3YubAkJJWQwLCVkMQoJcm9sLncJCSYweDQsJWQxCglhbmRpLncJCSYweGYsJWQxCQkjIGV4dHJhY3QgaW5kZXggcmVnbm8KCgltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQxLncqNCksJWQxICMgZmV0Y2ggaW5kZXggcmVnIHZhbHVlCgoJYnRzdAkJJjB4YiwlZDAJCSMgaXMgaXQgd29yZCBvciBsb25nPwoJYm5lLmIJCWFpaThfbG9uZwoJZXh0LmwJCSVkMQkJCSMgc2lnbiBleHRlbmQgd29yZCBpbmRleAphaWk4X2xvbmc6Cgltb3YubAkJJWQwLCVkMgoJcm9sLncJCSYweDcsJWQyCglhbmRpLmwJCSYweDMsJWQyCQkjIGV4dHJhY3Qgc2NhbGUgdmFsdWUKCglsc2wubAkJJWQyLCVkMQkJCSMgc2hpZnQgaW5kZXggYnkgc2NhbGUKCglleHRiLmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CglhZGQubAkJJWQxLCVkMAkJCSMgaW5kZXggKyBkaXNwCglhZGQubAkJJWQwLCVhMAkJCSMgQW4gKyAoaW5kZXggKyBkaXNwKQoKCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgb2xkIGQyCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBJbW1lZGlhdGU6ICM8ZGF0YT4gIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgd29yZCwgbG9uZzogPGVhPiBvZiB0aGUgZGF0YSBpcyB0aGUgY3VycmVudCBleHRlbnNpb24gd29yZAkJIwojCXBvaW50ZXIgdmFsdWUuIG5ldyBleHRlbnNpb24gd29yZCBwb2ludGVyIGlzIHNpbXBseSB0aGUgb2xkCSMKIwlwbHVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRhdGEgdHlwZSgyIG9yIDQpLgkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmltbWVkaWF0ZToKCW1vdi5iCQkmaW1tZWRfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBpbW1lZGlhdGUgZmxhZwoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGV4dGVuc2lvbiB3b3JkIHB0cgoJcnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBYnNvbHV0ZSBzaG9ydDogKFhYWCkuVyAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwphYnNfc2hvcnQ6Cgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF93b3JkCQkjIGZldGNoIHNob3J0IGFkZHJlc3MKCgl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CglibmUubAkJaXNwX2lhY2MJCSMgeWVzCgoJbW92LncJCSVkMCwlYTAJCQkjIHJldHVybiA8ZWE+IGluIGEwCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQWJzb2x1dGUgbG9uZzogKFhYWCkuTCAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmFic19sb25nOgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBsb25nIGFkZHJlc3MKCgl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CglibmUubAkJaXNwX2lhY2MJCSMgeWVzCgoJbW92LmwJCSVkMCwlYTAJCQkjIHJldHVybiA8ZWE+IGluIGEwCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBQcm9ncmFtIGNvdW50ZXIgaW5kaXJlY3Qgdy8gZGlzcGxhY2VtZW50OiAoZDE2LCBQQykgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnBjX2luZDoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggd29yZCBkaXNwbGFjZW1lbnQKCgl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CglibmUubAkJaXNwX2lhY2MJCSMgeWVzCgoJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAoKCWFkZC5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIHBjICsgZDE2CgojIF9pbWVtX3JlYWRfd29yZCgpIGluY3JlYXNlZCB0aGUgZXh0d3B0ciBieSAyLiBuZWVkIHRvIGFkanVzdCBoZXJlLgoJc3VicS5sCQkmMHgyLCVhMAkJIyBhZGp1c3QgPGVhPgoKCXJ0cwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFBDIGluZGlyZWN0IHcvIGluZGV4KDgtYml0IGRpc3BsYWNlbWVudCk6IChkOCwgUEMsIEFuKSAjCiMgIiAgICAgIiAgICAgdy8gICAiICAoYmFzZSBkaXNwbGFjZW1lbnQpOiAoYmQsIFBDLCBBbikgICMKIyBQQyBtZW1vcnkgaW5kaXJlY3QgcG9zdGluZGV4ZWQ6IChbYmQsIFBDXSwgWG4sIG9kKSAgICAgIwojIFBDIG1lbW9yeSBpbmRpcmVjdCBwcmVpbmRleGVkOiAoW2JkLCBQQywgWG5dLCBvZCkgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcGNfaW5kX2V4dDoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggZXh0IHdvcmQKCgl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CglibmUubAkJaXNwX2lhY2MJCSMgeWVzCgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgcHV0IGJhc2UgaW4gYTAKCXN1YnEubAkJJjB4MiwlYTAJCSMgYWRqdXN0IGJhc2UKCglidHN0CQkmMHg4LCVkMAkJIyBpcyBkaXNwIG9ubHkgOCBiaXRzPwoJYmVxLmIJCXBjX2luZF9pbmRleF84Yml0CSMgeWVzCgojIHRoZSBpbmRleGVkIGFkZHJlc3NpbmcgbW9kZSB1c2VzIGEgYmFzZSBkaXNwbGFjZW1lbnQgb2Ygc2l6ZQojIHdvcmQgb3IgbG9uZwoJbW92bS5sCQkmMHgzYzAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ1CgoJbW92LmwJCSVkMCwlZDUJCQkjIHB1dCBleHR3b3JkIGluIGQ1Cgltb3YubAkJJWEwLCVkMwkJCSMgcHV0IGJhc2UgaW4gZDMKCglicmEubAkJY2FsY19tZW1faW5kCQkjIGNhbGMgbWVtb3J5IGluZGlyZWN0CgpwY19pbmRfaW5kZXhfOGJpdDoKCW1vdi5sCQklZDIsLSglc3ApCQkjIGNyZWF0ZSBhIHRlbXAgcmVnaXN0ZXIKCgltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBleHR3b3JkIGNvcHkKCXJvbC53CQkmMHg0LCVkMQkJIyByb3RhdGUgcmVnIG51bSBpbnRvIHBsYWNlCglhbmRpLncJCSYweGYsJWQxCQkjIGV4dHJhY3QgcmVnaXN0ZXIgbnVtYmVyCgoJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMS53KjQpLCVkMSAjIGZldGNoIGluZGV4IHJlZyB2YWx1ZQoKCWJ0c3QJCSYweGIsJWQwCQkjIGlzIGluZGV4IHdvcmQgb3IgbG9uZz8KCWJuZS5iCQlwaWk4X2xvbmcJCSMgbG9uZwoJZXh0LmwJCSVkMQkJCSMgc2lnbiBleHRlbmQgd29yZCBpbmRleApwaWk4X2xvbmc6Cgltb3YubAkJJWQwLCVkMgkJCSMgbWFrZSBleHR3b3JkIGNvcHkKCXJvbC53CQkmMHg3LCVkMgkJIyByb3RhdGUgc2NhbGUgdmFsdWUgaW50byBwbGFjZQoJYW5kaS5sCQkmMHgzLCVkMgkJIyBleHRyYWN0IHNjYWxlIHZhbHVlCgoJbHNsLmwJCSVkMiwlZDEJCQkjIHNoaWZ0IGluZGV4IGJ5IHNjYWxlCgoJZXh0Yi5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAoJYWRkLmwJCSVkMSwlZDAJCQkjIGluZGV4ICsgZGlzcAoJYWRkLmwJCSVkMCwlYTAJCQkjIEFuICsgKGluZGV4ICsgZGlzcCkKCgltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIHRlbXAgcmVnaXN0ZXIKCglydHMKCiMgYTUgPSBleGNfZXh0d3B0cgkoZ2xvYmFsIHRvIHVhZWgpCiMgYTQgPSBleGNfb3B3b3JkCShnbG9iYWwgdG8gdWFlaCkKIyBhMyA9IGV4Y19kcmVncwkoZ2xvYmFsIHRvIHVhZWgpCgojIGQyID0gaW5kZXgJCShpbnRlcm5hbCAiICAgICAiICAgICkKIyBkMyA9IGJhc2UJCShpbnRlcm5hbCAiICAgICAiICAgICkKIyBkNCA9IG9kCQkoaW50ZXJuYWwgIiAgICAgIiAgICApCiMgZDUgPSBleHR3b3JkCQkoaW50ZXJuYWwgIiAgICAgIiAgICApCmNhbGNfbWVtX2luZDoKCWJ0c3QJCSYweDYsJWQ1CQkjIGlzIHRoZSBpbmRleCBzdXBwcmVzc2VkPwoJYmVxLmIJCWNhbGNfaW5kZXgKCWNsci5sCQklZDIJCQkjIHllcywgc28gaW5kZXggPSAwCglicmEuYgkJYmFzZV9zdXBwX2NrCmNhbGNfaW5kZXg6CgliZmV4dHUJCSVkNXsmMTY6JjR9LCVkMgoJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMi53KjQpLCVkMgoJYnRzdAkJJjB4YiwlZDUJCSMgaXMgaW5kZXggd29yZCBvciBsb25nPwoJYm5lLmIJCW5vX2V4dAoJZXh0LmwJCSVkMgpub19leHQ6CgliZmV4dHUJCSVkNXsmMjE6JjJ9LCVkMAoJbHNsLmwJCSVkMCwlZDIKYmFzZV9zdXBwX2NrOgoJYnRzdAkJJjB4NywlZDUJCSMgaXMgdGhlIGJkIHN1cHByZXNzZWQ/CgliZXEuYgkJbm9fYmFzZV9zdXAKCWNsci5sCQklZDMKbm9fYmFzZV9zdXA6CgliZmV4dHUJCSVkNXsmMjY6JjJ9LCVkMAkjIGdldCBiZCBzaXplCiMJYmVxLmwJCV9lcnJvcgkJCSMgaWYgKHNpemUgPT0gMCkgaXQncyByZXNlcnZlZAoJY21waS5iCQklZDAsJjIKCWJsdC5iCQlub19iZAoJYmVxLmIJCWdldF93b3JkX2JkCgoJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgoJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwoKCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKCglicmEuYgkJY2hrX2luZApnZXRfd29yZF9iZDoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKCgl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CglibmUubAkJaXNwX2lhY2MJCSMgeWVzCgoJZXh0LmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgYmQKCmNoa19pbmQ6CglhZGQubAkJJWQwLCVkMwkJCSMgYmFzZSArPSBiZApub19iZDoKCWJmZXh0dQkJJWQ1eyYzMDomMn0sJWQwCQkjIGlzIG9kIHN1cHByZXNzZWQ/CgliZXEudwkJYWlpX2JkCgljbXBpLmIJCSVkMCwmMHgyCglibHQuYgkJbnVsbF9vZAoJYmVxLmIJCXdvcmRfb2QKCgltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCglic3IubAkJX2ltZW1fcmVhZF9sb25nCgoJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPwoJYm5lLmwJCWlzcF9pYWNjCQkjIHllcwoKCWJyYS5iCQlhZGRfdGhlbQoKd29yZF9vZDoKCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKCgl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CglibmUubAkJaXNwX2lhY2MJCSMgeWVzCgoJZXh0LmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgb2QKCWJyYS5iCQlhZGRfdGhlbQoKbnVsbF9vZDoKCWNsci5sCQklZDAKYWRkX3RoZW06Cgltb3YubAkJJWQwLCVkNAoJYnRzdAkJJjB4MiwlZDUJCSMgcHJlIG9yIHBvc3QgaW5kZXhpbmc/CgliZXEuYgkJcHJlX2luZGV4ZWQKCgltb3YubAkJJWQzLCVhMAoJYnNyLmwJCV9kbWVtX3JlYWRfbG9uZwoKCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KCWJuZS5iCQljYWxjX2VhX2VycgkJIyB5ZXMKCglhZGQubAkJJWQyLCVkMAkJCSMgPGVhPiArPSBpbmRleAoJYWRkLmwJCSVkNCwlZDAJCQkjIDxlYT4gKz0gb2QKCWJyYS5iCQlkb25lX2VhCgpwcmVfaW5kZXhlZDoKCWFkZC5sCQklZDIsJWQzCQkJIyBwcmVpbmRleGluZwoJbW92LmwJCSVkMywlYTAKCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcKCgl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CglibmUuYgkJY2FsY19lYV9lcnIJCSMgeWVzCgoJYWRkLmwJCSVkNCwlZDAJCQkjIGVhICs9IG9kCglicmEuYgkJZG9uZV9lYQoKYWlpX2JkOgoJYWRkLmwJCSVkMiwlZDMJCQkjIGVhID0gKGJhc2UgKyBiZCkgKyBpbmRleAoJbW92LmwJCSVkMywlZDAKZG9uZV9lYToKCW1vdi5sCQklZDAsJWEwCgoJbW92bS5sCQkoJXNwKSssJjB4MDAzYwkJIyByZXN0b3JlIGQyLWQ1CglydHMKCiMgaWYgZG1lbV9yZWFkX2xvbmcoKSByZXR1cm5zIGEgZmFpbCBtZXNzYWdlIGluIGQxLCB0aGUgcGFja2FnZQojIG11c3QgY3JlYXRlIGFuIGFjY2VzcyBlcnJvciBmcmFtZS4gaGVyZSwgd2UgcGFzcyBhIHNrZWxldG9uIGZzbHcKIyBhbmQgdGhlIGZhaWxpbmcgYWRkcmVzcyB0byB0aGUgcm91dGluZSB0aGF0IGNyZWF0ZXMgdGhlIG5ldyBmcmFtZS4KIyBGU0xXOgojCXJlYWQgPSB0cnVlCiMJc2l6ZSA9IGxvbmd3b3JkCiMJVE0gPSBkYXRhCiMJc29mdHdhcmUgZW11bGF0aW9uIGVycm9yID0gdHJ1ZQpjYWxjX2VhX2VycjoKCW1vdi5sCQklZDMsJWEwCQkJIyBwYXNzIGZhaWxpbmcgYWRkcmVzcwoJbW92LmwJCSYweDAxMDEwMDAxLCVkMAkJIyBwYXNzIGZzbHcKCWJyYS5sCQlpc3BfZGFjYwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJX21vdmVwZXJpcGhlcmFsKCk6IHJvdXRpbmUgdG8gZW11bGF0ZSBtb3ZlcCBpbnN0cnVjdGlvbgkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCiMJX2RtZW1fcmVhZF9ieXRlKCkgLSByZWFkIGJ5dGUgZnJvbSBtZW1vcnkJCQkjCiMJX2RtZW1fd3JpdGVfYnl0ZSgpIC0gd3JpdGUgYnl0ZSB0byBtZW1vcnkJCQkjCiMJaXNwX2RhY2MoKSAtIGhhbmRsZSBkYXRhIGFjY2VzcyBlcnJvciBleGNlcHRpb24JCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlub25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKIwlJZiBleGl0aW5nIHRocm91Z2ggaXNwX2RhY2MuLi4JCQkJCSMKIwkJYTAgPSBmYWlsaW5nIGFkZHJlc3MJCQkJCSMKIwkJZDAgPSBGU0xXCQkJCQkJIwojCWVsc2UJCQkJCQkJCSMKIwkJbm9uZQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlEZWNvZGUgdGhlIG1vdmVwIGluc3RydWN0aW9uIHdvcmRzIHN0b3JlZCBhdCBFWENfT1BXT1JEIGFuZAkjCiMgZWl0aGVyIHJlYWQgb3Igd3JpdGUgdGhlIHJlcXVpcmVkIGJ5dGVzIGZyb20vdG8gbWVtb3J5LiBVc2UgdGhlCSMKIyBfZG1lbV97cmVhZCx3cml0ZX1fYnl0ZSgpIHJvdXRpbmVzLiBJZiBvbmUgb2YgdGhlIG1lbW9yeSByb3V0aW5lcwkjCiMgcmV0dXJucyBhIGZhaWxpbmcgdmFsdWUsIHdlIG11c3QgcGFzcyB0aGUgZmFpbGluZyBhZGRyZXNzIGFuZAlhIEZTTFcJIwojIHRvIHRoZSBfaXNwX2RhY2MoKSByb3V0aW5lLgkJCQkJCSMKIwlTaW5jZSB0aGlzIGluc3RydWN0aW9uIGlzIHVzZWQgdG8gYWNjZXNzIHBlcmlwaGVyYWxzLCBtYWtlIHN1cmUJIwojIHRvIG9ubHkgYWNjZXNzIHRoZSByZXF1aXJlZCBieXRlcy4JCQkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgbW92ZXAuKHcsbCkJRHgsKGQsQXkpICMKIyBtb3ZlcC4odyxsKQkoZCxBeSksRHggIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCWdsb2JhbAkJX21vdmVwZXJpcGhlcmFsCl9tb3ZlcGVyaXBoZXJhbDoKCW1vdi53CQlFWENfT1BXT1JEKCVhNiksJWQxCSMgZmV0Y2ggdGhlIG9wY29kZSB3b3JkCgoJbW92LmIJCSVkMSwlZDAKCWFuZC53CQkmMHg3LCVkMAkJIyBleHRyYWN0IEF5IGZyb20gb3Bjb2RlIHdvcmQKCgltb3YubAkJKEVYQ19BUkVHUywlYTYsJWQwLncqNCksJWEwICMgZmV0Y2ggYXkKCglhZGQudwkJRVhDX0VYVFdPUkQoJWE2KSwlYTAJIyBhZGQ6IGFuICsgc2duX2V4dChkaXNwKQoKCWJ0c3QJCSYweDcsJWQxCQkjIChyZWcgMiBtZW0pIG9yIChtZW0gMiByZWcpCgliZXEudwkJbWVtMnJlZwoKIyByZWcybWVtOiBmZXRjaCBkeCwgdGhlbiB3cml0ZSBpdCB0byBtZW1vcnkKcmVnMm1lbToKCW1vdi53CQklZDEsJWQwCglyb2wudwkJJjB4NywlZDAKCWFuZC53CQkmMHg3LCVkMAkJIyBleHRyYWN0IER4IGZyb20gb3Bjb2RlIHdvcmQKCgltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQwLncqNCksICVkMCAjIGZldGNoIGR4CgoJYnRzdAkJJjB4NiwlZDEJCSMgd29yZCBvciBsb25nIG9wZXJhdGlvbj8KCWJlcS5iCQlyMm13dHJhbnMKCiMgYTAgPSBkc3QgYWRkcgojIGQwID0gRHgKcjJtbHRyYW5zOgoJbW92LmwJCSVkMCwlZDIJCQkjIHN0b3JlIGRhdGEKCW1vdi5sCQklYTAsJWEyCQkJIyBzdG9yZSBhZGRyCglyb2wubAkJJjB4OCwlZDIKCW1vdi5sCQklZDIsJWQwCgoJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyBvcyAgOiB3cml0ZSBoaQoKCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KCWJuZS53CQltb3ZwX3dyaXRlX2VycgkJIyB5ZXMKCglhZGQudwkJJjB4MiwlYTIJCSMgaW5jciBhZGRyCgltb3YubAkJJWEyLCVhMAoJcm9sLmwJCSYweDgsJWQyCgltb3YubAkJJWQyLCVkMAoKCWJzci5sCQlfZG1lbV93cml0ZV9ieXRlCSMgb3MgIDogd3JpdGUgbG8KCgl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CglibmUudwkJbW92cF93cml0ZV9lcnIJCSMgeWVzCgoJYWRkLncJCSYweDIsJWEyCQkjIGluY3IgYWRkcgoJbW92LmwJCSVhMiwlYTAKCXJvbC5sCQkmMHg4LCVkMgoJbW92LmwJCSVkMiwlZDAKCglic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIG9zICA6IHdyaXRlIGxvCgoJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPwoJYm5lLncJCW1vdnBfd3JpdGVfZXJyCQkjIHllcwoKCWFkZC53CQkmMHgyLCVhMgkJIyBpbmNyIGFkZHIKCW1vdi5sCQklYTIsJWEwCglyb2wubAkJJjB4OCwlZDIKCW1vdi5sCQklZDIsJWQwCgoJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyBvcyAgOiB3cml0ZSBsbwoKCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KCWJuZS53CQltb3ZwX3dyaXRlX2VycgkJIyB5ZXMKCglydHMKCiMgYTAgPSBkc3QgYWRkcgojIGQwID0gRHgKcjJtd3RyYW5zOgoJbW92LmwJCSVkMCwlZDIJCQkjIHN0b3JlIGRhdGEKCW1vdi5sCQklYTAsJWEyCQkJIyBzdG9yZSBhZGRyCglsc3IudwkJJjB4OCwlZDAKCglic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIG9zICA6IHdyaXRlIGhpCgoJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPwoJYm5lLncJCW1vdnBfd3JpdGVfZXJyCQkjIHllcwoKCWFkZC53CQkmMHgyLCVhMgoJbW92LmwJCSVhMiwlYTAKCW1vdi5sCQklZDIsJWQwCgoJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyBvcyAgOiB3cml0ZSBsbwoKCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KCWJuZS53CQltb3ZwX3dyaXRlX2VycgkJIyB5ZXMKCglydHMKCiMgbWVtMnJlZzogcmVhZCBieXRlcyBmcm9tIG1lbW9yeS4KIyBkZXRlcm1pbmVzIHRoZSBkZXN0IHJlZ2lzdGVyLCBhbmQgdGhlbiB3cml0ZXMgdGhlIGJ5dGVzIGludG8gaXQuCm1lbTJyZWc6CglidHN0CQkmMHg2LCVkMQkJIyB3b3JkIG9yIGxvbmcgb3BlcmF0aW9uPwoJYmVxLmIJCW0ycnd0cmFucwoKIyBhMCA9IGRzdCBhZGRyCm0ycmx0cmFuczoKCW1vdi5sCQklYTAsJWEyCQkJIyBzdG9yZSBhZGRyCgoJYnNyLmwJCV9kbWVtX3JlYWRfYnl0ZQkJIyByZWFkIGZpcnN0IGJ5dGUKCgl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CglibmUudwkJbW92cF9yZWFkX2VycgkJIyB5ZXMKCgltb3YubAkJJWQwLCVkMgoKCWFkZC53CQkmMHgyLCVhMgkJIyBpbmNyIGFkZHIgYnkgMiBieXRlcwoJbW92LmwJCSVhMiwlYTAKCglic3IubAkJX2RtZW1fcmVhZF9ieXRlCQkjIHJlYWQgc2Vjb25kIGJ5dGUKCgl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CglibmUudwkJbW92cF9yZWFkX2VycgkJIyB5ZXMKCglsc2wudwkJJjB4OCwlZDIKCW1vdi5iCQklZDAsJWQyCQkJIyBhcHBlbmQgYnl0ZXMKCglhZGQudwkJJjB4MiwlYTIJCSMgaW5jciBhZGRyIGJ5IDIgYnl0ZXMKCW1vdi5sCQklYTIsJWEwCgoJYnNyLmwJCV9kbWVtX3JlYWRfYnl0ZQkJIyByZWFkIHNlY29uZCBieXRlCgoJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPwoJYm5lLncJCW1vdnBfcmVhZF9lcnIJCSMgeWVzCgoJbHNsLmwJCSYweDgsJWQyCgltb3YuYgkJJWQwLCVkMgkJCSMgYXBwZW5kIGJ5dGVzCgoJYWRkLncJCSYweDIsJWEyCQkjIGluY3IgYWRkciBieSAyIGJ5dGVzCgltb3YubAkJJWEyLCVhMAoKCWJzci5sCQlfZG1lbV9yZWFkX2J5dGUJCSMgcmVhZCBzZWNvbmQgYnl0ZQoKCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KCWJuZS53CQltb3ZwX3JlYWRfZXJyCQkjIHllcwoKCWxzbC5sCQkmMHg4LCVkMgoJbW92LmIJCSVkMCwlZDIJCQkjIGFwcGVuZCBieXRlcwoKCW1vdi5iCQlFWENfT1BXT1JEKCVhNiksJWQxCglsc3IuYgkJJjB4MSwlZDEKCWFuZC53CQkmMHg3LCVkMQkJIyBleHRyYWN0IER4IGZyb20gb3Bjb2RlIHdvcmQKCgltb3YubAkJJWQyLChFWENfRFJFR1MsJWE2LCVkMS53KjQpICMgc3RvcmUgZHgKCglydHMKCiMgYTAgPSBkc3QgYWRkcgptMnJ3dHJhbnM6Cgltb3YubAkJJWEwLCVhMgkJCSMgc3RvcmUgYWRkcgoKCWJzci5sCQlfZG1lbV9yZWFkX2J5dGUJCSMgcmVhZCBmaXJzdCBieXRlCgoJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPwoJYm5lLncJCW1vdnBfcmVhZF9lcnIJCSMgeWVzCgoJbW92LmwJCSVkMCwlZDIKCglhZGQudwkJJjB4MiwlYTIJCSMgaW5jciBhZGRyIGJ5IDIgYnl0ZXMKCW1vdi5sCQklYTIsJWEwCgoJYnNyLmwJCV9kbWVtX3JlYWRfYnl0ZQkJIyByZWFkIHNlY29uZCBieXRlCgoJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPwoJYm5lLncJCW1vdnBfcmVhZF9lcnIJCSMgeWVzCgoJbHNsLncJCSYweDgsJWQyCgltb3YuYgkJJWQwLCVkMgkJCSMgYXBwZW5kIGJ5dGVzCgoJbW92LmIJCUVYQ19PUFdPUkQoJWE2KSwlZDEKCWxzci5iCQkmMHgxLCVkMQoJYW5kLncJCSYweDcsJWQxCQkjIGV4dHJhY3QgRHggZnJvbSBvcGNvZGUgd29yZAoKCW1vdi53CQklZDIsKEVYQ19EUkVHUysyLCVhNiwlZDEudyo0KSAjIHN0b3JlIGR4CgoJcnRzCgojIGlmIGRtZW1fe3JlYWQsd3JpdGV9X2J5dGUoKSByZXR1cm5zIGEgZmFpbCBtZXNzYWdlIGluIGQxLCB0aGUgcGFja2FnZQojIG11c3QgY3JlYXRlIGFuIGFjY2VzcyBlcnJvciBmcmFtZS4gaGVyZSwgd2UgcGFzcyBhIHNrZWxldG9uIGZzbHcKIyBhbmQgdGhlIGZhaWxpbmcgYWRkcmVzcyB0byB0aGUgcm91dGluZSB0aGF0IGNyZWF0ZXMgdGhlIG5ldyBmcmFtZS4KIyBGU0xXOgojCXdyaXRlID0gdHJ1ZQojCXNpemUgPSBieXRlCiMJVE0gPSBkYXRhCiMJc29mdHdhcmUgZW11bGF0aW9uIGVycm9yID0gdHJ1ZQptb3ZwX3dyaXRlX2VycjoKCW1vdi5sCQklYTIsJWEwCQkJIyBwYXNzIGZhaWxpbmcgYWRkcmVzcwoJbW92LmwJCSYweDAwYTEwMDAxLCVkMAkJIyBwYXNzIGZzbHcKCWJyYS5sCQlpc3BfZGFjYwoKIyBGU0xXOgojCXJlYWQgPSB0cnVlCiMJc2l6ZSA9IGJ5dGUKIwlUTSA9IGRhdGEKIwlzb2Z0d2FyZSBlbXVsYXRpb24gZXJyb3IgPSB0cnVlCm1vdnBfcmVhZF9lcnI6Cgltb3YubAkJJWEyLCVhMAkJCSMgcGFzcyBmYWlsaW5nIGFkZHJlc3MKCW1vdi5sCQkmMHgwMTIxMDAwMSwlZDAJCSMgcGFzcyBmc2x3CglicmEubAkJaXNwX2RhY2MKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9jaGsyX2NtcDIoKTogcm91dGluZSB0byBlbXVsYXRlIGNoazIvY21wMiBpbnN0cnVjdGlvbnMJCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9jYWxjX2VhKCk6IGNhbGN1bGF0ZSBlZmZlY3RpdmUgYWRkcmVzcwkJCQkjCiMJX2RtZW1fcmVhZF9sb25nKCk6IHJlYWQgb3BlcmFuZHMJCQkJIwojCV9kbWVtX3JlYWRfd29yZCgpOiByZWFkIG9wZXJhbmRzCQkJCSMKIwlpc3BfZGFjYygpOiBoYW5kbGUgZGF0YSBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJbm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSWYgZXhpdGluZyB0aHJvdWdoIGlzcF9kYWNjLi4uCQkJCQkjCiMJCWEwID0gZmFpbGluZyBhZGRyZXNzCQkJCQkjCiMJCWQwID0gRlNMVwkJCQkJCSMKIwllbHNlCQkJCQkJCQkjCiMJCW5vbmUJCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJRmlyc3QsIGNhbGN1bGF0ZSB0aGUgZWZmZWN0aXZlIGFkZHJlc3MsIHRoZW4gZmV0Y2ggdGhlIGJ5dGUsCSMKIyB3b3JkLCBvciBsb25nd29yZCBzaXplZCBvcGVyYW5kcy4gVGhlbiwgaW4gdGhlIGludGVyZXN0IG9mCQkjCiMgc2ltcGxpY2l0eSwgYWxsIG9wZXJhbmRzIGFyZSBjb252ZXJ0ZWQgdG8gbG9uZ3dvcmQgc2l6ZSB3aGV0aGVyIHRoZQkjCiMgb3BlcmF0aW9uIGlzIGJ5dGUsIHdvcmQsIG9yIGxvbmcuIFRoZSBib3VuZHMgYXJlIHNpZ24gZXh0ZW5kZWQJIwojIGFjY29yZGluZ2x5LiBJZiBSbiBpcyBhIGRhdGEgcmVnc2l0ZXIsIFJuIGlzIGFsc28gc2lnbiBleHRlbmRlZC4gSWYJIwojIFJuIGlzIGFuIGFkZHJlc3MgcmVnaXN0ZXIsIGl0IG5lZWQgbm90IGJlIHNpZ24gZXh0ZW5kZWQgc2luY2UgdGhlCSMKIyBmdWxsIHJlZ2lzdGVyIGlzIGFsd2F5cyB1c2VkLgkJCQkJCSMKIwlUaGUgY29tcGFyaXNvbnMgYXJlIG1hZGUgYW5kIHRoZSBjb25kaXRpb24gY29kZXMgY2FsY3VsYXRlZC4JIwojIElmIHRoZSBpbnN0cnVjdGlvbiBpcyBjaGsyIGFuZCB0aGUgUm4gdmFsdWUgaXMgb3V0LW9mLWJvdW5kcywgc2V0CSMKIyB0aGUgaWNoa19mbGcgaW4gU1BDT05EX0ZMRy4JCQkJCQkjCiMJSWYgdGhlIG1lbW9yeSBmZXRjaCByZXR1cm5zIGEgZmFpbGluZyB2YWx1ZSwgcGFzcyB0aGUgZmFpbGluZwkjCiMgYWRkcmVzcyBhbmQgRlNMVyB0byB0aGUgaXNwX2RhY2MoKSByb3V0aW5lLgkJCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCV9jaGsyX2NtcDIKX2NoazJfY21wMjoKCiMgcGFzc2luZyBzaXplIHBhcmFtZXRlciBkb2Vzbid0IG1hdHRlciBzaW5jZSBjaGsyICYgY21wMiBjYW4ndCBkbwojIGVpdGhlciBwcmVkZWNyZW1lbnQsIHBvc3RpbmNyZW1lbnQsIG9yIGltbWVkaWF0ZS4KCWJzci5sCQlfY2FsY19lYQkJIyBjYWxjdWxhdGUgPGVhPgoKCW1vdi5iCQlFWENfRVhUV09SRCglYTYpLCAlZDAJIyBmZXRjaCBoaSBleHRlbnNpb24gd29yZAoJcm9sLmIJCSYweDQsICVkMAkJIyByb3RhdGUgcmVnIGJpdHMgaW50byBsbwoJYW5kLncJCSYweGYsICVkMAkJIyBleHRyYWN0IHJlZyBiaXRzCgoJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMC53KjQpLCAlZDIgIyBnZXQgcmVndmFsCgoJY21waS5iCQlFWENfT1BXT1JEKCVhNiksICYweDIJIyB3aGF0IHNpemUgaXMgb3BlcmF0aW9uPwoJYmx0LmIJCWNoazJfY21wMl9ieXRlCQkjIHNpemUgPT0gYnl0ZQoJYmVxLmIJCWNoazJfY21wMl93b3JkCQkjIHNpemUgPT0gd29yZAoKIyB0aGUgYm91bmRzIGFyZSBsb25nd29yZCBzaXplLiBjYWxsIHJvdXRpbmUgdG8gcmVhZCB0aGUgbG93ZXIKIyBib3VuZCBpbnRvIGQwIGFuZCB0aGUgaGlnaGVyIGJvdW5kIGludG8gZDEuCmNoazJfY21wMl9sb25nOgoJbW92LmwJCSVhMCwlYTIJCQkjIHNhdmUgY29weSBvZiA8ZWE+Cglic3IubAkJX2RtZW1fcmVhZF9sb25nCQkjIGZldGNoIGxvbmcgbG93ZXIgYm91bmQKCgl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CglibmUudwkJY2hrMl9jbXAyX2Vycl9sCQkjIHllcwoKCW1vdi5sCQklZDAsJWQzCQkJIyBzYXZlIGxvbmcgbG93ZXIgYm91bmQKCWFkZHEubAkJJjB4NCwlYTIKCW1vdi5sCQklYTIsJWEwCQkJIyBwYXNzIDxlYT4gb2YgbG9uZyB1cHBlciBib3VuZAoJYnNyLmwJCV9kbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBsb25nIHVwcGVyIGJvdW5kCgoJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPwoJYm5lLncJCWNoazJfY21wMl9lcnJfbAkJIyB5ZXMKCgltb3YubAkJJWQwLCVkMQkJCSMgbG9uZyB1cHBlciBib3VuZCBpbiBkMQoJbW92LmwJCSVkMywlZDAJCQkjIGxvbmcgbG93ZXIgYm91bmQgaW4gZDAKCWJyYS53CQljaGsyX2NtcDJfY29tcGFyZQkjIGdvIGRvIHRoZSBjb21wYXJlIGVtdWxhdGlvbgoKIyB0aGUgYm91bmRzIGFyZSB3b3JkIHNpemUuIGZldGNoIHRoZW0gaW4gb25lIHN1YnJvdXRpbmUgY2FsbCBieQojIHJlYWRpbmcgYSBsb25nd29yZC4gc2lnbiBleHRlbmQgYm90aC4gaWYgaXQncyBhIGRhdGEgb3BlcmF0aW9uLAojIHNpZ24gZXh0ZW5kIFJuIHRvIGxvbmcsIGFsc28uCmNoazJfY21wMl93b3JkOgoJbW92LmwJCSVhMCwlYTIKCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggMiB3b3JkIGJvdW5kcwoKCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KCWJuZS53CQljaGsyX2NtcDJfZXJyX2wJCSMgeWVzCgoJbW92LncJCSVkMCwgJWQxCQkjIHBsYWNlIGhpIGluICVkMQoJc3dhcAkJJWQwCQkJIyBwbGFjZSBsbyBpbiAlZDAKCglleHQubAkJJWQwCQkJIyBzaWduIGV4dGVuZCBsbyBibmQKCWV4dC5sCQklZDEJCQkjIHNpZ24gZXh0ZW5kIGhpIGJuZAoKCWJ0c3QJCSYweDcsIEVYQ19FWFRXT1JEKCVhNikJIyBhZGRyZXNzIGNvbXBhcmU/CglibmUudwkJY2hrMl9jbXAyX2NvbXBhcmUJIyB5ZXM7IGRvbid0IHNpZ24gZXh0ZW5kCgojIG9wZXJhdGlvbiBpcyBhIGRhdGEgcmVnaXN0ZXIgY29tcGFyZS4KIyBzaWduIGV4dGVuZCB3b3JkIHRvIGxvbmcgc28gd2UgY2FuIGRvIHNpbXBsZSBsb25nd29yZCBjb21wYXJlcy4KCWV4dC5sCQklZDIJCQkjIHNpZ24gZXh0ZW5kIGRhdGEgd29yZAoJYnJhLncJCWNoazJfY21wMl9jb21wYXJlCSMgZ28gZW11bGF0ZSBjb21wYXJlCgojIHRoZSBib3VuZHMgYXJlIGJ5dGUgc2l6ZS4gZmV0Y2ggdGhlbSBpbiBvbmUgc3Vicm91dGluZSBjYWxsIGJ5CiMgcmVhZGluZyBhIHdvcmQuIHNpZ24gZXh0ZW5kIGJvdGguIGlmIGl0J3MgYSBkYXRhIG9wZXJhdGlvbiwKIyBzaWduIGV4dGVuZCBSbiB0byBsb25nLCBhbHNvLgpjaGsyX2NtcDJfYnl0ZToKCW1vdi5sCQklYTAsJWEyCglic3IubAkJX2RtZW1fcmVhZF93b3JkCQkjIGZldGNoIDIgYnl0ZSBib3VuZHMKCgl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CglibmUudwkJY2hrMl9jbXAyX2Vycl93CQkjIHllcwoKCW1vdi5iCQklZDAsICVkMQkJIyBwbGFjZSBoaSBpbiAlZDEKCWxzci53CQkmMHg4LCAlZDAJCSMgcGxhY2UgbG8gaW4gJWQwCgoJZXh0Yi5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIGxvIGJuZAoJZXh0Yi5sCQklZDEJCQkjIHNpZ24gZXh0ZW5kIGhpIGJuZAoKCWJ0c3QJCSYweDcsIEVYQ19FWFRXT1JEKCVhNikJIyBhZGRyZXNzIGNvbXBhcmU/CglibmUuYgkJY2hrMl9jbXAyX2NvbXBhcmUJIyB5ZXM7IGRvbid0IHNpZ24gZXh0ZW5kCgojIG9wZXJhdGlvbiBpcyBhIGRhdGEgcmVnaXN0ZXIgY29tcGFyZS4KIyBzaWduIGV4dGVuZCBieXRlIHRvIGxvbmcgc28gd2UgY2FuIGRvIHNpbXBsZSBsb25nd29yZCBjb21wYXJlcy4KCWV4dGIubAkJJWQyCQkJIyBzaWduIGV4dGVuZCBkYXRhIGJ5dGUKCiMKIyBUbyBzZXQgdGhlIGNjb2RlcyBjb3JyZWN0bHk6CiMJKDEpIHNhdmUgJ1onIGJpdCBmcm9tIChSbiAtIGxvKQojCSgyKSBzYXZlICdaJyBhbmQgJ04nIGJpdHMgZnJvbSAoKGhpIC0gbG8pIC0gKFJuIC0gaGkpKQojCSgzKSBrZWVwICdYJywgJ04nLCBhbmQgJ1YnIGZyb20gYmVmb3JlIGluc3RydWN0aW9uCiMJKDQpIGNvbWJpbmUgY2NvZGVzCiMKY2hrMl9jbXAyX2NvbXBhcmU6CglzdWIubAkJJWQwLCAlZDIJCSMgKFJuIC0gbG8pCgltb3YudwkJJWNjLCAlZDMJCSMgZmV0Y2ggcmVzdWx0aW5nIGNjb2RlcwoJYW5kaS5iCQkmMHg0LCAlZDMJCSMga2VlcCAnWicgYml0CglzdWIubAkJJWQwLCAlZDEJCSMgKGhpIC0gbG8pCgljbXAubAkJJWQxLCVkMgkJCSMgKChoaSAtIGxvKSAtIChSbiAtIGhpKSkKCgltb3YudwkJJWNjLCAlZDQJCSMgZmV0Y2ggcmVzdWx0aW5nIGNjb2RlcwoJb3IuYgkJJWQ0LCAlZDMJCSMgY29tYmluZSB3LyBlYXJsaWVyIGNjb2RlcwoJYW5kaS5iCQkmMHg1LCAlZDMJCSMga2VlcCAnWicgYW5kICdOJwoKCW1vdi53CQlFWENfQ0MoJWE2KSwgJWQ0CSMgZmV0Y2ggb2xkIGNjb2RlcwoJYW5kaS5iCQkmMHgxYSwgJWQ0CQkjIGtlZXAgJ1gnLCdOJywnVicgYml0cwoJb3IuYgkJJWQzLCAlZDQJCSMgaW5zZXJ0IG5ldyBjY29kZXMKCW1vdi53CQklZDQsIEVYQ19DQyglYTYpCSMgc2F2ZSBuZXcgY2NvZGVzCgoJYnRzdAkJJjB4MywgRVhDX0VYVFdPUkQoJWE2KQkjIHNlcGFyYXRlIGNoazIsY21wMgoJYm5lLmIJCWNoazJfZmluaXNoCQkjIGl0J3MgYSBjaGsyCgoJcnRzCgojIHRoaXMgY29kZSBoYW5kbGVzIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBjaGsyIGFuZCBjbXAyLiBjaGsyIHdvdWxkCiMgaGF2ZSB0cmFwcGVkIG91dCBpZiB0aGUgdmFsdWUgd2FzIG91dCBvZiBib3VuZHMuIHdlIGNoZWNrIHRoaXMgYnkgc2VlaW5nCiMgaWYgdGhlICdOJyBiaXQgd2FzIHNldCBieSB0aGUgb3BlcmF0aW9uLgpjaGsyX2ZpbmlzaDoKCWJ0c3QJCSYweDAsICVkNAkJIyBpcyAnTicgYml0IHNldD8KCWJuZS5iCQljaGsyX3RyYXAJCSMgeWVzO2NoazIgc2hvdWxkIHRyYXAKCXJ0cwpjaGsyX3RyYXA6Cgltb3YuYgkJJmljaGtfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCAic3BlY2lhbCBjYXNlIiBmbGFnCglydHMKCiMgaWYgZG1lbV9yZWFkX3tsb25nLHdvcmR9KCkgcmV0dXJucyBhIGZhaWwgbWVzc2FnZSBpbiBkMSwgdGhlIHBhY2thZ2UKIyBtdXN0IGNyZWF0ZSBhbiBhY2Nlc3MgZXJyb3IgZnJhbWUuIGhlcmUsIHdlIHBhc3MgYSBza2VsZXRvbiBmc2x3CiMgYW5kIHRoZSBmYWlsaW5nIGFkZHJlc3MgdG8gdGhlIHJvdXRpbmUgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZnJhbWUuCiMgRlNMVzoKIwlyZWFkID0gdHJ1ZQojCXNpemUgPSBsb25nd29yZAojCVRNID0gZGF0YQojCXNvZnR3YXJlIGVtdWxhdGlvbiBlcnJvciA9IHRydWUKY2hrMl9jbXAyX2Vycl9sOgoJbW92LmwJCSVhMiwlYTAJCQkjIHBhc3MgZmFpbGluZyBhZGRyZXNzCgltb3YubAkJJjB4MDEwMTAwMDEsJWQwCQkjIHBhc3MgZnNsdwoJYnJhLmwJCWlzcF9kYWNjCgojIEZTTFc6CiMJcmVhZCA9IHRydWUKIwlzaXplID0gd29yZAojCVRNID0gZGF0YQojCXNvZnR3YXJlIGVtdWxhdGlvbiBlcnJvciA9IHRydWUKY2hrMl9jbXAyX2Vycl93OgoJbW92LmwJCSVhMiwlYTAJCQkjIHBhc3MgZmFpbGluZyBhZGRyZXNzCgltb3YubAkJJjB4MDE0MTAwMDEsJWQwCQkjIHBhc3MgZnNsdwoJYnJhLmwJCWlzcF9kYWNjCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfZGl2NjQoKTogcm91dGluZSB0byBlbXVsYXRlIGRpdnt1LHN9LmwgPGVhPixEcjpEcQkJIwojCQkJCQkJCTY0LzMyLT4zMnI6MzJxCSMKIwkJCQkJCQkJCSMKIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCV9jYWxjX2VhKCkgLSBjYWxjdWxhdGUgZWZmZWN0aXZlIGFkZHJlc3MJCQkjCiMJaXNwX2lhY2MoKSAtIGhhbmRsZSBpbnN0cnVjdGlvbiBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkjCiMJaXNwX2RhY2MoKSAtIGhhbmRsZSBkYXRhIGFjY2VzcyBlcnJvciBleGNlcHRpb24JCQkjCiMJaXNwX3Jlc3RvcmUoKSAtIHJlc3RvcmUgQW4gb24gYWNjZXNzIGVycm9yIHcvIC0oKSBvciAoKSsJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJbm9uZQkJCQkJCQkJIwojCQkJCQkJCQkJIwojIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJSWYgZXhpdGluZyB0aHJvdWdoIGlzcF9kYWNjLi4uCQkJCQkjCiMJCWEwID0gZmFpbGluZyBhZGRyZXNzCQkJCQkjCiMJCWQwID0gRlNMVwkJCQkJCSMKIwllbHNlCQkJCQkJCQkjCiMJCW5vbmUJCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJRmlyc3QsIGRlY29kZSB0aGUgb3BlcmFuZCBsb2NhdGlvbi4gSWYgaXQncyBpbiBEbiwgZmV0Y2ggZnJvbQkjCiMgdGhlIHN0YWNrLiBJZiBpdCdzIGluIG1lbW9yeSwgdXNlIF9jYWxjX2VhKCkgdG8gY2FsY3VsYXRlIHRoZQkJIwojIGVmZmVjdGl2ZSBhZGRyZXNzLiBVc2UgX2RtZW1fcmVhZF9sb25nKCkgdG8gZmV0Y2ggYXQgdGhhdCBhZGRyZXNzLgkjCiMgVW5sZXNzIHRoZSBvcGVyYW5kIGlzIGltbWVkaWF0ZSBkYXRhLiBUaGVuIHVzZSBfaW1lbV9yZWFkX2xvbmcoKS4JIwojIFNlbmQgZmFpbHVyZXMgdG8gaXNwX2RhY2MoKSBvciBpc3BfaWFjYygpIGFzIGFwcHJvcHJpYXRlLgkJIwojCUlmIHRoZSBvcGVyYW5kcyBhcmUgc2lnbmVkLCBtYWtlIHRoZW0gdW5zaWduZWQgYW5kIHNhdmUJdGhlCSMKIyBzaWduIGluZm8gZm9yIGxhdGVyLiBTZXBhcmF0ZSBvdXQgc3BlY2lhbCBjYXNlcyBsaWtlIGRpdmlkZS1ieS16ZXJvCSMKIyBvciAzMi1iaXQgZGl2aWRlcyBpZiBwb3NzaWJsZS4gRWxzZSwgdXNlIGEgc3BlY2lhbCBtYXRoIGFsZ29yaXRobQkjCiMgdG8gY2FsY3VsYXRlIHRoZSByZXN1bHQuCQkJCQkJIwojCVJlc3RvcmUgc2lnbiBpbmZvIGlmIHNpZ25lZCBpbnN0cnVjdGlvbi4gU2V0IHRoZSBjb25kaXRpb24JIwojIGNvZGVzLiBTZXQgaWRieXpfZmxnIGluIFNQQ09ORF9GTEcgaWYgZGl2aXNvciB3YXMgemVyby4gU3RvcmUgdGhlCSMKIyBxdW90aWVudCBhbmQgcmVtYWluZGVyIGluIHRoZSBhcHByb3ByaWF0ZSBkYXRhIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2suIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzZXQJTkRJVklTT1IsCUVYQ19URU1QKzB4MApzZXQJTkRJVklERU5ELAlFWENfVEVNUCsweDEKc2V0CU5EUlNBVkUsCUVYQ19URU1QKzB4MgpzZXQJTkRRU0FWRSwJRVhDX1RFTVArMHg0CnNldAlERFNFQ09ORCwJRVhDX1RFTVArMHg2CnNldAlERFFVT1RJRU5ULAlFWENfVEVNUCsweDgKc2V0CURETk9STUFMLAlFWENfVEVNUCsweGMKCglnbG9iYWwJCV9kaXY2NAojIyMjIyMjIyMjIyMjCiMgZGl2KHUscylsICMKIyMjIyMjIyMjIyMjIwpfZGl2NjQ6Cgltb3YuYgkJRVhDX09QV09SRCsxKCVhNiksICVkMAoJYW5kaS5iCQkmMHgzOCwgJWQwCQkjIGV4dHJhY3Qgc3JjIG1vZGUKCglibmUudwkJZGNvbnRyb2xtb2RlbF9zCQkjICVkbiBkZXN0IG9yIGNvbnRyb2wgbW9kZT8KCgltb3YuYgkJRVhDX09QV09SRCsxKCVhNiksICVkMAkjIGV4dHJhY3QgRG4gZnJvbSBvcGNvZGUKCWFuZGkudwkJJjB4NywgJWQwCgltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQwLncqNCksICVkNyAjIGZldGNoIGRpdmlzb3IgZnJvbSByZWdpc3RlcgoKZGdvdHNyY2w6CgliZXEudwkJZGl2NjRlcTAJCSMgZGl2aXNvciBpcyA9IDAhISEKCgltb3YuYgkJRVhDX0VYVFdPUkQrMSglYTYpLCAlZDAJIyBleHRyYWN0IERyIGZyb20gZXh0d29yZAoJbW92LmIJCUVYQ19FWFRXT1JEKCVhNiksICVkMQkjIGV4dHJhY3QgRHEgZnJvbSBleHR3b3JkCglhbmQudwkJJjB4NywgJWQwCglsc3IuYgkJJjB4NCwgJWQxCglhbmQudwkJJjB4NywgJWQxCgltb3YudwkJJWQwLCBORFJTQVZFKCVhNikJIyBzYXZlIERyIGZvciBsYXRlcgoJbW92LncJCSVkMSwgTkRRU0FWRSglYTYpCSMgc2F2ZSBEcSBmb3IgbGF0ZXIKCiMgZmV0Y2ggJWRyIGFuZCAlZHEgZGlyZWN0bHkgb2ZmIHN0YWNrIHNpbmNlIGFsbCByZWdzIGFyZSBzYXZlZCB0aGVyZQoJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMC53KjQpLCAlZDUgIyBnZXQgZGl2aWRlbmQgaGkKCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDEudyo0KSwgJWQ2ICMgZ2V0IGRpdmlkZW5kIGxvCgojIHNlcGFyYXRlIHNpZ25lZCBhbmQgdW5zaWduZWQgZGl2aWRlCglidHN0CQkmMHgzLCBFWENfRVhUV09SRCglYTYpCSMgc2lnbmVkIG9yIHVuc2lnbmVkPwoJYmVxLmIJCWRzcGVjaWFsY2FzZXMJCSMgdXNlIHBvc2l0aXZlIGRpdmlkZQoKIyBzYXZlIHRoZSBzaWduIG9mIHRoZSBkaXZpc29yCiMgbWFrZSBkaXZpc29yIHVuc2lnbmVkIGlmIGl0J3MgbmVnYXRpdmUKCXRzdC5sCQklZDcJCQkjIGNoayBzaWduIG9mIGRpdmlzb3IKCXNsdAkJTkRJVklTT1IoJWE2KQkJIyBzYXZlIHNpZ24gb2YgZGl2aXNvcgoJYnBsLmIJCWRzZ25kaXZpZGVuZAoJbmVnLmwJCSVkNwkJCSMgY29tcGxlbWVudCBuZWdhdGl2ZSBkaXZpc29yCgojIHNhdmUgdGhlIHNpZ24gb2YgdGhlIGRpdmlkZW5kCiMgbWFrZSBkaXZpZGVuZCB1bnNpZ25lZCBpZiBpdCdzIG5lZ2F0aXZlCmRzZ25kaXZpZGVuZDoKCXRzdC5sCQklZDUJCQkjIGNoayBzaWduIG9mIGhpKGRpdmlkZW5kKQoJc2x0CQlORElWSURFTkQoJWE2KQkJIyBzYXZlIHNpZ24gb2YgZGl2aWRlbmQKCWJwbC5iCQlkc3BlY2lhbGNhc2VzCgoJbW92LncJCSYweDAsICVjYwkJIyBjbGVhciAnWCcgY2MgYml0CgluZWd4LmwJCSVkNgkJCSMgY29tcGxlbWVudCBzaWduZWQgZGl2aWRlbmQKCW5lZ3gubAkJJWQ1CgojIGV4dHJhY3Qgc29tZSBzcGVjaWFsIGNhc2VzOgojCS0gaXMgKGRpdmlkZW5kID09IDApID8KIwktIGlzIChoaShkaXZpZGVuZCkgPT0gMCAmJiAoZGl2aXNvciA8PSBsbyhkaXZpZGVuZCkpKSA/ICgzMi1iaXQgZGl2KQpkc3BlY2lhbGNhc2VzOgoJdHN0LmwJCSVkNQkJCSMgaXMgKGhpKGRpdmlkZW5kKSA9PSAwKQoJYm5lLmIJCWRub3JtYWxkaXZpZGUJCSMgbm8sIHNvIHRyeSBpdCB0aGUgbG9uZyB3YXkKCgl0c3QubAkJJWQ2CQkJIyBpcyAobG8oZGl2aWRlbmQpID09IDApLCB0b28KCWJlcS53CQlkZG9uZQkJCSMgeWVzLCBzbyAoZGl2aWRlbmQgPT0gMCkKCgljbXAubAkJJWQ3LCVkNgkJCSMgaXMgKGRpdmlzb3IgPD0gbG8oZGl2aWRlbmQpKQoJYmxzLmIJCWQzMmJpdGRpdmlkZQkJIyB5ZXMsIHNvIHVzZSAzMiBiaXQgZGl2aWRlCgoJZXhnCQklZDUsJWQ2CQkJIyBxID0gMCwgciA9IGRpdmlkZW5kCglicmEudwkJZGl2ZmluaXNoCQkjIGNhbid0IGRpdmlkZSwgd2UncmUgZG9uZS4KCmQzMmJpdGRpdmlkZToKCXRkaXZ1LmwJCSVkNywgJWQ1OiVkNgkJIyBpdCdzIG9ubHkgYSAzMi8zMiBiaXQgZGl2IQoKCWJyYS5iCQlkaXZmaW5pc2gKCmRub3JtYWxkaXZpZGU6CiMgbGFzdCBzcGVjaWFsIGNhc2U6CiMJLSBpcyBoaShkaXZpZGVuZCkgPj0gZGl2aXNvciA/IGlmIHllcywgdGhlbiBvdmVyZmxvdwoJY21wLmwJCSVkNywlZDUKCWJscy5iCQlkZG92ZgkJCSMgYW5zd2VyIHdvbid0IGZpdCBpbiAzMiBiaXRzCgojIHBlcmZvcm0gdGhlIGRpdmlkZSBhbGdvcml0aG06Cglic3IubAkJZGNsYXNzaWNhbAkJIyBkbyBpbnQgZGl2aWRlCgojIHNlcGFyYXRlIGludG8gc2lnbmVkIGFuZCB1bnNpZ25lZCBmaW5pc2hlcy4KZGl2ZmluaXNoOgoJYnRzdAkJJjB4MywgRVhDX0VYVFdPUkQoJWE2KQkjIGRvIGRpdnMsIGRpdnUgc2VwYXJhdGVseQoJYmVxLmIJCWRkb25lCQkJIyBkaXZ1IGhhcyBubyBwcm9jZXNzaW5nISEhCgojIGl0IHdhcyBhIGRpdnMubCwgc28gY2NvZGUgc2V0dGluZyBpcyBhIGxpdHRsZSBtb3JlIGNvbXBsaWNhdGVkLi4uCgl0c3QuYgkJTkRJVklERU5EKCVhNikJCSMgcmVtYWluZGVyIGhhcyBzYW1lIHNpZ24KCWJlcS5iCQlkY2MJCQkjIGFzIGRpdmlkZW5kLgoJbmVnLmwJCSVkNQkJCSMgc2duKHJlbSkgPSBzZ24oZGl2aWRlbmQpCmRjYzoKCW1vdi5iCQlORElWSVNPUiglYTYpLCAlZDAKCWVvci5iCQklZDAsIE5ESVZJREVORCglYTYpCSMgY2hrIGlmIHF1b3RpZW50IGlzIG5lZ2F0aXZlCgliZXEuYgkJZHFwb3MJCQkjIGJyYW5jaCB0byBxdW90IHBvc2l0aXZlCgojIDB4ODAwMDAwMDAgaXMgdGhlIGxhcmdlc3QgbnVtYmVyIHJlcHJlc2VudGFibGUgYXMgYSAzMi1iaXQgbmVnYXRpdmUKIyBudW1iZXIuIHRoZSBuZWdhdGl2ZSBvZiAweDgwMDAwMDAwIGlzIDB4ODAwMDAwMDAuCgljbXBpLmwJCSVkNiwgJjB4ODAwMDAwMDAJIyB3aWxsICgtcXVvdCkgZml0IGluIDMyIGJpdHM/CgliaGkuYgkJZGRvdmYKCgluZWcubAkJJWQ2CQkJIyBtYWtlICgtcXVvdCkgMidzIGNvbXAKCglicmEuYgkJZGRvbmUKCmRxcG9zOgoJYnRzdAkJJjB4MWYsICVkNgkJIyB3aWxsICgrcXVvdCkgZml0IGluIDMyIGJpdHM/CglibmUuYgkJZGRvdmYKCmRkb25lOgojIGF0IHRoaXMgcG9pbnQsIHJlc3VsdCBpcyBub3JtYWwgc28gY2NvZGVzIGFyZSBzZXQgYmFzZWQgb24gcmVzdWx0LgoJbW92LncJCUVYQ19DQyglYTYpLCAlY2MKCXRzdC5sCQklZDYJCQkjIHNldCAlY2NvZGUgYml0cwoJbW92LncJCSVjYywgRVhDX0NDKCVhNikKCgltb3YudwkJTkRSU0FWRSglYTYpLCAlZDAJIyBnZXQgRHIgb2ZmIHN0YWNrCgltb3YudwkJTkRRU0FWRSglYTYpLCAlZDEJIyBnZXQgRHEgb2ZmIHN0YWNrCgojIGlmIHRoZSByZWdpc3RlciBudW1iZXJzIGFyZSB0aGUgc2FtZSwgb25seSB0aGUgcXVvdGllbnQgZ2V0cyBzYXZlZC4KIyBzbywgaWYgd2UgYWx3YXlzIHNhdmUgdGhlIHF1b3RpZW50IHNlY29uZCwgd2Ugc2F2ZSBvdXJzZWx2ZXMgYSBjbXAmYmVxCgltb3YubAkJJWQ1LCAoRVhDX0RSRUdTLCVhNiwlZDAudyo0KSAjIHNhdmUgcmVtYWluZGVyCgltb3YubAkJJWQ2LCAoRVhDX0RSRUdTLCVhNiwlZDEudyo0KSAjIHNhdmUgcXVvdGllbnQKCglydHMKCmRkb3ZmOgoJYnNldAkJJjB4MSwgRVhDX0NDKzEoJWE2KQkjICdWJyBzZXQgb24gb3ZlcmZsb3cKCWJjbHIJCSYweDAsIEVYQ19DQysxKCVhNikJIyAnQycgY2xlYXJlZCBvbiBvdmVyZmxvdwoKCXJ0cwoKZGl2NjRlcTA6CglhbmRpLmIJCSYweDFlLCBFWENfQ0MrMSglYTYpCSMgY2xlYXIgJ0MnIGJpdCBvbiBkaXZieXplcm8KCW9yaS5iCQkmaWRieXpfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCAic3BlY2lhbCBjYXNlIiBmbGFnCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgVGhpcyByb3V0aW5lIHVzZXMgdGhlICdjbGFzc2ljYWwnIEFsZ29yaXRobSBEIGZyb20gRG9uYWxkIEtudXRoJ3MJIwojIEFydCBvZiBDb21wdXRlciBQcm9ncmFtbWluZywgdm9sIElJLCBTZW1pbnVtZXJpY2FsIEFsZ29yaXRobXMuCSMKIyBGb3IgdGhpcyBpbXBsZW1lbnRhdGlvbiBiPTIqKjE2LCBhbmQgdGhlIHRhcmdldCBpcyBVMVUyVTNVNC9WMVYyLAkjCiMgd2hlcmUgVSxWIGFyZSB3b3JkcyBvZiB0aGUgcXVhZHdvcmQgZGl2aWRlbmQgYW5kIGxvbmd3b3JkIGRpdmlzb3IsCSMKIyBhbmQgVTEsIFYxIGFyZSB0aGUgbW9zdCBzaWduaWZpY2FudCB3b3Jkcy4JCQkJIwojCQkJCQkJCQkJIwojIFRoZSBtb3N0IHNpZy4gbG9uZ3dvcmQgb2YgdGhlIDY0IGJpdCBkaXZpZGVuZCBtdXN0IGJlIGluICVkNSwgbGVhc3QJIwojIGluICVkNi4gVGhlIGRpdmlzb3IgbXVzdCBiZSBpbiB0aGUgdmFyaWFibGUgZGRpdmlzb3IsIGFuZCB0aGUJCSMKIyBzaWduZWQvdW5zaWduZWQgZmxhZyBkZHVzaWduIG11c3QgYmUgc2V0ICgwPXVuc2lnbmVkLDE9c2lnbmVkKS4JIwojIFRoZSBxdW90aWVudCBpcyByZXR1cm5lZCBpbiAlZDYsIHJlbWFpbmRlciBpbiAlZDUsIHVubGVzcyB0aGUJCSMKIyB2IChvdmVyZmxvdykgYml0IGlzIHNldCBpbiB0aGUgc2F2ZWQgJWNjci4gSWYgb3ZlcmZsb3csIHRoZSBkaXZpZGVuZAkjCiMgaXMgdW5jaGFuZ2VkLgkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRjbGFzc2ljYWw6CiMgaWYgdGhlIGRpdmlzb3IgbXN3IGlzIDAsIHVzZSBzaW1wbGVyIGFsZ29yaXRobSB0aGVuIHRoZSBmdWxsIGJsb3duCiMgb25lIGF0IGRka251dGg6CgoJY21waS5sCQklZDcsICYweGZmZmYKCWJoaS5iCQlkZGtudXRoCQkJIyBnbyB1c2UgRC4gS251dGggYWxnb3JpdGhtCgojIFNpbmNlIHRoZSBkaXZpc29yIGlzIG9ubHkgYSB3b3JkIChhbmQgbGFyZ2VyIHRoYW4gdGhlIG1zbHcgb2YgdGhlIGRpdmlkZW5kKSwKIyBhIHNpbXBsZXIgYWxnb3JpdGhtIG1heSBiZSB1c2VkIDoKIyBJbiB0aGUgZ2VuZXJhbCBjYXNlLCBmb3VyIHF1b3RpZW50IHdvcmRzIHdvdWxkIGJlIGNyZWF0ZWQgYnkKIyBkaXZpZGluZyB0aGUgZGl2aXNvciB3b3JkIGludG8gZWFjaCBkaXZpZGVuZCB3b3JkLiBJbiB0aGlzIGNhc2UsCiMgdGhlIGZpcnN0IHR3byBxdW90aWVudCB3b3JkcyBtdXN0IGJlIHplcm8sIG9yIG92ZXJmbG93IHdvdWxkIG9jY3VyLgojIFNpbmNlIHdlIGFscmVhZHkgY2hlY2tlZCB0aGlzIGNhc2UgYWJvdmUsIHdlIGNhbiB0cmVhdCB0aGUgbW9zdCBzaWduaWZpY2FudAojIGxvbmd3b3JkIG9mIHRoZSBkaXZpZGVuZCBhcyAoMCkgcmVtYWluZGVyIChzZWUgS251dGgpIGFuZCBtZXJlbHkgY29tcGxldGUKIyB0aGUgbGFzdCB0d28gZGl2aXNpb25zIHRvIGdldCBhIHF1b3RpZW50IGxvbmd3b3JkIGFuZCB3b3JkIHJlbWFpbmRlcjoKCgljbHIubAkJJWQxCglzd2FwCQklZDUJCQkjIHNhbWUgYXMgcipiIGlmIHByZXZpb3VzIHN0ZXAgcnFkCglzd2FwCQklZDYJCQkjIGdldCB1MyB0byBsc3cgcG9zaXRpb24KCW1vdi53CQklZDYsICVkNQkJIyByYiArIHUzCgoJZGl2dS53CQklZDcsICVkNQoKCW1vdi53CQklZDUsICVkMQkJIyBmaXJzdCBxdW90aWVudCB3b3JkCglzd2FwCQklZDYJCQkjIGdldCB1NAoJbW92LncJCSVkNiwgJWQ1CQkjIHJiICsgdTQKCglkaXZ1LncJCSVkNywgJWQ1CgoJc3dhcAkJJWQxCgltb3YudwkJJWQ1LCAlZDEJCSMgMm5kIHF1b3RpZW50ICdkaWdpdCcKCWNsci53CQklZDUKCXN3YXAJCSVkNQkJCSMgbm93IHJlbWFpbmRlcgoJbW92LmwJCSVkMSwgJWQ2CQkjIGFuZCBxdW90aWVudAoKCXJ0cwoKZGRrbnV0aDoKIyBJbiB0aGlzIGFsZ29yaXRobSwgdGhlIGRpdmlzb3IgaXMgdHJlYXRlZCBhcyBhIDIgZGlnaXQgKHdvcmQpIG51bWJlcgojIHdoaWNoIGlzIGRpdmlkZWQgaW50byBhIDMgZGlnaXQgKHdvcmQpIGRpdmlkZW5kIHRvIGdldCBvbmUgcXVvdGllbnQKIyBkaWdpdCAod29yZCkuIEFmdGVyIHN1YnRyYWN0aW9uLCB0aGUgZGl2aWRlbmQgaXMgc2hpZnRlZCBhbmQgdGhlCiMgcHJvY2VzcyByZXBlYXRlZC4gQmVmb3JlIGJlZ2lubmluZywgdGhlIGRpdmlzb3IgYW5kIHF1b3RpZW50IGFyZQojICdub3JtYWxpemVkJyBzbyB0aGF0IHRoZSBwcm9jZXNzIG9mIGVzdGltYXRpbmcgdGhlIHF1b3RpZW50IGRpZ2l0CiMgd2lsbCB5aWVsZCB2ZXJpZmlhYmx5IGNvcnJlY3QgcmVzdWx0cy4uCgoJY2xyLmwJCURETk9STUFMKCVhNikJCSMgY291bnQgb2Ygc2hpZnRzIGZvciBub3JtYWxpemF0aW9uCgljbHIuYgkJRERTRUNPTkQoJWE2KQkJIyBjbGVhciBmbGFnIGZvciBxdW90aWVudCBkaWdpdHMKCWNsci5sCQklZDEJCQkjICVkMSB3aWxsIGhvbGQgdHJpYWwgcXVvdGllbnQKZGRuY2hrOgoJYnRzdAkJJjMxLCAlZDcJCSMgbXVzdCB3ZSBub3JtYWxpemU/IGZpcnN0IHdvcmQgb2YKCWJuZS5iCQlkZG5vcm1hbGl6ZWQJCSMgZGl2aXNvciAoVjEpIG11c3QgYmUgPj0gNjU1MzYvMgoJYWRkcS5sCQkmMHgxLCBERE5PUk1BTCglYTYpCSMgY291bnQgbm9ybWFsaXphdGlvbiBzaGlmdHMKCWxzbC5sCQkmMHgxLCAlZDcJCSMgc2hpZnQgdGhlIGRpdmlzb3IKCWxzbC5sCQkmMHgxLCAlZDYJCSMgc2hpZnQgdTQsdTMgd2l0aCBvdmVyZmxvdyB0byB1MgoJcm94bC5sCQkmMHgxLCAlZDUJCSMgc2hpZnQgdTEsdTIKCWJyYS53CQlkZG5jaGsKZGRub3JtYWxpemVkOgoKIyBOb3cgY2FsY3VsYXRlIGFuIGVzdGltYXRlIG9mIHRoZSBxdW90aWVudCB3b3JkcyAobXN3IGZpcnN0LCB0aGVuIGxzdykuCiMgVGhlIGNvbW1lbnRzIHVzZSBzdWJzY3JpcHRzIGZvciB0aGUgZmlyc3QgcXVvdGllbnQgZGlnaXQgZGV0ZXJtaW5hdGlvbi4KCW1vdi5sCQklZDcsICVkMwkJIyBkaXZpc29yCgltb3YubAkJJWQ1LCAlZDIJCSMgZGl2aWRlbmQgbXNsdwoJc3dhcAkJJWQyCglzd2FwCQklZDMKCWNtcC53CQklZDIsICVkMwkJIyBWMSA9IFUxID8KCWJuZS5iCQlkZHFjYWxjMQoJbW92LncJCSYweGZmZmYsICVkMQkJIyB1c2UgbWF4IHRyaWFsIHF1b3RpZW50IHdvcmQKCWJyYS5iCQlkZGFkajAKZGRxY2FsYzE6Cgltb3YubAkJJWQ1LCAlZDEKCglkaXZ1LncJCSVkMywgJWQxCQkjIHVzZSBxdW90aWVudCBvZiBtc2x3L21zdwoKCWFuZGkubAkJJjB4MDAwMGZmZmYsICVkMQkjIHplcm8gYW55IHJlbWFpbmRlcgpkZGFkajA6CgojIG5vdyB0ZXN0IHRoZSB0cmlhbCBxdW90aWVudCBhbmQgYWRqdXN0LiBUaGlzIHN0ZXAgcGx1cyB0aGUKIyBub3JtYWxpemF0aW9uIGFzc3VyZXMgKGFjY29yZGluZyB0byBLbnV0aCkgdGhhdCB0aGUgdHJpYWwKIyBxdW90aWVudCB3aWxsIGJlIGF0IHdvcnN0IDEgdG9vIGxhcmdlLgoJbW92LmwJCSVkNiwgLSglc3ApCgljbHIudwkJJWQ2CQkJIyB3b3JkIHUzIGxlZnQKCXN3YXAJCSVkNgkJCSMgaW4gbHN3IHBvc2l0aW9uCmRkYWRqMTogbW92LmwJCSVkNywgJWQzCgltb3YubAkJJWQxLCAlZDIKCW11bHUudwkJJWQ3LCAlZDIJCSMgVjJxCglzd2FwCQklZDMKCW11bHUudwkJJWQxLCAlZDMJCSMgVjFxCgltb3YubAkJJWQ1LCAlZDQJCSMgVTFVMgoJc3ViLmwJCSVkMywgJWQ0CQkjIFUxVTIgLSBWMXEKCglzd2FwCQklZDQKCgltb3YudwkJJWQ0LCVkMAoJbW92LncJCSVkNiwlZDQJCQkjIGluc2VydCBsb3dlciB3b3JkIChVMykKCgl0c3QudwkJJWQwCQkJIyBpcyB1cHBlciB3b3JkIHNldD8KCWJuZS53CQlkZGFkamQxCgojCWFkZC5sCQklZDYsICVkNAkJIyAoVTFVMiAtIFYxcSkgKyBVMwoKCWNtcC5sCQklZDIsICVkNAoJYmxzLmIJCWRkYWRqZDEJCQkjIGlzIFYycSA+IChVMVUyLVYxcSkgKyBVMyA/CglzdWJxLmwJCSYweDEsICVkMQkJIyB5ZXMsIGRlY3JlbWVudCBhbmQgcmVjaGVjawoJYnJhLmIJCWRkYWRqMQpkZGFkamQxOgojIG5vdyB0ZXN0IHRoZSB3b3JkIGJ5IG11bHRpcGx5aW5nIGl0IGJ5IHRoZSBkaXZpc29yIChWMVYyKSBhbmQgY29tcGFyaW5nCiMgdGhlIDMgZGlnaXQgKHdvcmQpIHJlc3VsdCB3aXRoIHRoZSBjdXJyZW50IGRpdmlkZW5kIHdvcmRzCgltb3YubAkJJWQ1LCAtKCVzcCkJCSMgc2F2ZSAlZDUgKCVkNiBhbHJlYWR5IHNhdmVkKQoJbW92LmwJCSVkMSwgJWQ2Cglzd2FwCQklZDYJCQkjIHNoaWZ0IGFuc3dlciB0byBtcyAzIHdvcmRzCgltb3YubAkJJWQ3LCAlZDUKCWJzci5sCQlkbW0yCgltb3YubAkJJWQ1LCAlZDIJCSMgbm93ICVkMiwlZDMgYXJlIHRyaWFsKmRpdmlzb3IKCW1vdi5sCQklZDYsICVkMwoJbW92LmwJCSglc3ApKywgJWQ1CQkjIHJlc3RvcmUgZGl2aWRlbmQKCW1vdi5sCQkoJXNwKSssICVkNgoJc3ViLmwJCSVkMywgJWQ2CglzdWJ4LmwJCSVkMiwgJWQ1CQkjIHN1YnRyYWN0IGRvdWJsZSBwcmVjaXNpb24KCWJjYwkJZGQybmQJCQkjIG5vIGNhcnJ5LCBkbyBuZXh0IHF1b3RpZW50IGRpZ2l0CglzdWJxLmwJCSYweDEsICVkMQkJIyBxIGlzIG9uZSB0b28gbGFyZ2UKIyBuZWVkIHRvIGFkZCBiYWNrIGRpdmlzb3IgbG9uZ3dvcmQgdG8gY3VycmVudCBtcyAzIGRpZ2l0cyBvZiBkaXZpZGVuZAojIC0gYWNjb3JkaW5nIHRvIEtudXRoLCB0aGlzIGlzIGRvbmUgb25seSAyIG91dCBvZiA2NTUzNiB0aW1lcyBmb3IgcmFuZG9tCiMgZGl2aXNvciwgZGl2aWRlbmQgc2VsZWN0aW9uLgoJY2xyLmwJCSVkMgoJbW92LmwJCSVkNywgJWQzCglzd2FwCQklZDMKCWNsci53CQklZDMJCQkjICVkMyBub3cgbHMgd29yZCBvZiBkaXZpc29yCglhZGQubAkJJWQzLCAlZDYJCSMgYWxpZ25lZCB3aXRoIDNyZCB3b3JkIG9mIGRpdmlkZW5kCglhZGR4LmwJCSVkMiwgJWQ1Cgltb3YubAkJJWQ3LCAlZDMKCWNsci53CQklZDMJCQkjICVkMyBub3cgbXMgd29yZCBvZiBkaXZpc29yCglzd2FwCQklZDMJCQkjIGFsaWduZWQgd2l0aCAybmQgd29yZCBvZiBkaXZpZGVuZAoJYWRkLmwJCSVkMywgJWQ1CmRkMm5kOgoJdHN0LmIJCUREU0VDT05EKCVhNikJCSMgYm90aCBxIHdvcmRzIGRvbmU/CglibmUuYgkJZGRyZW1haW4KIyBmaXJzdCBxdW90aWVudCBkaWdpdCBub3cgY29ycmVjdC4gc3RvcmUgZGlnaXQgYW5kIHNoaWZ0IHRoZQojIChzdWJ0cmFjdGVkKSBkaXZpZGVuZAoJbW92LncJCSVkMSwgRERRVU9USUVOVCglYTYpCgljbHIubAkJJWQxCglzd2FwCQklZDUKCXN3YXAJCSVkNgoJbW92LncJCSVkNiwgJWQ1CgljbHIudwkJJWQ2CglzdAkJRERTRUNPTkQoJWE2KQkJIyBzZWNvbmQgZGlnaXQKCWJyYS53CQlkZG5vcm1hbGl6ZWQKZGRyZW1haW46CiMgYWRkIDJuZCB3b3JkIHRvIHF1b3RpZW50LCBnZXQgdGhlIHJlbWFpbmRlci4KCW1vdi53CQklZDEsIEREUVVPVElFTlQrMiglYTYpCiMgc2hpZnQgZG93biBvbmUgd29yZC9kaWdpdCB0byByZW5vcm1hbGl6ZSByZW1haW5kZXIuCgltb3YudwkJJWQ1LCAlZDYKCXN3YXAJCSVkNgoJc3dhcAkJJWQ1Cgltb3YubAkJREROT1JNQUwoJWE2KSwgJWQ3CSMgZ2V0IG5vcm0gc2hpZnQgY291bnQKCWJlcS5iCQlkZHJuCglzdWJxLmwJCSYweDEsICVkNwkJIyBzZXQgZm9yIGxvb3AgY291bnQKZGRubHA6Cglsc3IubAkJJjB4MSwgJWQ1CQkjIHNoaWZ0IGludG8gJWQ2Cglyb3hyLmwJCSYweDEsICVkNgoJZGJmCQklZDcsIGRkbmxwCmRkcm46Cgltb3YubAkJJWQ2LCAlZDUJCSMgcmVtYWluZGVyCgltb3YubAkJRERRVU9USUVOVCglYTYpLCAlZDYJIyBxdW90aWVudAoKCXJ0cwpkbW0yOgojIGZhY3RvcnMgZm9yIHRoZSAzMlgzMi0+NjQgbXVsdGlwbGljYXRpb24gYXJlIGluICVkNSBhbmQgJWQ2LgojIHJldHVybnMgNjQgYml0IHJlc3VsdCBpbiAlZDUgKGhpKSAlZDYobG8pLgojIGRlc3Ryb3lzICVkMiwlZDMsJWQ0LgoKIyBtdWx0aXBseSBoaSxsbyB3b3JkcyBvZiBlYWNoIGZhY3RvciB0byBnZXQgNCBpbnRlcm1lZGlhdGUgcHJvZHVjdHMKCW1vdi5sCQklZDYsICVkMgoJbW92LmwJCSVkNiwgJWQzCgltb3YubAkJJWQ1LCAlZDQKCXN3YXAJCSVkMwoJc3dhcAkJJWQ0CgltdWx1LncJCSVkNSwgJWQ2CQkjICVkNiA8LSBsc3cqbHN3CgltdWx1LncJCSVkMywgJWQ1CQkjICVkNSA8LSBtc3ctZGVzdCpsc3ctc291cmNlCgltdWx1LncJCSVkNCwgJWQyCQkjICVkMiA8LSBtc3ctc291cmNlKmxzdy1kZXN0CgltdWx1LncJCSVkNCwgJWQzCQkjICVkMyA8LSBtc3cqbXN3CiMgbm93IHVzZSBzd2FwIGFuZCBhZGR4IHRvIGNvbnNvbGlkYXRlIHRvIHR3byBsb25nd29yZHMKCWNsci5sCQklZDQKCXN3YXAJCSVkNgoJYWRkLncJCSVkNSwgJWQ2CQkjIGFkZCBtc3cgb2YgbCpsIHRvIGxzdyBvZiBtKmwgcHJvZHVjdAoJYWRkeC53CQklZDQsICVkMwkJIyBhZGQgYW55IGNhcnJ5IHRvIG0qbSBwcm9kdWN0CglhZGQudwkJJWQyLCAlZDYJCSMgYWRkIGluIGxzdyBvZiBvdGhlciBtKmwgcHJvZHVjdAoJYWRkeC53CQklZDQsICVkMwkJIyBhZGQgYW55IGNhcnJ5IHRvIG0qbSBwcm9kdWN0Cglzd2FwCQklZDYJCQkjICVkNiBpcyBsb3cgMzIgYml0cyBvZiBmaW5hbCBwcm9kdWN0CgljbHIudwkJJWQ1CgljbHIudwkJJWQyCQkJIyBsc3cgb2YgdHdvIG1peGVkIHByb2R1Y3RzIHVzZWQsCglzd2FwCQklZDUJCQkjIG5vdyB1c2UgbXN3cyBvZiBsb25nd29yZHMKCXN3YXAJCSVkMgoJYWRkLmwJCSVkMiwgJWQ1CglhZGQubAkJJWQzLCAlZDUJCSMgJWQ1IG5vdyBtcyAzMiBiaXRzIG9mIGZpbmFsIHByb2R1Y3QKCXJ0cwoKIyMjIyMjIyMjIwpkY29udHJvbG1vZGVsX3M6Cgltb3ZxLmwJCSZMT05HLCVkMAoJYnNyLmwJCV9jYWxjX2VhCQkjIGNhbGMgPGVhPgoKCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZpbW1lZF9mbGcgIyBpbW1lZGlhdGUgYWRkcmVzc2luZyBtb2RlPwoJYmVxLmIJCWRpbW1lZAkJCSMgeWVzCgoJbW92LmwJCSVhMCwlYTIKCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggZGl2aXNvciBmcm9tIDxlYT4KCgl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CglibmUuYgkJZGl2NjRfZXJyCQkjIHllcwoKCW1vdi5sCQklZDAsICVkNwoJYnJhLncJCWRnb3RzcmNsCgojIHdlIGhhdmUgdG8gc3BsaXQgb3V0IGltbWVkaWF0ZSBkYXRhIGhlcmUgYmVjYXVzZSBpdCBtdXN0IGJlIHJlYWQgdXNpbmcKIyBpbWVtX3JlYWQoKSBpbnN0ZWFkIG9mIGRtZW1fcmVhZCgpLiB0aGlzIGJlY29tZXMgZXNwZWNpYWxseSBpbXBvcnRhbnQKIyBpZiB0aGUgZmV0Y2ggcnVucyBpbnRvIHNvbWUgZGVhZGx5IGZhdWx0LgpkaW1tZWQ6CglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyByZWFkIGltbWVkaWF0ZSB2YWx1ZQoKCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKCgltb3YubAkJJWQwLCVkNwoJYnJhLncJCWRnb3RzcmNsCgojIyMjIyMjIyMjCgojIGlmIGRtZW1fcmVhZF9sb25nKCkgcmV0dXJucyBhIGZhaWwgbWVzc2FnZSBpbiBkMSwgdGhlIHBhY2thZ2UKIyBtdXN0IGNyZWF0ZSBhbiBhY2Nlc3MgZXJyb3IgZnJhbWUuIGhlcmUsIHdlIHBhc3MgYSBza2VsZXRvbiBmc2x3CiMgYW5kIHRoZSBmYWlsaW5nIGFkZHJlc3MgdG8gdGhlIHJvdXRpbmUgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZnJhbWUuCiMgYWxzbywgd2UgY2FsbCBpc3BfcmVzdG9yZSBpbiBjYXNlIHRoZSBlZmZlY3RpdmUgYWRkcmVzc2luZyBtb2RlIHdhcwojIChhbikrIG9yIC0oYW4pIGluIHdoaWNoIGNhc2UgdGhlIHByZXZpb3VzICJhbiIgdmFsdWUgbXVzdCBiZSByZXN0b3JlZC4KIyBGU0xXOgojCXJlYWQgPSB0cnVlCiMJc2l6ZSA9IGxvbmd3b3JkCiMJVE0gPSBkYXRhCiMJc29mdHdhcmUgZW11bGF0aW9uIGVycm9yID0gdHJ1ZQpkaXY2NF9lcnI6Cglic3IubAkJaXNwX3Jlc3RvcmUJCSMgcmVzdG9yZSBhZGRyIHJlZwoJbW92LmwJCSVhMiwlYTAJCQkjIHBhc3MgZmFpbGluZyBhZGRyZXNzCgltb3YubAkJJjB4MDEwMTAwMDEsJWQwCQkjIHBhc3MgZnNsdwoJYnJhLmwJCWlzcF9kYWNjCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfbXVsNjQoKTogcm91dGluZSB0byBlbXVsYXRlIG11bHt1LHN9LmwgPGVhPixEaDpEbCAzMngzMi0+NjQJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2NhbGNfZWEoKSAtIGNhbGN1bGF0ZSBlZmZlY3RpdmUgYWRkcmVzcwkJCSMKIwlpc3BfaWFjYygpIC0gaGFuZGxlIGluc3RydWN0aW9uIGFjY2VzcyBlcnJvciBleGNlcHRpb24JCSMKIwlpc3BfZGFjYygpIC0gaGFuZGxlIGRhdGEgYWNjZXNzIGVycm9yIGV4Y2VwdGlvbgkJCSMKIwlpc3BfcmVzdG9yZSgpIC0gcmVzdG9yZSBBbiBvbiBhY2Nlc3MgZXJyb3Igdy8gLSgpIG9yICgpKwkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlub25lCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlJZiBleGl0aW5nIHRocm91Z2ggaXNwX2RhY2MuLi4JCQkJCSMKIwkJYTAgPSBmYWlsaW5nIGFkZHJlc3MJCQkJCSMKIwkJZDAgPSBGU0xXCQkJCQkJIwojCWVsc2UJCQkJCQkJCSMKIwkJbm9uZQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlGaXJzdCwgZGVjb2RlIHRoZSBvcGVyYW5kIGxvY2F0aW9uLiBJZiBpdCdzIGluIERuLCBmZXRjaCBmcm9tCSMKIyB0aGUgc3RhY2suIElmIGl0J3MgaW4gbWVtb3J5LCB1c2UgX2NhbGNfZWEoKSB0byBjYWxjdWxhdGUgdGhlCQkjCiMgZWZmZWN0aXZlIGFkZHJlc3MuIFVzZSBfZG1lbV9yZWFkX2xvbmcoKSB0byBmZXRjaCBhdCB0aGF0IGFkZHJlc3MuCSMKIyBVbmxlc3MgdGhlIG9wZXJhbmQgaXMgaW1tZWRpYXRlIGRhdGEuIFRoZW4gdXNlIF9pbWVtX3JlYWRfbG9uZygpLgkjCiMgU2VuZCBmYWlsdXJlcyB0byBpc3BfZGFjYygpIG9yIGlzcF9pYWNjKCkgYXMgYXBwcm9wcmlhdGUuCQkjCiMJSWYgdGhlIG9wZXJhbmRzIGFyZSBzaWduZWQsIG1ha2UgdGhlbSB1bnNpZ25lZCBhbmQgc2F2ZSB0aGUJIwojIHNpZ24gaW5mbyBmb3IgbGF0ZXIuIFBlcmZvcm0gdGhlIG11bHRpcGxpY2F0aW9uIHVzaW5nIDE2eDE2LT4zMgkjCiMgdW5zaWduZWQgbXVsdGlwbGllcyBhbmQgImFkZCIgaW5zdHJ1Y3Rpb25zLiBTdG9yZSB0aGUgaGlnaCBhbmQgbG93CSMKIyBwb3J0aW9ucyBvZiB0aGUgcmVzdWx0IGluIHRoZSBhcHByb3ByaWF0ZSBkYXRhIHJlZ2lzdGVycyBvbiB0aGUJIwojIHN0YWNrLiBDYWxjdWxhdGUgdGhlIGNvbmRpdGlvbiBjb2RlcywgYWxzby4JCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIyMjIyMjIyMjIyMjCiMgbXVsKHUscylsICMKIyMjIyMjIyMjIyMjIwoJZ2xvYmFsCQlfbXVsNjQKX211bDY0OgoJbW92LmIJCUVYQ19PUFdPUkQrMSglYTYpLCAlZDAJIyBleHRyYWN0IHNyYyB7bW9kZSxyZWd9CgljbXBpLmIJCSVkMCwgJjB4NwkJIyBpcyBzcmMgbW9kZSBEbiBvciBvdGhlcj8KCWJndC53CQltdWw2NF9tZW1vcAkJIyBzcmMgaXMgaW4gbWVtb3J5CgojIG11bHRpcGxpZXIgb3BlcmFuZCBpbiB0aGUgZGF0YSByZWdpc3RlciBmaWxlLgojIG11c3QgZXh0cmFjdCB0aGUgcmVnaXN0ZXIgbnVtYmVyIGFuZCBmZXRjaCB0aGUgb3BlcmFuZCBmcm9tIHRoZSBzdGFjay4KbXVsNjRfcmVnb3A6CglhbmRpLncJCSYweDcsICVkMAkJIyBleHRyYWN0IERuCgltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQwLncqNCksICVkMyAjIGZldGNoIG11bHRpcGxpZXIKCiMgbXVsdGlwbGllciBpcyBpbiAlZDMuIG5vdywgZXh0cmFjdCBEbCBhbmQgRGggZmllbGRzIGFuZCBmZXRjaCB0aGUKIyBtdWx0aXBsaWNhbmQgZnJvbSB0aGUgZGF0YSByZWdpc3RlciBzcGVjaWZpZWQgYnkgRGwuCm11bDY0X211bHRpcGxpY2FuZDoKCW1vdi53CQlFWENfRVhUV09SRCglYTYpLCAlZDIJIyBmZXRjaCBleHQgd29yZAoJY2xyLncJCSVkMQkJCSMgY2xlYXIgRGggcmVnCgltb3YuYgkJJWQyLCAlZDEJCSMgZ3JhYiBEaAoJcm9sLncJCSYweDQsICVkMgkJIyBhbGlnbiBEbCBieXRlCglhbmRpLncJCSYweDcsICVkMgkJIyBleHRyYWN0IERsCgoJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMi53KjQpLCAlZDQgIyBnZXQgbXVsdGlwbGljYW5kCgojIGNoZWNrIGZvciB0aGUgY2FzZSBvZiAiemVybyIgcmVzdWx0IGVhcmx5Cgl0c3QubAkJJWQ0CQkJIyB0ZXN0IG11bHRpcGxpY2FuZAoJYmVxLncJCW11bDY0X3plcm8JCSMgaGFuZGxlIHplcm8gc2VwYXJhdGVseQoJdHN0LmwJCSVkMwkJCSMgdGVzdCBtdWx0aXBsaWVyCgliZXEudwkJbXVsNjRfemVybwkJIyBoYW5kbGUgemVybyBzZXBhcmF0ZWx5CgojIG11bHRpcGxpZXIgaXMgaW4gJWQzIGFuZCBtdWx0aXBsaWNhbmQgaXMgaW4gJWQ0LgojIGlmIHRoZSBvcGVyYXRpb24gaXMgdG8gYmUgc2lnbmVkLCB0aGVuIHRoZSBvcGVyYW5kcyBhcmUgY29udmVydGVkCiMgdG8gdW5zaWduZWQgYW5kIHRoZSByZXN1bHQgc2lnbiBpcyBzYXZlZCBmb3IgdGhlIGVuZC4KCWNsci5iCQlFWENfVEVNUCglYTYpCQkjIGNsZWFyIHRlbXAgc3BhY2UKCWJ0c3QJCSYweDMsIEVYQ19FWFRXT1JEKCVhNikJIyBzaWduZWQgb3IgdW5zaWduZWQ/CgliZXEuYgkJbXVsNjRfYWxnCQkjIHVuc2lnbmVkOyBza2lwIHNnbiBjYWxjCgoJdHN0LmwJCSVkMwkJCSMgaXMgbXVsdGlwbGllciBuZWdhdGl2ZT8KCWJnZS5iCQltdWw2NF9jaGtfbWRfc2duCSMgbm8KCW5lZy5sCQklZDMJCQkjIG1ha2UgbXVsdGlwbGllciBwb3NpdGl2ZQoJb3JpLmIJCSYweDEsIEVYQ19URU1QKCVhNikJIyBzYXZlIG11bHRpcGxpZXIgc2duCgojIHRoZSByZXN1bHQgc2lnbiBpcyB0aGUgZXhjbHVzaXZlIG9yIG9mIHRoZSBvcGVyYW5kIHNpZ24gYml0cy4KbXVsNjRfY2hrX21kX3NnbjoKCXRzdC5sCQklZDQJCQkjIGlzIG11bHRpcGxpY2FuZCBuZWdhdGl2ZT8KCWJnZS5iCQltdWw2NF9hbGcJCSMgbm8KCW5lZy5sCQklZDQJCQkjIG1ha2UgbXVsdGlwbGljYW5kIHBvc2l0aXZlCgllb3JpLmIJCSYweDEsIEVYQ19URU1QKCVhNikJIyBjYWxjdWxhdGUgY29ycmVjdCBzaWduCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMJNjMJCQkgICAzMgkJCQkwCSMKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkJCQkjCiMJfCBoaShtcGxpZXIpICogaGkobXBsaWNhbmQpfAkJCQkJIwojCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCQkJCSMKIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKIwkJICAgICB8IGhpKG1wbGllcikgKiBsbyhtcGxpY2FuZCkgfAkJCSMKIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKIwkJICAgICB8IGxvKG1wbGllcikgKiBoaShtcGxpY2FuZCkgfAkJCSMKIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKIwkgIHwJCQkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCiMJLS18LS0JCQkgICB8IGxvKG1wbGllcikgKiBsbyhtcGxpY2FuZCkgfAkjCiMJICB8CQkJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JIwojCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CSMKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCiMJfAloaShyZXN1bHQpCSAgIHwJICAgIGxvKHJlc3VsdCkgICAgICAgICB8CSMKIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKbXVsNjRfYWxnOgojIGxvYWQgdGVtcCByZWdpc3RlcnMgd2l0aCBvcGVyYW5kcwoJbW92LmwJCSVkMywgJWQ1CQkjIG1yIGluICVkNQoJbW92LmwJCSVkMywgJWQ2CQkjIG1yIGluICVkNgoJbW92LmwJCSVkNCwgJWQ3CQkjIG1kIGluICVkNwoJc3dhcAkJJWQ2CQkJIyBoaShtcikgaW4gbG8gJWQ2Cglzd2FwCQklZDcJCQkjIGhpKG1kKSBpbiBsbyAlZDcKCiMgY29tcGxldGUgbmVjZXNzYXJ5IG11bHRpcGxpZXM6CgltdWx1LncJCSVkNCwgJWQzCQkjIFsxXSBsbyhtcikgKiBsbyhtZCkKCW11bHUudwkJJWQ2LCAlZDQJCSMgWzJdIGhpKG1yKSAqIGxvKG1kKQoJbXVsdS53CQklZDcsICVkNQkJIyBbM10gbG8obXIpICogaGkobWQpCgltdWx1LncJCSVkNywgJWQ2CQkjIFs0XSBoaShtcikgKiBoaShtZCkKCiMgYWRkIGxvIHBvcnRpb25zIG9mIFsyXSxbM10gdG8gaGkgcG9ydGlvbiBvZiBbMV0uCiMgYWRkIGNhcnJpZXMgcHJvZHVjZWQgZnJvbSB0aGVzZSBhZGRzIHRvIFs0XS4KIyBsbyhbMV0pIGlzIHRoZSBmaW5hbCBsbyAxNiBiaXRzIG9mIHRoZSByZXN1bHQuCgljbHIubAkJJWQ3CQkJIyBsb2FkICVkNyB3LyB6ZXJvIHZhbHVlCglzd2FwCQklZDMJCQkjIGhpKFsxXSkgPD09PiBsbyhbMV0pCglhZGQudwkJJWQ0LCAlZDMJCSMgaGkoWzFdKSArIGxvKFsyXSkKCWFkZHgubAkJJWQ3LCAlZDYJCSMgICAgWzRdICArIGNhcnJ5CglhZGQudwkJJWQ1LCAlZDMJCSMgaGkoWzFdKSArIGxvKFszXSkKCWFkZHgubAkJJWQ3LCAlZDYJCSMgICAgWzRdICArIGNhcnJ5Cglzd2FwCQklZDMJCQkjIGxvKFsxXSkgPD09PiBoaShbMV0pCgojIGxvIHBvcnRpb25zIG9mIFsyXSxbM10gaGF2ZSBiZWVuIGFkZGVkIGluIHRvIGZpbmFsIHJlc3VsdC4KIyBub3csIGNsZWFyIGxvLCBwdXQgaGkgaW4gbG8gcmVnLCBhbmQgYWRkIHRvIFs0XQoJY2xyLncJCSVkNAkJCSMgY2xlYXIgbG8oWzJdKQoJY2xyLncJCSVkNQkJCSMgY2xlYXIgaGkoWzNdKQoJc3dhcAkJJWQ0CQkJIyBoaShbMl0pIGluIGxvICVkNAoJc3dhcAkJJWQ1CQkJIyBoaShbM10pIGluIGxvICVkNQoJYWRkLmwJCSVkNSwgJWQ0CQkjICAgIFs0XSAgKyBoaShbMl0pCglhZGQubAkJJWQ2LCAlZDQJCSMgICAgWzRdICArIGhpKFszXSkKCiMgdW5zaWduZWQgcmVzdWx0IGlzIG5vdyBpbiB7JWQ0LCVkM30KCXRzdC5iCQlFWENfVEVNUCglYTYpCQkjIHNob3VsZCByZXN1bHQgYmUgc2lnbmVkPwoJYmVxLmIJCW11bDY0X2RvbmUJCSMgbm8KCiMgcmVzdWx0IHNob3VsZCBiZSBhIHNpZ25lZCBuZWdhdGl2ZSBudW1iZXIuCiMgY29tcHV0ZSAyJ3MgY29tcGxlbWVudCBvZiB0aGUgdW5zaWduZWQgbnVtYmVyOgojICAgLW5lZ2F0ZSBhbGwgYml0cyBhbmQgYWRkIDEKbXVsNjRfbmVnOgoJbm90LmwJCSVkMwkJCSMgbmVnYXRlIGxvKHJlc3VsdCkgYml0cwoJbm90LmwJCSVkNAkJCSMgbmVnYXRlIGhpKHJlc3VsdCkgYml0cwoJYWRkcS5sCQkmMSwgJWQzCQkJIyBhZGQgMSB0byBsbyhyZXN1bHQpCglhZGR4LmwJCSVkNywgJWQ0CQkjIGFkZCBjYXJyeSB0byBoaShyZXN1bHQpCgojIHRoZSByZXN1bHQgaXMgc2F2ZWQgdG8gdGhlIHJlZ2lzdGVyIGZpbGUuCiMgZm9yICcwNDAgY29tcGF0aWJpbGl0eSwgaWYgRGwgPT0gRGggdGhlbiBvbmx5IHRoZSBoaShyZXN1bHQpIGlzCiMgc2F2ZWQuIHNvLCBzYXZpbmcgaGkgYWZ0ZXIgbG8gYWNjb21wbGlzaGVzIHRoaXMgd2l0aG91dCBuZWVkIHRvCiMgY2hlY2sgRGwsRGggZXF1YWxpdHkuCm11bDY0X2RvbmU6Cgltb3YubAkJJWQzLCAoRVhDX0RSRUdTLCVhNiwlZDIudyo0KSAjIHNhdmUgbG8ocmVzdWx0KQoJbW92LncJCSYweDAsICVjYwoJbW92LmwJCSVkNCwgKEVYQ19EUkVHUywlYTYsJWQxLncqNCkgIyBzYXZlIGhpKHJlc3VsdCkKCiMgbm93LCBncmFiIHRoZSBjb25kaXRpb24gY29kZXMuIG9ubHkgb25lIHRoYXQgY2FuIGJlIHNldCBpcyAnTicuCiMgJ04nIENBTiBiZSBzZXQgaWYgdGhlIG9wZXJhdGlvbiBpcyB1bnNpZ25lZCBpZiBiaXQgNjMgaXMgc2V0LgoJbW92LncJCSVjYywgJWQ3CQkjIGZldGNoICVjY3IgdG8gc2VlIGlmICdOJyBzZXQKCWFuZGkuYgkJJjB4OCwgJWQ3CQkjIGV4dHJhY3QgJ04nIGJpdAoKbXVsNjRfY2NvZGVfc2V0OgoJbW92LmIJCUVYQ19DQysxKCVhNiksICVkNgkjIGZldGNoIHByZXZpb3VzICVjY3IKCWFuZGkuYgkJJjB4MTAsICVkNgkJIyBhbGwgYnV0ICdYJyBiaXQgY2hhbmdlcwoKCW9yLmIJCSVkNywgJWQ2CQkjIGdyb3VwICdYJyBhbmQgJ04nCgltb3YuYgkJJWQ2LCBFWENfQ0MrMSglYTYpCSMgc2F2ZSBuZXcgJWNjcgoKCXJ0cwoKIyBvbmUgb3IgYm90aCBvZiB0aGUgb3BlcmFuZHMgaXMgemVybyBzbyB0aGUgcmVzdWx0IGlzIGFsc28gemVyby4KIyBzYXZlIHRoZSB6ZXJvIHJlc3VsdCB0byB0aGUgcmVnaXN0ZXIgZmlsZSBhbmQgc2V0IHRoZSAnWicgY2NvZGUgYml0LgptdWw2NF96ZXJvOgoJY2xyLmwJCShFWENfRFJFR1MsJWE2LCVkMi53KjQpICMgc2F2ZSBsbyhyZXN1bHQpCgljbHIubAkJKEVYQ19EUkVHUywlYTYsJWQxLncqNCkgIyBzYXZlIGhpKHJlc3VsdCkKCgltb3ZxLmwJCSYweDQsICVkNwkJIyBzZXQgJ1onIGNjb2RlIGJpdAoJYnJhLmIJCW11bDY0X2Njb2RlX3NldAkJIyBmaW5pc2ggY2NvZGUgc2V0CgojIyMjIyMjIyMjCgojIG11bHRpcGxpZXIgb3BlcmFuZCBpcyBpbiBtZW1vcnkgYXQgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzLgojIG11c3QgY2FsY3VsYXRlIHRoZSA8ZWE+IGFuZCBnbyBmZXRjaCB0aGUgMzItYml0IG9wZXJhbmQuCm11bDY0X21lbW9wOgoJbW92cS5sCQkmTE9ORywgJWQwCQkjIHBhc3MgIyBvZiBieXRlcwoJYnNyLmwJCV9jYWxjX2VhCQkjIGNhbGN1bGF0ZSA8ZWE+CgoJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJmltbWVkX2ZsZyAjIGltbWVkaWF0ZSBhZGRyZXNzaW5nIG1vZGU/CgliZXEuYgkJbXVsNjRfaW1tZWQJCSMgeWVzCgoJbW92LmwJCSVhMCwlYTIKCWJzci5sCQlfZG1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggc3JjIGZyb20gYWRkciAoJWEwKQoKCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KCWJuZS53CQltdWw2NF9lcnIJCSMgeWVzCgoJbW92LmwJCSVkMCwgJWQzCQkjIHN0b3JlIG11bHRpcGxpZXIgaW4gJWQzCgoJYnJhLncJCW11bDY0X211bHRpcGxpY2FuZAoKIyB3ZSBoYXZlIHRvIHNwbGl0IG91dCBpbW1lZGlhdGUgZGF0YSBoZXJlIGJlY2F1c2UgaXQgbXVzdCBiZSByZWFkIHVzaW5nCiMgaW1lbV9yZWFkKCkgaW5zdGVhZCBvZiBkbWVtX3JlYWQoKS4gdGhpcyBiZWNvbWVzIGVzcGVjaWFsbHkgaW1wb3J0YW50CiMgaWYgdGhlIGZldGNoIHJ1bnMgaW50byBzb21lIGRlYWRseSBmYXVsdC4KbXVsNjRfaW1tZWQ6CglhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQoJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyByZWFkIGltbWVkaWF0ZSB2YWx1ZQoKCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKCgltb3YubAkJJWQwLCVkMwoJYnJhLncJCW11bDY0X211bHRpcGxpY2FuZAoKIyMjIyMjIyMjIwoKIyBpZiBkbWVtX3JlYWRfbG9uZygpIHJldHVybnMgYSBmYWlsIG1lc3NhZ2UgaW4gZDEsIHRoZSBwYWNrYWdlCiMgbXVzdCBjcmVhdGUgYW4gYWNjZXNzIGVycm9yIGZyYW1lLiBoZXJlLCB3ZSBwYXNzIGEgc2tlbGV0b24gZnNsdwojIGFuZCB0aGUgZmFpbGluZyBhZGRyZXNzIHRvIHRoZSByb3V0aW5lIHRoYXQgY3JlYXRlcyB0aGUgbmV3IGZyYW1lLgojIGFsc28sIHdlIGNhbGwgaXNwX3Jlc3RvcmUgaW4gY2FzZSB0aGUgZWZmZWN0aXZlIGFkZHJlc3NpbmcgbW9kZSB3YXMKIyAoYW4pKyBvciAtKGFuKSBpbiB3aGljaCBjYXNlIHRoZSBwcmV2aW91cyAiYW4iIHZhbHVlIG11c3QgYmUgcmVzdG9yZWQuCiMgRlNMVzoKIwlyZWFkID0gdHJ1ZQojCXNpemUgPSBsb25nd29yZAojCVRNID0gZGF0YQojCXNvZnR3YXJlIGVtdWxhdGlvbiBlcnJvciA9IHRydWUKbXVsNjRfZXJyOgoJYnNyLmwJCWlzcF9yZXN0b3JlCQkjIHJlc3RvcmUgYWRkciByZWcKCW1vdi5sCQklYTIsJWEwCQkJIyBwYXNzIGZhaWxpbmcgYWRkcmVzcwoJbW92LmwJCSYweDAxMDEwMDAxLCVkMAkJIyBwYXNzIGZzbHcKCWJyYS5sCQlpc3BfZGFjYwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2NvbXBhbmRzZXQyKCk6IHJvdXRpbmUgdG8gZW11bGF0ZSBjYXMyKCkJCQkjCiMJCQkoaW50ZXJuYWwgdG8gcGFja2FnZSkJCQkJIwojCQkJCQkJCQkJIwojCV9pc3BfY2FzMl9maW5pc2goKTogc3RvcmUgY2NvZGVzLCBzdG9yZSBjb21wYXJlIHJlZ3MJCSMKIwkJCSAgICAoZXh0ZXJuYWwgdG8gcGFja2FnZSkJCQkjCiMJCQkJCQkJCQkjCiMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfcmVhbF9sb2NrX3BhZ2UoKSAtICJjYWxsb3V0IiB0byBsb2NrIG9wJ3MgcGFnZSBmcm9tIHBhZ2Utb3V0cwkjCiMJX2Nhc190ZXJtaW5hdGUyKCkgLSBhY2Nlc3MgZXJyb3IgZXhpdAkJCQkjCiMJX3JlYWxfY2FzMigpIC0gImNhbGxvdXQiIHRvIGNvcmUgY2FzMiBlbXVsYXRpb24gY29kZQkJIwojCV9yZWFsX3VubG9ja19wYWdlKCkgLSAiY2FsbG91dCIgdG8gdW5sb2NrIHBhZ2UJCQkjCiMJCQkJCQkJCQkjCiMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIyBfY29tcGFuZHNldDIoKToJCQkJCQkJIwojCWQwID0gaW5zdHJ1Y3Rpb24gZXh0ZW5zaW9uIHdvcmQJCQkJCSMKIwkJCQkJCQkJCSMKIyBfaXNwX2NhczJfZmluaXNoKCk6CQkJCQkJCSMKIwlzZWUgY2FzMiBjb3JlIGVtdWxhdGlvbiBjb2RlCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIyBfY29tcGFuZHNldDIoKToJCQkJCQkJIwojCXNlZSBjYXMyIGNvcmUgZW11bGF0aW9uIGNvZGUJCQkJCSMKIwkJCQkJCQkJCSMKIyBfaXNwX2Nhc19maW5pc2goKToJCQkJCQkJIwojCU5vbmUgKHJlZ2lzdGVyIGZpbGUgb3IgbWVtcm95IGNoYW5nZWQgYXMgYXBwcm9wcmlhdGUpCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIyBjb21wYW5kc2V0MigpOgkJCQkJCQkjCiMJRGVjb2RlIHRoZSBpbnN0cnVjdGlvbiBhbmQgZmV0Y2ggdGhlIGFwcHJvcHJpYXRlIFVwZGF0ZSBhbmQJIwojIENvbXBhcmUgb3BlcmFuZHMuIFRoZW4gY2FsbCB0aGUgImNhbGxvdXQiIF9yZWFsX2xvY2tfcGFnZSgpIGZvciBlYWNoCSMKIyBtZW1vcnkgb3BlcmFuZCBhZGRyZXNzIHNvIHRoYXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY2FuIGtlZXAgdGhlc2UJIwojIHBhZ2VzIGZyb20gYmVpbmcgcGFnZWQgb3V0LiBJZiBlaXRoZXIgX3JlYWxfbG9ja19wYWdlKCkgZmFpbHMsIGV4aXQJIwojIHRocm91Z2ggX2Nhc190ZXJtaW5hdGUyKCkuIERvbid0IGZvcmdldCB0byB1bmxvY2sgdGhlIDFzdCBsb2NrZWQgcGFnZQkjCiMgdXNpbmcgX3JlYWxfdW5sb2NrX3BhZ2VkKCkgaWYgdGhlIDJuZCBsb2NrLXBhZ2UgZmFpbHMuCQkjCiMgRmluYWxseSwgYnJhbmNoIHRvIHRoZSBjb3JlIGNhczIgZW11bGF0aW9uIGNvZGUgYnkgY2FsbGluZyB0aGUJIwojICJjYWxsb3V0IiBfcmVhbF9jYXMyKCkuCQkJCQkJIwojCQkJCQkJCQkJIwojIF9pc3BfY2FzMl9maW5pc2goKToJCQkJCQkJIwojCVJlLXBlcmZvcm0gdGhlIGNvbXBhcmlzb24gc28gd2UgY2FuIGRldGVybWluZSB0aGUgY29uZGl0aW9uCSMKIyBjb2RlcyB3aGljaCB3ZXJlIHRvbyBtdWNoIHRyb3VibGUgdG8ga2VlcCBhcm91bmQgZHVyaW5nIHRoZSBsb2NrZWQJIwojIGVtdWxhdGlvbi4gVGhlbiB1bmxvY2sgZWFjaCBvcGVyYW5kcyBwYWdlIGJ5IGNhbGxpbmcgdGhlICJjYWxsb3V0IgkjCiMgX3JlYWxfdW5sb2NrX3BhZ2UoKS4JCQkJCQkJIwojCQkJCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzZXQgQUREUjEsCUVYQ19URU1QKzB4YwpzZXQgQUREUjIsCUVYQ19URU1QKzB4MApzZXQgREMyLAlFWENfVEVNUCsweGEKc2V0IERDMSwJRVhDX1RFTVArMHg4CgoJZ2xvYmFsCQlfY29tcGFuZHNldDIKX2NvbXBhbmRzZXQyOgoJbW92LmwJCSVkMCxFWENfVEVNUCsweDQoJWE2KQkJIyBzdG9yZSBmb3IgcG9zc2libGUgcmVzdGFydAoJbW92LmwJCSVkMCwlZDEJCQkjIGV4dGVuc2lvbiB3b3JkIGluIGQwCgoJcm9sLncJCSYweDQsJWQwCglhbmRpLncJCSYweGYsJWQwCQkjIGV4dHJhY3QgUm4yCgltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQwLncqNCksJWExICMgZmV0Y2ggQUREUjIKCW1vdi5sCQklYTEsQUREUjIoJWE2KQoKCW1vdi5sCQklZDEsJWQwCgoJbHNyLncJCSYweDYsJWQxCglhbmRpLncJCSYweDcsJWQxCQkjIGV4dHJhY3QgRHUyCgltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQxLncqNCksJWQ1ICMgZmV0Y2ggVXBkYXRlMiBPcAoKCWFuZGkudwkJJjB4NywlZDAJCSMgZXh0cmFjdCBEYzIKCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDAudyo0KSwlZDMgIyBmZXRjaCBDb21wYXJlMiBPcAoJbW92LncJCSVkMCxEQzIoJWE2KQoKCW1vdi53CQlFWENfRVhUV09SRCglYTYpLCVkMAoJbW92LmwJCSVkMCwlZDEKCglyb2wudwkJJjB4NCwlZDAKCWFuZGkudwkJJjB4ZiwlZDAJCSMgZXh0cmFjdCBSbjEKCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDAudyo0KSwlYTAgIyBmZXRjaCBBRERSMQoJbW92LmwJCSVhMCxBRERSMSglYTYpCgoJbW92LmwJCSVkMSwlZDAKCglsc3IudwkJJjB4NiwlZDEKCWFuZGkudwkJJjB4NywlZDEJCSMgZXh0cmFjdCBEdTEKCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDEudyo0KSwlZDQgIyBmZXRjaCBVcGRhdGUxIE9wCgoJYW5kaS53CQkmMHg3LCVkMAkJIyBleHRyYWN0IERjMQoJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMC53KjQpLCVkMiAjIGZldGNoIENvbXBhcmUxIE9wCgltb3YudwkJJWQwLERDMSglYTYpCgoJYnRzdAkJJjB4MSxFWENfT1BXT1JEKCVhNikJIyB3b3JkIG9yIGxvbmc/CglzbmUJCSVkNwoKCWJ0c3QJCSYweDUsRVhDX0lTUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yPwoJc25lCQklZDYKCgltb3YubAkJJWEwLCVhMgoJbW92LmwJCSVhMSwlYTMKCgltb3YubAkJJWQ3LCVkMQkJCSMgcGFzcyBzaXplCgltb3YubAkJJWQ2LCVkMAkJCSMgcGFzcyBtb2RlCglic3IubAkJX3JlYWxfbG9ja19wYWdlCQkjIGxvY2sgcGFnZQoJbW92LmwJCSVhMiwlYTAKCXRzdC5sCQklZDAJCQkjIGVycm9yPwoJYm5lLmwJCV9jYXNfdGVybWluYXRlMgkJIyB5ZXMKCgltb3YubAkJJWQ3LCVkMQkJCSMgcGFzcyBzaXplCgltb3YubAkJJWQ2LCVkMAkJCSMgcGFzcyBtb2RlCgltb3YubAkJJWEzLCVhMAkJCSMgcGFzcyBhZGRyCglic3IubAkJX3JlYWxfbG9ja19wYWdlCQkjIGxvY2sgcGFnZQoJbW92LmwJCSVhMywlYTAKCXRzdC5sCQklZDAJCQkjIGVycm9yPwoJYm5lLmIJCWNhc19wcmV0ZXJtCQkjIHllcwoKCW1vdi5sCQklYTIsJWEwCgltb3YubAkJJWEzLCVhMQoKCWJyYS5sCQlfcmVhbF9jYXMyCgojIGlmIHRoZSAybmQgbG9jayBhdHRlbXB0IGZhaWxzLCB0aGVuIHdlIG11c3Qgc3RpbGwgdW5sb2NrIHRoZQojIGZpcnN0IHBhZ2UocykuCmNhc19wcmV0ZXJtOgoJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBGU0xXCgltb3YubAkJJWQ3LCVkMQkJCSMgcGFzcyBzaXplCgltb3YubAkJJWQ2LCVkMAkJCSMgcGFzcyBtb2RlCgltb3YubAkJJWEyLCVhMAkJCSMgcGFzcyBBRERSMQoJYnNyLmwJCV9yZWFsX3VubG9ja19wYWdlCSMgdW5sb2NrIGZpcnN0IHBhZ2UocykKCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgRlNMVwoJbW92LmwJCSVhMywlYTAJCQkjIHBhc3MgZmFpbGluZyBhZGRyCglicmEubAkJX2Nhc190ZXJtaW5hdGUyCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJZ2xvYmFsCQlfaXNwX2NhczJfZmluaXNoCl9pc3BfY2FzMl9maW5pc2g6CglidHN0CQkmMHgxLEVYQ19PUFdPUkQoJWE2KQoJYm5lLmIJCWNhczJfZmluaXNoX2wKCgltb3YudwkJRVhDX0NDKCVhNiksJWNjCQkjIGxvYWQgb2xkIGNjb2RlcwoJY21wLncJCSVkMCwlZDIKCWJuZS5iCQljYXMyX2ZpbmlzaF93X3NhdmUKCWNtcC53CQklZDEsJWQzCmNhczJfZmluaXNoX3dfc2F2ZToKCW1vdi53CQklY2MsRVhDX0NDKCVhNikJCSMgc2F2ZSBuZXcgY2NvZGVzCgoJdHN0LmIJCSVkNAkJCSMgdXBkYXRlIGNvbXBhcmUgcmVnPwoJYm5lLmIJCWNhczJfZmluaXNoX3dfZG9uZQkjIG5vCgoJbW92LncJCURDMiglYTYpLCVkMwkJIyBmZXRjaCBEYzIKCW1vdi53CQklZDEsKDIrRVhDX0RSRUdTLCVhNiwlZDMudyo0KSAjIHN0b3JlIG5ldyBDb21wYXJlMiBPcAoKCW1vdi53CQlEQzEoJWE2KSwlZDIJCSMgZmV0Y2ggRGMxCgltb3YudwkJJWQwLCgyK0VYQ19EUkVHUywlYTYsJWQyLncqNCkgIyBzdG9yZSBuZXcgQ29tcGFyZTEgT3AKCmNhczJfZmluaXNoX3dfZG9uZToKCWJ0c3QJCSYweDUsRVhDX0lTUiglYTYpCglzbmUJCSVkMgoJbW92LmwJCSVkMiwlZDAJCQkjIHBhc3MgbW9kZQoJc2YJCSVkMQkJCSMgcGFzcyBzaXplCgltb3YubAkJQUREUjEoJWE2KSwlYTAJCSMgcGFzcyBBRERSMQoJYnNyLmwJCV9yZWFsX3VubG9ja19wYWdlCSMgdW5sb2NrIHBhZ2UKCgltb3YubAkJJWQyLCVkMAkJCSMgcGFzcyBtb2RlCglzZgkJJWQxCQkJIyBwYXNzIHNpemUKCW1vdi5sCQlBRERSMiglYTYpLCVhMAkJIyBwYXNzIEFERFIyCglic3IubAkJX3JlYWxfdW5sb2NrX3BhZ2UJIyB1bmxvY2sgcGFnZQoJcnRzCgpjYXMyX2ZpbmlzaF9sOgoJbW92LncJCUVYQ19DQyglYTYpLCVjYwkJIyBsb2FkIG9sZCBjY29kZXMKCWNtcC5sCQklZDAsJWQyCglibmUuYgkJY2FzMl9maW5pc2hfbF9zYXZlCgljbXAubAkJJWQxLCVkMwpjYXMyX2ZpbmlzaF9sX3NhdmU6Cgltb3YudwkJJWNjLEVYQ19DQyglYTYpCQkjIHNhdmUgbmV3IGNjb2RlcwoKCXRzdC5iCQklZDQJCQkjIHVwZGF0ZSBjb21wYXJlIHJlZz8KCWJuZS5iCQljYXMyX2ZpbmlzaF9sX2RvbmUJIyBubwoKCW1vdi53CQlEQzIoJWE2KSwlZDMJCSMgZmV0Y2ggRGMyCgltb3YubAkJJWQxLChFWENfRFJFR1MsJWE2LCVkMy53KjQpICMgc3RvcmUgbmV3IENvbXBhcmUyIE9wCgoJbW92LncJCURDMSglYTYpLCVkMgkJIyBmZXRjaCBEYzEKCW1vdi5sCQklZDAsKEVYQ19EUkVHUywlYTYsJWQyLncqNCkgIyBzdG9yZSBuZXcgQ29tcGFyZTEgT3AKCmNhczJfZmluaXNoX2xfZG9uZToKCWJ0c3QJCSYweDUsRVhDX0lTUiglYTYpCglzbmUJCSVkMgoJbW92LmwJCSVkMiwlZDAJCQkjIHBhc3MgbW9kZQoJc3QJCSVkMQkJCSMgcGFzcyBzaXplCgltb3YubAkJQUREUjEoJWE2KSwlYTAJCSMgcGFzcyBBRERSMQoJYnNyLmwJCV9yZWFsX3VubG9ja19wYWdlCSMgdW5sb2NrIHBhZ2UKCgltb3YubAkJJWQyLCVkMAkJCSMgcGFzcyBtb2RlCglzdAkJJWQxCQkJIyBwYXNzIHNpemUKCW1vdi5sCQlBRERSMiglYTYpLCVhMAkJIyBwYXNzIEFERFIyCglic3IubAkJX3JlYWxfdW5sb2NrX3BhZ2UJIyB1bmxvY2sgcGFnZQoJcnRzCgojIyMjIyMjIwoJZ2xvYmFsCQljcl9jYXMyCmNyX2NhczI6Cgltb3YubAkJRVhDX1RFTVArMHg0KCVhNiksJWQwCglicmEudwkJX2NvbXBhbmRzZXQyCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfY29tcGFuZHNldCgpOiByb3V0aW5lIHRvIGVtdWxhdGUgY2FzIHcvIG1pc2FsaWduZWQgPGVhPgkjCiMJCSAgICAgICAoaW50ZXJuYWwgdG8gcGFja2FnZSkJCQkJIwojCV9pc3BfY2FzX2ZpbmlzaCgpOiByb3V0aW5lIGNhbGxlZCB3aGVuIGNhcyBlbXVsYXRpb24gY29tcGxldGVzCSMKIwkJCSAgIChleHRlcm5hbCBhbmQgaW50ZXJuYWwgdG8gcGFja2FnZSkJCSMKIwlfaXNwX2Nhc19yZXN0YXJ0KCk6IHJlc3RhcnQgY2FzIGVtdWxhdGlvbiBhZnRlciBhIGZhdWx0CQkjCiMJCQkgICAgKGV4dGVybmFsIHRvIHBhY2thZ2UpCQkJIwojCV9pc3BfY2FzX3Rlcm1pbmF0ZSgpOiBjcmVhdGUgYWNjZXNzIGVycm9yIHN0YWNrIGZyYW1lIG9uIGZhdWx0CSMKIwkJCSAgICAgIChleHRlcm5hbCBhbmQgaW50ZXJuYWwgdG8gcGFja2FnZSkJIwojCV9pc3BfY2FzX2lucmFuZ2UoKTogY2hlY2tzIHdoZXRoZXIgaW5zdHIgYWRkZXNzIGlzIHdpdGhpbiByYW5nZQkjCiMJCQkgICAgb2YgY29yZSBjYXMvY2FzMmVtdWxhdGlvbiBjb2RlCQkjCiMJCQkgICAgKGV4dGVybmFsIHRvIHBhY2thZ2UpCQkJIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2NhbGNfZWEoKTogY2FsY3VsYXRlIGVmZmVjdGl2ZSBhZGRyZXNzCQkJCSMKIwkJCQkJCQkJCSMKIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojIGNvbXBhbmRzZXQoKToJCQkJCQkJCSMKIwlub25lCQkJCQkJCQkjCiMgX2lzcF9jYXNfcmVzdGFydCgpOgkJCQkJCQkjCiMJZDYgPSBwcmV2aW91cyBzZmMvZGZjCQkJCQkJIwojIF9pc3BfY2FzX2ZpbmlzaCgpOgkJCQkJCQkjCiMgX2lzcF9jYXNfdGVybWluYXRlKCk6CQkJCQkJCSMKIwlhMCA9IGZhaWxpbmcgYWRkcmVzcwkJCQkJCSMKIwlkMCA9IEZTTFcJCQkJCQkJIwojCWQ2ID0gcHJldmlvdXMgc2ZjL2RmYwkJCQkJCSMKIyBfaXNwX2Nhc19pbnJhbmdlKCk6CQkJCQkJCSMKIwlhMCA9IGluc3RydWN0aW9uIGFkZHJlc3MgdG8gYmUgY2hlY2tlZAkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIyBjb21wYW5kc2V0KCk6CQkJCQkJCQkjCiMJCW5vbmUJCQkJCQkJIwojIF9pc3BfY2FzX3Jlc3RhcnQoKToJCQkJCQkJIwojCWEwID0gZWZmZWN0aXZlIGFkZHJlc3MJCQkJCQkjCiMJZDcgPSB3b3JkIG9yIGxvbmd3b3JkIGZsYWcJCQkJCSMKIyBfaXNwX2Nhc19maW5pc2goKToJCQkJCQkJIwojCWEwID0gZWZmZWN0aXZlIGFkZHJlc3MJCQkJCQkjCiMgX2lzcF9jYXNfdGVybWluYXRlKCk6CQkJCQkJCSMKIwlpbml0aWFsIHJlZ2lzdGVyIHNldCBiZWZvcmUgZW11bGF0aW9uIGV4Y2VwdGlvbgkJCSMKIyBfaXNwX2Nhc19pbnJhbmdlKCk6CQkJCQkJCSMKIwlkMCA9IDAgPT4gaW4gcmFuZ2U7IC0xID0+IG91dCBvZiByYW5nZQkJCQkjCiMJCQkJCQkJCQkjCiMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkJCQkJCQkJCSMKIyBjb21wYW5kc2V0KCk6CQkJCQkJCQkjCiMJRmlyc3QsIGNhbGN1bGF0ZSB0aGUgZWZmZWN0aXZlIGFkZHJlc3MuIFRoZW4sIGRlY29kZSB0aGUJIwojIGluc3RydWN0aW9uIHdvcmQgYW5kIGZldGNoIHRoZSAiY29tcGFyZSIgKERDKSBhbmQgInVwZGF0ZSIgKER1KQkjCiMgb3BlcmFuZHMuCQkJCQkJCQkjCiMJTmV4dCwgY2FsbCB0aGUgZXh0ZXJuYWwgcm91dGluZSBfcmVhbF9sb2NrX3BhZ2UoKSBzbyB0aGF0IHRoZQkjCiMgb3BlcmF0aW5nIHN5c3RlbSBjYW4ga2VlcCB0aGlzIHBhZ2UgZnJvbSBiZWluZyBwYWdlZCBvdXQgd2hpbGUgd2UncmUJIwojIGluIHRoaXMgcm91dGluZS4gSWYgdGhpcyBjYWxsIGZhaWxzLCBqdW1wIHRvIF9jYXNfdGVybWluYXRlMigpLgkjCiMJVGhlIHJvdXRpbmUgdGhlbiBicmFuY2hlcyB0byBfcmVhbF9jYXMoKS4gVGhpcyBleHRlcm5hbCByb3V0aW5lCSMKIyB0aGF0IGFjdHVhbGx5IGVtdWxhdGVzIGNhcyBjYW4gYmUgc3VwcGxpZWQgYnkgdGhlIGV4dGVybmFsIG9zIG9yCSMKIyBtYWRlIHRvIHBvaW50IGRpcmVjdGx5IGJhY2sgaW50byB0aGUgMDYwSVNQIHdoaWNoIGhhcyBhIHJvdXRpbmUgZm9yCSMKIyB0aGlzIHB1cnBvc2UuCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgX2lzcF9jYXNfZmluaXNoKCk6CQkJCQkJCSMKIwlFaXRoZXIgd2F5LCBhZnRlciBlbXVsYXRpb24sIHRoZSBwYWNrYWdlIGlzIHJlLWVudGVyZWQgYXQJIwojIF9pc3BfY2FzX2ZpbmlzaCgpLiBUaGlzIHJvdXRpbmUgcmUtY29tcGFyZXMgdGhlIG9wZXJhbmRzIGluIG9yZGVyIHRvCSMKIyBzZXQgdGhlIGNvbmRpdGlvbiBjb2Rlcy4gRmluYWxseSwgdGhlc2Ugcm91dGluZXMgd2lsbCBjYWxsCQkjCiMgX3JlYWxfdW5sb2NrX3BhZ2UoKSBpbiBvcmRlciB0byB1bmxvY2sgdGhlIHBhZ2VzIHRoYXQgd2VyZSBwcmV2aW91c2x5CSMKIyBsb2NrZWQuCQkJCQkJCQkjCiMJCQkJCQkJCQkjCiMgX2lzcF9jYXNfcmVzdGFydCgpOgkJCQkJCQkjCiMJVGhpcyByb3V0aW5lIGNhbiBiZSBlbnRlcmVkIGZyb20gYW4gYWNjZXNzIGVycm9yIGhhbmRsZXIgd2hlcmUJIwojIHRoZSBlbXVsYXRpb24gc2VxdWVuY2Ugc2hvdWxkIGJlIHJlLXN0YXJ0ZWQgZnJvbSB0aGUgYmVnaW5uaW5nLgkjCiMJCQkJCQkJCQkjCiMgX2lzcF9jYXNfdGVybWluYXRlKCk6CQkJCQkJCSMKIwlUaGlzIHJvdXRpbmUgY2FuIGJlIGVudGVyZWQgZnJvbSBhbiBhY2Nlc3MgZXJyb3IgaGFuZGxlciB3aGVyZQkjCiMgYW4gZW11bGF0aW9uIG9wZXJhbmQgYWNjZXNzIGZhaWxlZCBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd291bGQJIwojIGxpa2UgYW4gYWNjZXNzIGVycm9yIHN0YWNrIGZyYW1lIGNyZWF0ZWQgaW5zdGVhZCBvZiB0aGUgY3VycmVudAkjCiMgdW5pbXBsZW1lbnRlZCBpbnRlZ2VyIGluc3RydWN0aW9uIGZyYW1lLgkJCQkjCiMJQWxzbywgdGhlIHBhY2thZ2UgZW50ZXJzIGhlcmUgaWYgYSBjYWxsIHRvIF9yZWFsX2xvY2tfcGFnZSgpCSMKIyBmYWlscy4JCQkJCQkJCSMKIwkJCQkJCQkJCSMKIyBfaXNwX2Nhc19pbnJhbmdlKCk6CQkJCQkJCSMKIwlDaGVja3MgdG8gc2VlIHdoZXRoZXIgdGhlIGluc3RydWN0aW9uIGFkZHJlc3MgcGFzc2VkIHRvIGl0IGluCSMKIyBhMCBpcyB3aXRoaW4gdGhlIHNvZnR3YXJlIHBhY2thZ2UgY2FzL2NhczIgZW11bGF0aW9uIHJvdXRpbmVzLiBUaGlzCSMKIyBjYW4gYmUgaGVscGZ1bCBmb3IgYW4gb3BlcmF0aW5nIHN5c3RlbSB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBhY2Nlc3MJIwojIGVycm9yIGR1cmluZyBlbXVsYXRpb24gd2FzIGR1ZSB0byBhIGNhcy9jYXMyIGVtdWxhdGlvbiBhY2Nlc3MuCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc2V0IERDLAkJRVhDX1RFTVArMHg4CnNldCBBRERSLAlFWENfVEVNUCsweDQKCglnbG9iYWwJCV9jb21wYW5kc2V0Cl9jb21wYW5kc2V0OgoJYnRzdAkJJjB4MSxFWENfT1BXT1JEKCVhNikJIyB3b3JkIG9yIGxvbmcgb3BlcmF0aW9uPwoJYm5lLmIJCWNvbXBhbmRzZXRsCQkjIGxvbmcKCmNvbXBhbmRzZXR3OgoJbW92cS5sCQkmMHgyLCVkMAkJIyBzaXplID0gMiBieXRlcwoJYnNyLmwJCV9jYWxjX2VhCQkjIGEwID0gY2FsY3VsYXRlZCA8ZWE+Cgltb3YubAkJJWEwLEFERFIoJWE2KQkJIyBzYXZlIDxlYT4gZm9yIHBvc3NpYmxlIHJlc3RhcnQKCXNmCQklZDcJCQkjIGNsZWFyIGQ3IGZvciB3b3JkIHNpemUKCWJyYS5iCQljb21wYW5kc2V0ZmV0Y2gKCmNvbXBhbmRzZXRsOgoJbW92cS5sCQkmMHg0LCVkMAkJIyBzaXplID0gNCBieXRlcwoJYnNyLmwJCV9jYWxjX2VhCQkjIGEwID0gY2FsY3VsYXRlZCA8ZWE+Cgltb3YubAkJJWEwLEFERFIoJWE2KQkJIyBzYXZlIDxlYT4gZm9yIHBvc3NpYmxlIHJlc3RhcnQKCXN0CQklZDcJCQkjIHNldCBkNyBmb3IgbG9uZ3dvcmQgc2l6ZQoKY29tcGFuZHNldGZldGNoOgoJbW92LncJCUVYQ19FWFRXT1JEKCVhNiksJWQwCSMgZmV0Y2ggY2FzIGV4dGVuc2lvbiB3b3JkCgltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBhIGNvcHkKCglsc3IudwkJJjB4NiwlZDAKCWFuZGkudwkJJjB4NywlZDAJCSMgZXh0cmFjdCBEdQoJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMC53KjQpLCVkMiAjIGdldCB1cGRhdGUgb3BlcmFuZAoKCWFuZGkudwkJJjB4NywlZDEJCSMgZXh0cmFjdCBEYwoJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMS53KjQpLCVkNCAjIGdldCBjb21wYXJlIG9wZXJhbmQKCW1vdi53CQklZDEsREMoJWE2KQkJIyBzYXZlIERjCgoJYnRzdAkJJjB4NSxFWENfSVNSKCVhNikJIyB3aGljaCBtb2RlIGZvciBleGNlcHRpb24/CglzbmUJCSVkNgkJCSMgc2V0IG9uIHN1cGVydmlzb3IgbW9kZQoKCW1vdi5sCQklYTAsJWEyCQkJIyBzYXZlIHRlbXBvcmFyaWx5Cgltb3YubAkJJWQ3LCVkMQkJCSMgcGFzcyBzaXplCgltb3YubAkJJWQ2LCVkMAkJCSMgcGFzcyBtb2RlCglic3IubAkJX3JlYWxfbG9ja19wYWdlCQkjIGxvY2sgcGFnZQoJdHN0LmwJCSVkMAkJCSMgZGlkIGVycm9yIG9jY3VyPwoJYm5lLncJCV9jYXNfdGVybWluYXRlMgkJIyB5ZXMsIGNsZWFuIHVwIHRoZSBtZXNzCgltb3YubAkJJWEyLCVhMAkJCSMgcGFzcyBhZGRyIGluIGEwCgoJYnJhLmwJCV9yZWFsX2NhcwoKIyMjIyMjIyMKCWdsb2JhbAkJX2lzcF9jYXNfZmluaXNoCl9pc3BfY2FzX2ZpbmlzaDoKCWJ0c3QJCSYweDEsRVhDX09QV09SRCglYTYpCglibmUuYgkJY2FzX2ZpbmlzaF9sCgojIGp1c3QgZG8gdGhlIGNvbXBhcmUgYWdhaW4gc2luY2UgaXQncyBmYXN0ZXIgdGhhbiBzYXZpbmcgdGhlIGNjb2RlcwojIGZyb20gdGhlIGxvY2tlZCByb3V0aW5lLi4uCmNhc19maW5pc2hfdzoKCW1vdi53CQlFWENfQ0MoJWE2KSwlY2MJCSMgcmVzdG9yZSBjYwoJY21wLncJCSVkMCwlZDQJCQkjIGRvIHdvcmQgY29tcGFyZQoJbW92LncJCSVjYyxFWENfQ0MoJWE2KQkJIyBzYXZlIGNjCgoJdHN0LmIJCSVkMQkJCSMgdXBkYXRlIGNvbXBhcmUgcmVnPwoJYm5lLmIJCWNhc19maW5pc2hfd19kb25lCSMgbm8KCgltb3YudwkJREMoJWE2KSwlZDMKCW1vdi53CQklZDAsKEVYQ19EUkVHUysyLCVhNiwlZDMudyo0KSAjIERjID0gZGVzdGluYXRpb24KCmNhc19maW5pc2hfd19kb25lOgoJbW92LmwJCUFERFIoJWE2KSwlYTAJCSMgcGFzcyBhZGRyCglzZgkJJWQxCQkJIyBwYXNzIHNpemUKCWJ0c3QJCSYweDUsRVhDX0lTUiglYTYpCglzbmUJCSVkMAkJCSMgcGFzcyBtb2RlCglic3IubAkJX3JlYWxfdW5sb2NrX3BhZ2UJIyB1bmxvY2sgcGFnZQoJcnRzCgojIGp1c3QgZG8gdGhlIGNvbXBhcmUgYWdhaW4gc2luY2UgaXQncyBmYXN0ZXIgdGhhbiBzYXZpbmcgdGhlIGNjb2RlcwojIGZyb20gdGhlIGxvY2tlZCByb3V0aW5lLi4uCmNhc19maW5pc2hfbDoKCW1vdi53CQlFWENfQ0MoJWE2KSwlY2MJCSMgcmVzdG9yZSBjYwoJY21wLmwJCSVkMCwlZDQJCQkjIGRvIGxvbmd3b3JkIGNvbXBhcmUKCW1vdi53CQklY2MsRVhDX0NDKCVhNikJCSMgc2F2ZSBjYwoKCXRzdC5iCQklZDEJCQkjIHVwZGF0ZSBjb21wYXJlIHJlZz8KCWJuZS5iCQljYXNfZmluaXNoX2xfZG9uZQkjIG5vCgoJbW92LncJCURDKCVhNiksJWQzCgltb3YubAkJJWQwLChFWENfRFJFR1MsJWE2LCVkMy53KjQpICMgRGMgPSBkZXN0aW5hdGlvbgoKY2FzX2ZpbmlzaF9sX2RvbmU6Cgltb3YubAkJQUREUiglYTYpLCVhMAkJIyBwYXNzIGFkZHIKCXN0CQklZDEJCQkjIHBhc3Mgc2l6ZQoJYnRzdAkJJjB4NSxFWENfSVNSKCVhNikKCXNuZQkJJWQwCQkJIyBwYXNzIG1vZGUKCWJzci5sCQlfcmVhbF91bmxvY2tfcGFnZQkjIHVubG9jayBwYWdlCglydHMKCiMjIyMjIyMjCgoJZ2xvYmFsCQlfaXNwX2Nhc19yZXN0YXJ0Cl9pc3BfY2FzX3Jlc3RhcnQ6Cgltb3YubAkJJWQ2LCVzZmMJCSMgcmVzdG9yZSBwcmV2aW91cyBzZmMKCW1vdi5sCQklZDYsJWRmYwkJIyByZXN0b3JlIHByZXZpb3VzIGRmYwoKCWNtcGkuYgkJRVhDX09QV09SRCsxKCVhNiksJjB4ZmMJIyBjYXMgb3IgY2FzMj8KCWJlcS5sCQljcl9jYXMyCQkJIyBjYXMyCmNyX2NhczoKCW1vdi5sCQlBRERSKCVhNiksJWEwCQkjIGxvYWQgPGVhPgoJYnRzdAkJJjB4MSxFWENfT1BXT1JEKCVhNikJIyB3b3JkIG9yIGxvbmcgb3BlcmF0aW9uPwoJc25lCQklZDcJCQkjIHNldCBkNyBhY2NvcmRpbmdseQoJYnJhLncJCWNvbXBhbmRzZXRmZXRjaAoKIyMjIyMjIyMKCiMgQXQgdGhpcyBzdGFnZSwgaXQgd291bGQgYmUgbmljZSBpZiBkMCBoZWxkIHRoZSBGU0xXLgoJZ2xvYmFsCQlfaXNwX2Nhc190ZXJtaW5hdGUKX2lzcF9jYXNfdGVybWluYXRlOgoJbW92LmwJCSVkNiwlc2ZjCQkjIHJlc3RvcmUgcHJldmlvdXMgc2ZjCgltb3YubAkJJWQ2LCVkZmMJCSMgcmVzdG9yZSBwcmV2aW91cyBkZmMKCglnbG9iYWwJCV9jYXNfdGVybWluYXRlMgpfY2FzX3Rlcm1pbmF0ZTI6Cgltb3YubAkJJWEwLCVhMgkJCSMgY29weSBmYWlsaW5nIGFkZHIgdG8gYTIKCgltb3YubAkJJWQwLC0oJXNwKQoJYnNyLmwJCWlzcF9yZXN0b3JlCQkjIHJlc3RvcmUgQW4gKGlmICgpKyBvciAtKCkpCgltb3YubAkJKCVzcCkrLCVkMAoKCWFkZHEubAkJJjB4NCwlc3AJCSMgcmVtb3ZlIHN1YiByZXR1cm4gYWRkcgoJc3VicS5sCQkmMHg4LCVzcAkJIyBtYWtlIHJvb20gZm9yIGJpZ2dlciBzdGFjawoJc3VicS5sCQkmMHg4LCVhNgkJIyBzaGlmdCBmcmFtZSBwdHIgZG93biwgdG9vCgltb3YubAkJJjI2LCVkMQkJCSMgd2FudCB0byBtb3ZlIDUxIGxvbmd3b3JkcwoJbGVhCQkweDgoJXNwKSwlYTAJCSMgZ2V0IGFkZHJlc3Mgb2Ygb2xkIHN0YWNrCglsZWEJCTB4MCglc3ApLCVhMQkJIyBnZXQgYWRkcmVzcyBvZiBuZXcgc3RhY2sKY2FzX3Rlcm1fY29udDoKCW1vdi5sCQkoJWEwKSssKCVhMSkrCQkjIG1vdmUgYSBsb25nd29yZAoJZGJyYS53CQklZDEsY2FzX3Rlcm1fY29udAkjIGtlZXAgZ29pbmcKCgltb3YudwkJJjB4NDAwOCxFWENfSVZPRkYoJWE2KQkjIHB1dCBuZXcgc3RrIGZtdCwgdm9mZgoJbW92LmwJCSVhMixFWENfSVZPRkYrMHgyKCVhNikJIyBwdXQgZmF1bHRpbmcgYWRkciBvbiBzdGFjawoJbW92LmwJCSVkMCxFWENfSVZPRkYrMHg2KCVhNikJIyBwdXQgRlNMVyBvbiBzdGFjawoJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgzZmZmCSMgcmVzdG9yZSB1c2VyIHJlZ3MKCXVubGsJCSVhNgkJCSMgdW5saW5rIHN0YWNrIGZyYW1lCglicmEubAkJX3JlYWxfYWNjZXNzCgojIyMjIyMjIwoKCWdsb2JhbAkJX2lzcF9jYXNfaW5yYW5nZQpfaXNwX2Nhc19pbnJhbmdlOgoJY2xyLmwJCSVkMAkJCSMgY2xlYXIgcmV0dXJuIHJlc3VsdAoJbGVhCQlfQ0FTSEkoJXBjKSwlYTEJCSMgbG9hZCBlbmQgb2YgQ0FTIGNvcmUgY29kZQoJY21wLmwJCSVhMSwlYTAJCQkjIGlzIFBDIGluIHJhbmdlPwoJYmx0LmIJCWNpbl9ubwkJCSMgbm8KCWxlYQkJX0NBU0xPKCVwYyksJWExCQkjIGxvYWQgYmVnaW4gb2YgQ0FTIGNvcmUgY29kZQoJY21wLmwJCSVhMCwlYTEJCQkjIGlzIFBDIGluIHJhbmdlPwoJYmx0LmIJCWNpbl9ubwkJCSMgbm8KCXJ0cwkJCQkJIyB5ZXM7IHJldHVybiBkMCA9IDAKY2luX25vOgoJbW92LmwJCSYtMHgxLCVkMAkJIyBvdXQgb2YgcmFuZ2U7IHJldHVybiBkMCA9IC0xCglydHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgVGhpcyBpcyB0aGUgc3RhcnQgb2YgdGhlIGNhcyBhbmQgY2FzMiAiY29yZSIgZW11bGF0aW9uIGNvZGUuCSMKIyBUaGlzIGlzIHRoZSBzZWN0aW9uIHRoYXQgbWF5IG5lZWQgdG8gYmUgcmVwbGFjZWQgYnkgdGhlIGhvc3QJIwojIE9TIGlmIGl0IGlzIHRvbyBvcGVyYXRpbmcgc3lzdGVtLXNwZWNpZmljLgkJCSMKIyBQbGVhc2UgcmVmZXIgdG8gdGhlIHBhY2thZ2UgZG9jdW1lbnRhdGlvbiB0byBzZWUgaG93IHRvCSMKIyAicmVwbGFjZSIgdGhpcyBzZWN0aW9uLCBpZiBuZWNlc3NhcnkuCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgICAgICAgIyMjIyMjICAgICAgIyMgICAgICAjIyMjIyMgICAgICMjIyMKIyAgICAgICAjCSAgICMgICMgICAgICMgICAgICAgICAjICAgICMKIwkjCSAgIyMjIyMjICAgICMjIyMjIyAgICAgICAgIwojCSMJICAjICAgICMgICAgICAgICAjICAgICAgIwojICAgICAgICMjIyMjIyAgICAjICAgICMgICAgIyMjIyMjICAgICMjIyMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2lzcF9jYXMyKCk6ICJjb3JlIiBlbXVsYXRpb24gY29kZSBmb3IgdGhlIGNhczIgaW5zdHJ1Y3Rpb24JIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2lzcF9jYXMyX2ZpbmlzaCgpIC0gb25seSBleGl0IHBvaW50IGZvciB0aGlzIGVtdWxhdGlvbiBjb2RlOwkjCiMJCQkgICAgIGRvIGNsZWFuLXVwOyBjYWxjdWxhdGUgY2NvZGVzOyBzdG9yZQkjCiMJCQkgICAgIENvbXBhcmUgT3BzIGlmIGFwcHJvcHJpYXRlLgkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJKnNlZSBjaGFydCBiZWxvdyoJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkqc2VlIGNoYXJ0IGJlbG93KgkJCQkJCSMKIwkJCQkJCQkJCSMKIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwojCSgxKSBNYWtlIHNldmVyYWwgY29waWVzIG9mIHRoZSBlZmZlY3RpdmUgYWRkcmVzcy4JCSMKIwkoMikgU2F2ZSBjdXJyZW50IFNSOyBUaGVuIG1hc2sgb2ZmIGFsbCBtYXNrYWJsZSBpbnRlcnJ1cHRzLgkjCiMJKDMpIFNhdmUgY3VycmVudCBTRkMvREZDIChBU1NVTUVEIFRPIEJFIEVRVUFMISEhKTsgVGhlbiBzZXQJIwojCSAgICBhY2NvcmRpbmcgdG8gd2hldGhlciBleGNlcHRpb24gb2NjdXJyZWQgaW4gdXNlciBvcgkJIwojCSAgICBzdXBlcnZpc29yIG1vZGUuCQkJCQkJIwojCSg0KSBVc2UgInBscGF3IiBpbnN0cnVjdGlvbiB0byBwcmUtbG9hZCBBVEMgd2l0aCBlZmZlY3RpdmUJIwojCSAgICBhZGRyZXNzIHBhZ2VzKHMpLiBUSElTIFNIT1VMRCBOT1QgRkFVTFQhISEgVGhlIHJlbGV2YW50CSMKIwkgICAgcGFnZShzKSBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gbWFkZSByZXNpZGVudCBwcmlvciB0bwkjCiMJICAgIGVudGVyaW5nIHRoaXMgcm91dGluZS4JCQkJCSMKIwkoNSkgUHVzaCB0aGUgb3BlcmFuZCBsaW5lcyBmcm9tIHRoZSBjYWNoZSB3LyAiY3B1c2hsIi4JCSMKIwkgICAgSW4gdGhlIDY4MDQwLCB0aGlzIHdhcyBkb25lIHdpdGhpbiB0aGUgbG9ja2VkIHJlZ2lvbi4gSW4JIwojCSAgICB0aGUgNjgwNjAsIGl0IGlzIGRvbmUgb3V0c2lkZSBvZiB0aGUgbG9ja2VkIHJlZ2lvbi4JCSMKIwkoNikgVXNlICJwbHBhciIgaW5zdHJ1Y3Rpb24gdG8gZG8gYSByZS1sb2FkIG9mIEFUQyBlbnRyaWVzIGZvcgkjCiMJICAgIEFERFIxIHNpbmNlIEFERFIyIGVudHJpZXMgbWF5IGhhdmUgcHVzaGVkIEFERFIxIG91dCBvZiB0aGUJIwojCSAgICBBVEMuCQkJCQkJCSMKIwkoNykgUHJlLWZldGNoIHRoZSBjb3JlIGVtdWxhdGlvbiBpbnN0cnVjdGlvbnMgYnkgZXhlY3V0aW5nCSMKIwkgICAgb25lIGJyYW5jaCB3aXRoaW4gZWFjaCBwaHlzaWNhbCBsaW5lICgxNiBieXRlcykgb2YgdGhlIGNvZGUJIwojCSAgICBiZWZvcmUgYWN0dWFsbHkgZXhlY3V0aW5nIHRoZSBjb2RlLgkJCQkjCiMJKDgpIExvYWQgdGhlIEJVU0NSIHcvIHRoZSBidXMgbG9jayB2YWx1ZS4JCQkjCiMJKDkpIEZldGNoIHRoZSBzb3VyY2Ugb3BlcmFuZHMgdXNpbmcgIm1vdmVzIi4JCQkjCiMJKDEwKURvIHRoZSBjb21wYXJlcy4gSWYgYm90aCBlcXVhbCwgZ28gdG8gc3RlcCAoMTMpLgkJIwojCSgxMSlVbmVxdWFsLiBObyB1cGRhdGUgb2NjdXJzLiBCdXQsIHdlIGRvIHdyaXRlIHRoZSBEU1QxIG9wCSMKIwkgICAgYmFjayB0byBpdHNlbGYgKGFzIHcvIHRoZSAnMDQwKSBzbyB3ZSBjYW4gZ3JhY2VmdWxseSB1bmxvY2sJIwojCSAgICB0aGUgYnVzIChhbmQgYXNzZXJ0IExPQ0tFKikgdXNpbmcgQlVTQ1IgYW5kIHRoZSBmaW5hbCBtb3ZlLgkjCiMJKDEyKUV4aXQuCQkJCQkJCSMKIwkoMTMpV3JpdGUgdXBkYXRlIG9wZXJhbmQgdG8gdGhlIERTVCBsb2NhdGlvbnMuIFVzZSBCVVNDUiB0bwkjCiMJICAgIGFzc2VydCBMT0NLRSogZm9yIHRoZSBmaW5hbCB3cml0ZSBvcGVyYXRpb24uCQkjCiMJKDE0KUV4aXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIwlUaGUgYWxnb3JpdGhtIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIHNsaWdodGx5IGRpZmZlcmVudGx5CSMKIyBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIG9wZXJhdGlvbiBhbmQgdGhlIG1pc2FsaWdubWVudCBvZiB0aGUJIwojIG9wZXJhbmRzLiBBIG1pc2FsaWduZWQgb3BlcmFuZCBtdXN0IGJlIHdyaXR0ZW4gaW4gYWxpZ25lZCBjaHVua3Mgb3IJIwojIGVsc2UgdGhlIEJVU0NSIHJlZ2lzdGVyIGNvbnRyb2wgZ2V0cyBjb25mdXNlZC4JCQkjCiMJCQkJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgVEhJUyBJUyBUSEUgU1RBVEUgT0YgVEhFIElOVEVHRVIgUkVHSVNURVIgRklMRSBVUE9OCQkjCiMgRU5URVJJTkcgX2lzcF9jYXMyKCkuCQkJCQkJIwojCQkJCQkJCQkjCiMgRDAgPSB4eHh4eHh4eAkJCQkJCQkjCiMgRDEgPSB4eHh4eHh4eAkJCQkJCQkjCiMgRDIgPSBjbXAgb3BlcmFuZCAxCQkJCQkJIwojIEQzID0gY21wIG9wZXJhbmQgMgkJCQkJCSMKIyBENCA9IHVwZGF0ZSBvcGVyIDEJCQkJCQkjCiMgRDUgPSB1cGRhdGUgb3BlciAyCQkJCQkJIwojIEQ2ID0gJ3h4eHh4eGZmIGlmIHN1cGVydmlzb3IgbW9kZTsgJ3h4eHh4eDAwIGlmIHVzZXIgbW9kZQkjCiMgRDcgPSAneHh4eHh4ZmYgaWYgbG9uZ3dvcmQgb3BlcmF0aW9uOyAneHh4eHh4MDAgaWYgd29yZAkjCiMgQTAgPSBBRERSMQkJCQkJCQkjCiMgQTEgPSBBRERSMgkJCQkJCQkjCiMgQTIgPSB4eHh4eHh4eAkJCQkJCQkjCiMgQTMgPSB4eHh4eHh4eAkJCQkJCQkjCiMgQTQgPSB4eHh4eHh4eAkJCQkJCQkjCiMgQTUgPSB4eHh4eHh4eAkJCQkJCQkjCiMgQTYgPSBmcmFtZSBwb2ludGVyCQkJCQkJIwojIEE3ID0gc3RhY2sgcG9pbnRlcgkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMJYWxpZ24JCTB4MTAwMAojIGJlZ2lubmluZyBsYWJlbCB1c2VkIGJ5IF9pc3BfY2FzX2lucmFuZ2UoKQoJZ2xvYmFsCQlfQ0FTTE8KX0NBU0xPOgoKCWdsb2JhbAkJX2lzcF9jYXMyCl9pc3BfY2FzMjoKCXRzdC5iCQklZDYJCQkjIHVzZXIgb3Igc3VwZXJ2aXNvciBtb2RlPwoJYm5lLmIJCWNhczJfc3VwZXJ2aXNvcgkJIyBzdXBlcnZpc29yCmNhczJfdXNlcjoKCW1vdnEubAkJJjB4MSwlZDAJCSMgbG9hZCB1c2VyIGRhdGEgZmMKCWJyYS5iCQljYXMyX2NvbnQKY2FzMl9zdXBlcnZpc29yOgoJbW92cS5sCQkmMHg1LCVkMAkJIyBsb2FkIHN1cGVydmlzb3IgZGF0YSBmYwpjYXMyX2NvbnQ6Cgl0c3QuYgkJJWQ3CQkJIyB3b3JkIG9yIGxvbmd3b3JkPwoJYmVxLncJCWNhczJ3CQkJIyB3b3JkCgojIyMjCmNhczJsOgoJbW92LmwJCSVhMCwlYTIJCQkjIGNvcHkgQUREUjEKCW1vdi5sCQklYTEsJWEzCQkJIyBjb3B5IEFERFIyCgltb3YubAkJJWEwLCVhNAkJCSMgY29weSBBRERSMQoJbW92LmwJCSVhMSwlYTUJCQkjIGNvcHkgQUREUjIKCglhZGRxLmwJCSYweDMsJWE0CQkjIEFERFIxKzMKCWFkZHEubAkJJjB4MywlYTUJCSMgQUREUjIrMwoJbW92LmwJCSVhMiwlZDEJCQkjIEFERFIxCgojIG1hc2sgaW50ZXJydXB0cyBsZXZlbHMgMC02LiBzYXZlIG9sZCBtYXNrIHZhbHVlLgoJbW92LncJCSVzciwlZDcJCQkjIHNhdmUgY3VycmVudCBTUgoJb3JpLncJCSYweDA3MDAsJXNyCQkjIGluaGliaXQgaW50ZXJydXB0cwoKIyBsb2FkIHRoZSBTRkMgYW5kIERGQyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBtb2RlLgoJbW92YwkJJXNmYywlZDYJCSMgc2F2ZSBvbGQgU0ZDL0RGQwoJbW92YwkJJWQwLCVzZmMJCSMgc3RvcmUgbmV3IFNGQwoJbW92YwkJJWQwLCVkZmMJCSMgc3RvcmUgbmV3IERGQwoKIyBwcmUtbG9hZCB0aGUgb3BlcmFuZCBBVEMuIG5vIHBhZ2UgZmF1bHRzIHNob3VsZCBvY2N1ciBoZXJlIGJlY2F1c2UKIyBfcmVhbF9sb2NrX3BhZ2UoKSBzaG91bGQgaGF2ZSB0YWtlbiBjYXJlIG9mIHRoaXMuCglwbHBhdwkJKCVhMikJCQkjIGxvYWQgYXRjIGZvciBBRERSMQoJcGxwYXcJCSglYTQpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjErMwoJcGxwYXcJCSglYTMpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjIKCXBscGF3CQkoJWE1KQkJCSMgbG9hZCBhdGMgZm9yIEFERFIyKzMKCiMgcHVzaCB0aGUgb3BlcmFuZCBsaW5lcyBmcm9tIHRoZSBjYWNoZSBpZiB0aGV5IGV4aXN0LgoJY3B1c2hsCQklZGMsKCVhMikJCSMgcHVzaCBsaW5lIGZvciBBRERSMQoJY3B1c2hsCQklZGMsKCVhNCkJCSMgcHVzaCBsaW5lIGZvciBBRERSMSszCgljcHVzaGwJCSVkYywoJWEzKQkJIyBwdXNoIGxpbmUgZm9yIEFERFIyCgljcHVzaGwJCSVkYywoJWE1KQkJIyBwdXNoIGxpbmUgZm9yIEFERFIyKzIKCgltb3YubAkJJWQxLCVhMgkJCSMgQUREUjEKCWFkZHEubAkJJjB4MywlZDEKCW1vdi5sCQklZDEsJWE0CQkJIyBBRERSMSszCiMgaWYgQUREUjEgd2FzIEFUQyByZXNpZGVudCBiZWZvcmUgdGhlIGFib3ZlICJwbHBhdyIgYW5kIHdhcyBleGVjdXRlZAojIGFuZCBpdCB3YXMgdGhlIG5leHQgZW50cnkgc2NoZWR1bGVkIGZvciByZXBsYWNlbWVudCBhbmQgQUREUjIKIyBzaGFyZXMgdGhlIHNhbWUgc2V0LCB0aGVuIHRoZSAicGxwYXciIGZvciBBRERSMiBjYW4gcHVzaCB0aGUgQUREUjEKIyBlbnRyaWVzIGZyb20gdGhlIEFUQy4gc28sIHdlIGRvIGEgc2Vjb25kIHNldCBvZiAicGxwYSJzLgoJcGxwYXIJCSglYTIpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjEKCXBscGFyCQkoJWE0KQkJCSMgbG9hZCBhdGMgZm9yIEFERFIxKzMKCiMgbG9hZCB0aGUgQlVTQ1IgdmFsdWVzLgoJbW92LmwJCSYweDgwMDAwMDAwLCVhMgkJIyBhc3NlcnQgTE9DSyogYnVzY3IgdmFsdWUKCW1vdi5sCQkmMHhhMDAwMDAwMCwlYTMJCSMgYXNzZXJ0IExPQ0tFKiBidXNjciB2YWx1ZQoJbW92LmwJCSYweDAwMDAwMDAwLCVhNAkJIyBidXNjciB1bmxvY2sgdmFsdWUKCiMgdGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIG1pcy1hbGlnbmVkIGNhc2VzIGZvciBsb25nd29yZCBjYXMuIHRoZXkKIyBhcmUgc2VwYXJhdGVkIGJlY2F1c2UgdGhlIGZpbmFsIHdyaXRlIHdoaWNoIGFzc2VydHMgTE9DS0UqIG11c3QKIyBiZSBhbGlnbmVkLgoJbW92LmwJCSVhMCwlZDAJCQkjIGlzIEFERFIxIG1pc2FsaWduZWQ/CglhbmRpLmIJCSYweDMsJWQwCgliZXEuYgkJQ0FTMkxfRU5URVIJCSMgbm8KCWNtcGkuYgkJJWQwLCYweDIKCWJlcS53CQlDQVMyTDJfRU5URVIJCSMgeWVzOyB3b3JkIG1pc2FsaWduZWQKCWJyYS53CQlDQVMyTDNfRU5URVIJCSMgeWVzOyBieXRlIG1pc2FsaWduZWQKCiMKIyBEMCA9IGRzdCBvcGVyYW5kIDEgPC0KIyBEMSA9IGRzdCBvcGVyYW5kIDIgPC0KIyBEMiA9IGNtcCBvcGVyYW5kIDEKIyBEMyA9IGNtcCBvcGVyYW5kIDIKIyBENCA9IHVwZGF0ZSBvcGVyIDEKIyBENSA9IHVwZGF0ZSBvcGVyIDIKIyBENiA9IG9sZCBTRkMvREZDCiMgRDcgPSBvbGQgU1IKIyBBMCA9IEFERFIxCiMgQTEgPSBBRERSMgojIEEyID0gYnVzIExPQ0sqICB2YWx1ZQojIEEzID0gYnVzIExPQ0tFKiB2YWx1ZQojIEE0ID0gYnVzIHVubG9jayB2YWx1ZQojIEE1ID0geHh4eHh4eHgKIwoJYWxpZ24JCTB4MTAKQ0FTMkxfU1RBUlQ6Cgltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLKgoJbW92cy5sCQkoJWExKSwlZDEJCSMgZmV0Y2ggRGVzdDJbMzE6MF0KCW1vdnMubAkJKCVhMCksJWQwCQkjIGZldGNoIERlc3QxWzMxOjBdCglicmEuYgkJQ0FTMkxfQ09OVApDQVMyTF9FTlRFUjoKCWJyYS5iCQl+KzE2CgpDQVMyTF9DT05UOgoJY21wLmwJCSVkMCwlZDIJCQkjIERlc3QxIC0gQ29tcGFyZTEKCWJuZS5iCQlDQVMyTF9OT1VQREFURQoJY21wLmwJCSVkMSwlZDMJCQkjIERlc3QyIC0gQ29tcGFyZTIKCWJuZS5iCQlDQVMyTF9OT1VQREFURQoJbW92cy5sCQklZDUsKCVhMSkJCSMgVXBkYXRlMlszMTowXSAtPiBERVNUMgoJYnJhLmIJCUNBUzJMX1VQREFURQoJYnJhLmIJCX4rMTYKCkNBUzJMX1VQREFURToKCW1vdmMJCSVhMywlYnVzY3IJCSMgYXNzZXJ0IExPQ0tFKgoJbW92cy5sCQklZDQsKCVhMCkJCSMgVXBkYXRlMVszMTowXSAtPiBERVNUMQoJbW92YwkJJWE0LCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cwoJYnJhLmIJCWNhczJsX3VwZGF0ZV9kb25lCglicmEuYgkJfisxNgoKQ0FTMkxfTk9VUERBVEU6Cgltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKCW1vdnMubAkJJWQwLCglYTApCQkjIERlc3QxWzMxOjBdIC0+IERFU1QxCgltb3ZjCQklYTQsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCglicmEuYgkJY2FzMmxfbm91cGRhdGVfZG9uZQoJYnJhLmIJCX4rMTYKCkNBUzJMX0ZJTExFUjoKCW5vcAoJbm9wCglub3AKCW5vcAoJbm9wCglub3AKCW5vcAoJYnJhLmIJCUNBUzJMX1NUQVJUCgojIyMjCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFRISVMgTVVTVCBCRSBUSEUgU1RBVEUgT0YgVEhFIElOVEVHRVIgUkVHSVNURVIgRklMRSBVUE9OCSMKIyBFTlRFUklORyBfaXNwX2NhczIoKS4JCQkJCQkjCiMJCQkJCQkJCSMKIyBEMCA9IGRlc3RpbmF0aW9uWzMxOjBdIG9wZXJhbmQgMQkJCQkjCiMgRDEgPSBkZXN0aW5hdGlvblszMTowXSBvcGVyYW5kIDIJCQkJIwojIEQyID0gY21wWzMxOjBdIG9wZXJhbmQgMQkJCQkJIwojIEQzID0gY21wWzMxOjBdIG9wZXJhbmQgMgkJCQkJIwojIEQ0ID0gJ3h4eHh4eDExIC0+IG5vIHJlZyB1cGRhdGU7ICd4eHh4eHgwMCAtPiB1cGRhdGUgcmVxdWlyZWQJIwojIEQ1ID0geHh4eHh4eHgJCQkJCQkJIwojIEQ2ID0geHh4eHh4eHgJCQkJCQkJIwojIEQ3ID0geHh4eHh4eHgJCQkJCQkJIwojIEEwID0geHh4eHh4eHgJCQkJCQkJIwojIEExID0geHh4eHh4eHgJCQkJCQkJIwojIEEyID0geHh4eHh4eHgJCQkJCQkJIwojIEEzID0geHh4eHh4eHgJCQkJCQkJIwojIEE0ID0geHh4eHh4eHgJCQkJCQkJIwojIEE1ID0geHh4eHh4eHgJCQkJCQkJIwojIEE2ID0gZnJhbWUgcG9pbnRlcgkJCQkJCSMKIyBBNyA9IHN0YWNrIHBvaW50ZXIJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpjYXMybF9ub3VwZGF0ZV9kb25lOgoKIyByZXN0b3JlIHByZXZpb3VzIFNGQy9ERkMgdmFsdWUuCgltb3ZjCQklZDYsJXNmYwkJIyByZXN0b3JlIG9sZCBTRkMKCW1vdmMJCSVkNiwlZGZjCQkjIHJlc3RvcmUgb2xkIERGQwoKIyByZXN0b3JlIHByZXZpb3VzIGludGVycnVwdCBtYXNrIGxldmVsLgoJbW92LncJCSVkNywlc3IJCQkjIHJlc3RvcmUgb2xkIFNSCgoJc2YJCSVkNAkJCSMgaW5kaWNhdGUgbm8gdXBkYXRlIHdhcyBkb25lCglicmEubAkJX2lzcF9jYXMyX2ZpbmlzaAoKY2FzMmxfdXBkYXRlX2RvbmU6CgojIHJlc3RvcmUgcHJldmlvdXMgU0ZDL0RGQyB2YWx1ZS4KCW1vdmMJCSVkNiwlc2ZjCQkjIHJlc3RvcmUgb2xkIFNGQwoJbW92YwkJJWQ2LCVkZmMJCSMgcmVzdG9yZSBvbGQgREZDCgojIHJlc3RvcmUgcHJldmlvdXMgaW50ZXJydXB0IG1hc2sgbGV2ZWwuCgltb3YudwkJJWQ3LCVzcgkJCSMgcmVzdG9yZSBvbGQgU1IKCglzdAkJJWQ0CQkJIyBpbmRpY2F0ZSB1cGRhdGUgd2FzIGRvbmUKCWJyYS5sCQlfaXNwX2NhczJfZmluaXNoCiMjIyMKCglhbGlnbgkJMHgxMApDQVMyTDJfU1RBUlQ6Cgltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLKgoJbW92cy5sCQkoJWExKSwlZDEJCSMgZmV0Y2ggRGVzdDJbMzE6MF0KCW1vdnMubAkJKCVhMCksJWQwCQkjIGZldGNoIERlc3QxWzMxOjBdCglicmEuYgkJQ0FTMkwyX0NPTlQKQ0FTMkwyX0VOVEVSOgoJYnJhLmIJCX4rMTYKCkNBUzJMMl9DT05UOgoJY21wLmwJCSVkMCwlZDIJCQkjIERlc3QxIC0gQ29tcGFyZTEKCWJuZS5iCQlDQVMyTDJfTk9VUERBVEUKCWNtcC5sCQklZDEsJWQzCQkJIyBEZXN0MiAtIENvbXBhcmUyCglibmUuYgkJQ0FTMkwyX05PVVBEQVRFCgltb3ZzLmwJCSVkNSwoJWExKQkJIyBVcGRhdGUyWzMxOjBdIC0+IERlc3QyCglicmEuYgkJQ0FTMkwyX1VQREFURQoJYnJhLmIJCX4rMTYKCkNBUzJMMl9VUERBVEU6Cglzd2FwCQklZDQJCQkjIGdldCBVcGRhdGUxWzMxOjE2XQoJbW92cy53CQklZDQsKCVhMCkrCQkjIFVwZGF0ZTFbMzE6MTZdIC0+IERFU1QxCgltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKCXN3YXAJCSVkNAkJCSMgZ2V0IFVwZGF0ZTFbMTU6MF0KCWJyYS5iCQlDQVMyTDJfVVBEQVRFMgoJYnJhLmIJCX4rMTYKCkNBUzJMMl9VUERBVEUyOgoJbW92cy53CQklZDQsKCVhMCkJCSMgVXBkYXRlMVsxNTowXSAtPiBERVNUMSsweDIKCW1vdmMJCSVhNCwlYnVzY3IJCSMgdW5sb2NrIHRoZSBidXMKCWJyYS53CQljYXMybF91cGRhdGVfZG9uZQoJbm9wCglicmEuYgkJfisxNgoKQ0FTMkwyX05PVVBEQVRFOgoJc3dhcAkJJWQwCQkJIyBnZXQgRGVzdDFbMzE6MTZdCgltb3ZzLncJCSVkMCwoJWEwKSsJCSMgRGVzdDFbMzE6MTZdIC0+IERFU1QxCgltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKCXN3YXAJCSVkMAkJCSMgZ2V0IERlc3QxWzE1OjBdCglicmEuYgkJQ0FTMkwyX05PVVBEQVRFMgoJYnJhLmIJCX4rMTYKCkNBUzJMMl9OT1VQREFURTI6Cgltb3ZzLncJCSVkMCwoJWEwKQkJIyBEZXN0MVsxNTowXSAtPiBERVNUMSsweDIKCW1vdmMJCSVhNCwlYnVzY3IJCSMgdW5sb2NrIHRoZSBidXMKCWJyYS53CQljYXMybF9ub3VwZGF0ZV9kb25lCglub3AKCWJyYS5iCQl+KzE2CgpDQVMyTDJfRklMTEVSOgoJbm9wCglub3AKCW5vcAoJbm9wCglub3AKCW5vcAoJbm9wCglicmEuYgkJQ0FTMkwyX1NUQVJUCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglhbGlnbgkJMHgxMApDQVMyTDNfU1RBUlQ6Cgltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLKgoJbW92cy5sCQkoJWExKSwlZDEJCSMgZmV0Y2ggRGVzdDJbMzE6MF0KCW1vdnMubAkJKCVhMCksJWQwCQkjIGZldGNoIERlc3QxWzMxOjBdCglicmEuYgkJQ0FTMkwzX0NPTlQKQ0FTMkwzX0VOVEVSOgoJYnJhLmIJCX4rMTYKCkNBUzJMM19DT05UOgoJY21wLmwJCSVkMCwlZDIJCQkjIERlc3QxIC0gQ29tcGFyZTEKCWJuZS5iCQlDQVMyTDNfTk9VUERBVEUKCWNtcC5sCQklZDEsJWQzCQkJIyBEZXN0MiAtIENvbXBhcmUyCglibmUuYgkJQ0FTMkwzX05PVVBEQVRFCgltb3ZzLmwJCSVkNSwoJWExKQkJIyBVcGRhdGUyWzMxOjBdIC0+IERFU1QyCglicmEuYgkJQ0FTMkwzX1VQREFURQoJYnJhLmIJCX4rMTYKCkNBUzJMM19VUERBVEU6Cglyb2wubAkJJjB4OCwlZDQJCSMgZ2V0IFVwZGF0ZTFbMzE6MjRdCgltb3ZzLmIJCSVkNCwoJWEwKSsJCSMgVXBkYXRlMVszMToyNF0gLT4gREVTVDEKCXN3YXAJCSVkNAkJCSMgZ2V0IFVwZGF0ZTFbMjM6OF0KCW1vdnMudwkJJWQ0LCglYTApKwkJIyBVcGRhdGUxWzIzOjhdIC0+IERFU1QxKzB4MQoJYnJhLmIJCUNBUzJMM19VUERBVEUyCglicmEuYgkJfisxNgoKQ0FTMkwzX1VQREFURTI6Cglyb2wubAkJJjB4OCwlZDQJCSMgZ2V0IFVwZGF0ZTFbNzowXQoJbW92YwkJJWEzLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCgltb3ZzLmIJCSVkNCwoJWEwKQkJIyBVcGRhdGUxWzc6MF0gLT4gREVTVDErMHgzCglicmEuYgkJQ0FTMkwzX1VQREFURTMKCW5vcAoJYnJhLmIJCX4rMTYKCkNBUzJMM19VUERBVEUzOgoJbW92YwkJJWE0LCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cwoJYnJhLncJCWNhczJsX3VwZGF0ZV9kb25lCglub3AKCW5vcAoJbm9wCglicmEuYgkJfisxNgoKQ0FTMkwzX05PVVBEQVRFOgoJcm9sLmwJCSYweDgsJWQwCQkjIGdldCBEZXN0MVszMToyNF0KCW1vdnMuYgkJJWQwLCglYTApKwkJIyBEZXN0MVszMToyNF0gLT4gREVTVDEKCXN3YXAJCSVkMAkJCSMgZ2V0IERlc3QxWzIzOjhdCgltb3ZzLncJCSVkMCwoJWEwKSsJCSMgRGVzdDFbMjM6OF0gLT4gREVTVDErMHgxCglicmEuYgkJQ0FTMkwzX05PVVBEQVRFMgoJYnJhLmIJCX4rMTYKCkNBUzJMM19OT1VQREFURTI6Cglyb2wubAkJJjB4OCwlZDAJCSMgZ2V0IERlc3QxWzc6MF0KCW1vdmMJCSVhMywlYnVzY3IJCSMgYXNzZXJ0IExPQ0tFKgoJbW92cy5iCQklZDAsKCVhMCkJCSMgVXBkYXRlMVs3OjBdIC0+IERFU1QxKzB4MwoJYnJhLmIJCUNBUzJMM19OT1VQREFURTMKCW5vcAoJYnJhLmIJCX4rMTYKCkNBUzJMM19OT1VQREFURTM6Cgltb3ZjCQklYTQsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCglicmEudwkJY2FzMmxfbm91cGRhdGVfZG9uZQoJbm9wCglub3AKCW5vcAoJYnJhLmIJCX4rMTQKCkNBUzJMM19GSUxMRVI6Cglub3AKCW5vcAoJbm9wCglub3AKCW5vcAoJbm9wCglicmEudwkJQ0FTMkwzX1NUQVJUCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmNhczJ3OgoJbW92LmwJCSVhMCwlYTIJCQkjIGNvcHkgQUREUjEKCW1vdi5sCQklYTEsJWEzCQkJIyBjb3B5IEFERFIyCgltb3YubAkJJWEwLCVhNAkJCSMgY29weSBBRERSMQoJbW92LmwJCSVhMSwlYTUJCQkjIGNvcHkgQUREUjIKCglhZGRxLmwJCSYweDEsJWE0CQkjIEFERFIxKzEKCWFkZHEubAkJJjB4MSwlYTUJCSMgQUREUjIrMQoJbW92LmwJCSVhMiwlZDEJCQkjIEFERFIxCgojIG1hc2sgaW50ZXJydXB0IGxldmVscyAwLTYuIHNhdmUgb2xkIG1hc2sgdmFsdWUuCgltb3YudwkJJXNyLCVkNwkJCSMgc2F2ZSBjdXJyZW50IFNSCglvcmkudwkJJjB4MDcwMCwlc3IJCSMgaW5oaWJpdCBpbnRlcnJ1cHRzCgojIGxvYWQgdGhlIFNGQyBhbmQgREZDIHdpdGggdGhlIGFwcHJvcHJpYXRlIG1vZGUuCgltb3ZjCQklc2ZjLCVkNgkJIyBzYXZlIG9sZCBTRkMvREZDCgltb3ZjCQklZDAsJXNmYwkJIyBzdG9yZSBuZXcgU0ZDCgltb3ZjCQklZDAsJWRmYwkJIyBzdG9yZSBuZXcgREZDCgojIHByZS1sb2FkIHRoZSBvcGVyYW5kIEFUQy4gbm8gcGFnZSBmYXVsdHMgc2hvdWxkIG9jY3VyIGJlY2F1c2UKIyBfcmVhbF9sb2NrX3BhZ2UoKSBzaG91bGQgaGF2ZSB0YWtlbiBjYXJlIG9mIHRoaXMuCglwbHBhdwkJKCVhMikJCQkjIGxvYWQgYXRjIGZvciBBRERSMQoJcGxwYXcJCSglYTQpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjErMQoJcGxwYXcJCSglYTMpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjIKCXBscGF3CQkoJWE1KQkJCSMgbG9hZCBhdGMgZm9yIEFERFIyKzEKCiMgcHVzaCB0aGUgb3BlcmFuZCBjYWNoZSBsaW5lcyBmcm9tIHRoZSBjYWNoZSBpZiB0aGV5IGV4aXN0LgoJY3B1c2hsCQklZGMsKCVhMikJCSMgcHVzaCBsaW5lIGZvciBBRERSMQoJY3B1c2hsCQklZGMsKCVhNCkJCSMgcHVzaCBsaW5lIGZvciBBRERSMSsxCgljcHVzaGwJCSVkYywoJWEzKQkJIyBwdXNoIGxpbmUgZm9yIEFERFIyCgljcHVzaGwJCSVkYywoJWE1KQkJIyBwdXNoIGxpbmUgZm9yIEFERFIyKzEKCgltb3YubAkJJWQxLCVhMgkJCSMgQUREUjEKCWFkZHEubAkJJjB4MywlZDEKCW1vdi5sCQklZDEsJWE0CQkJIyBBRERSMSszCiMgaWYgQUREUjEgd2FzIEFUQyByZXNpZGVudCBiZWZvcmUgdGhlIGFib3ZlICJwbHBhdyIgYW5kIHdhcyBleGVjdXRlZAojIGFuZCBpdCB3YXMgdGhlIG5leHQgZW50cnkgc2NoZWR1bGVkIGZvciByZXBsYWNlbWVudCBhbmQgQUREUjIKIyBzaGFyZXMgdGhlIHNhbWUgc2V0LCB0aGVuIHRoZSAicGxwYXciIGZvciBBRERSMiBjYW4gcHVzaCB0aGUgQUREUjEKIyBlbnRyaWVzIGZyb20gdGhlIEFUQy4gc28sIHdlIGRvIGEgc2Vjb25kIHNldCBvZiAicGxwYSJzLgoJcGxwYXIJCSglYTIpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjEKCXBscGFyCQkoJWE0KQkJCSMgbG9hZCBhdGMgZm9yIEFERFIxKzMKCiMgbG9hZCB0aGUgQlVTQ1IgdmFsdWVzLgoJbW92LmwJCSYweDgwMDAwMDAwLCVhMgkJIyBhc3NlcnQgTE9DSyogYnVzY3IgdmFsdWUKCW1vdi5sCQkmMHhhMDAwMDAwMCwlYTMJCSMgYXNzZXJ0IExPQ0tFKiBidXNjciB2YWx1ZQoJbW92LmwJCSYweDAwMDAwMDAwLCVhNAkJIyBidXNjciB1bmxvY2sgdmFsdWUKCiMgdGhlcmUgYXJlIHR3byBwb3NzaWJsZSBtaXMtYWxpZ25lZCBjYXNlcyBmb3Igd29yZCBjYXMuIHRoZXkKIyBhcmUgc2VwYXJhdGVkIGJlY2F1c2UgdGhlIGZpbmFsIHdyaXRlIHdoaWNoIGFzc2VydHMgTE9DS0UqIG11c3QKIyBiZSBhbGlnbmVkLgoJbW92LmwJCSVhMCwlZDAJCQkjIGlzIEFERFIxIG1pc2FsaWduZWQ/CglidHN0CQkmMHgwLCVkMAoJYm5lLncJCUNBUzJXMl9FTlRFUgkJIyB5ZXMKCWJyYS5iCQlDQVMyV19FTlRFUgkJIyBubwoKIwojIEQwID0gZHN0IG9wZXJhbmQgMSA8LQojIEQxID0gZHN0IG9wZXJhbmQgMiA8LQojIEQyID0gY21wIG9wZXJhbmQgMQojIEQzID0gY21wIG9wZXJhbmQgMgojIEQ0ID0gdXBkYXRlIG9wZXIgMQojIEQ1ID0gdXBkYXRlIG9wZXIgMgojIEQ2ID0gb2xkIFNGQy9ERkMKIyBENyA9IG9sZCBTUgojIEEwID0gQUREUjEKIyBBMSA9IEFERFIyCiMgQTIgPSBidXMgTE9DSyogIHZhbHVlCiMgQTMgPSBidXMgTE9DS0UqIHZhbHVlCiMgQTQgPSBidXMgdW5sb2NrIHZhbHVlCiMgQTUgPSB4eHh4eHh4eAojCglhbGlnbgkJMHgxMApDQVMyV19TVEFSVDoKCW1vdmMJCSVhMiwlYnVzY3IJCSMgYXNzZXJ0IExPQ0sqCgltb3ZzLncJCSglYTEpLCVkMQkJIyBmZXRjaCBEZXN0MlsxNTowXQoJbW92cy53CQkoJWEwKSwlZDAJCSMgZmV0Y2ggRGVzdDFbMTU6MF0KCWJyYS5iCQlDQVMyV19DT05UMgpDQVMyV19FTlRFUjoKCWJyYS5iCQl+KzE2CgpDQVMyV19DT05UMjoKCWNtcC53CQklZDAsJWQyCQkJIyBEZXN0MSAtIENvbXBhcmUxCglibmUuYgkJQ0FTMldfTk9VUERBVEUKCWNtcC53CQklZDEsJWQzCQkJIyBEZXN0MiAtIENvbXBhcmUyCglibmUuYgkJQ0FTMldfTk9VUERBVEUKCW1vdnMudwkJJWQ1LCglYTEpCQkjIFVwZGF0ZTJbMTU6MF0gLT4gREVTVDIKCWJyYS5iCQlDQVMyV19VUERBVEUKCWJyYS5iCQl+KzE2CgpDQVMyV19VUERBVEU6Cgltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKCW1vdnMudwkJJWQ0LCglYTApCQkjIFVwZGF0ZTFbMTU6MF0gLT4gREVTVDEKCW1vdmMJCSVhNCwlYnVzY3IJCSMgdW5sb2NrIHRoZSBidXMKCWJyYS5iCQljYXMyd191cGRhdGVfZG9uZQoJYnJhLmIJCX4rMTYKCkNBUzJXX05PVVBEQVRFOgoJbW92YwkJJWEzLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCgltb3ZzLncJCSVkMCwoJWEwKQkJIyBEZXN0MVsxNTowXSAtPiBERVNUMQoJbW92YwkJJWE0LCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cwoJYnJhLmIJCWNhczJ3X25vdXBkYXRlX2RvbmUKCWJyYS5iCQl+KzE2CgpDQVMyV19GSUxMRVI6Cglub3AKCW5vcAoJbm9wCglub3AKCW5vcAoJbm9wCglub3AKCWJyYS5iCQlDQVMyV19TVEFSVAoKIyMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBUSElTIE1VU1QgQkUgVEhFIFNUQVRFIE9GIFRIRSBJTlRFR0VSIFJFR0lTVEVSIEZJTEUgVVBPTgkjCiMgRU5URVJJTkcgX2lzcF9jYXMyKCkuCQkJCQkJIwojCQkJCQkJCQkjCiMgRDAgPSBkZXN0aW5hdGlvblsxNTowXSBvcGVyYW5kIDEJCQkJIwojIEQxID0gZGVzdGluYXRpb25bMTU6MF0gb3BlcmFuZCAyCQkJCSMKIyBEMiA9IGNtcFsxNTowXSBvcGVyYW5kIDEJCQkJCSMKIyBEMyA9IGNtcFsxNTowXSBvcGVyYW5kIDIJCQkJCSMKIyBENCA9ICd4eHh4eHgxMSAtPiBubyByZWcgdXBkYXRlOyAneHh4eHh4MDAgLT4gdXBkYXRlIHJlcXVpcmVkCSMKIyBENSA9IHh4eHh4eHh4CQkJCQkJCSMKIyBENiA9IHh4eHh4eHh4CQkJCQkJCSMKIyBENyA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBMCA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBMSA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBMiA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBMyA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBNCA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBNSA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBNiA9IGZyYW1lIHBvaW50ZXIJCQkJCQkjCiMgQTcgPSBzdGFjayBwb2ludGVyCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKY2FzMndfbm91cGRhdGVfZG9uZToKCiMgcmVzdG9yZSBwcmV2aW91cyBTRkMvREZDIHZhbHVlLgoJbW92YwkJJWQ2LCVzZmMJCSMgcmVzdG9yZSBvbGQgU0ZDCgltb3ZjCQklZDYsJWRmYwkJIyByZXN0b3JlIG9sZCBERkMKCiMgcmVzdG9yZSBwcmV2aW91cyBpbnRlcnJ1cHQgbWFzayBsZXZlbC4KCW1vdi53CQklZDcsJXNyCQkJIyByZXN0b3JlIG9sZCBTUgoKCXNmCQklZDQJCQkjIGluZGljYXRlIG5vIHVwZGF0ZSB3YXMgZG9uZQoJYnJhLmwJCV9pc3BfY2FzMl9maW5pc2gKCmNhczJ3X3VwZGF0ZV9kb25lOgoKIyByZXN0b3JlIHByZXZpb3VzIFNGQy9ERkMgdmFsdWUuCgltb3ZjCQklZDYsJXNmYwkJIyByZXN0b3JlIG9sZCBTRkMKCW1vdmMJCSVkNiwlZGZjCQkjIHJlc3RvcmUgb2xkIERGQwoKIyByZXN0b3JlIHByZXZpb3VzIGludGVycnVwdCBtYXNrIGxldmVsLgoJbW92LncJCSVkNywlc3IJCQkjIHJlc3RvcmUgb2xkIFNSCgoJc3QJCSVkNAkJCSMgaW5kaWNhdGUgdXBkYXRlIHdhcyBkb25lCglicmEubAkJX2lzcF9jYXMyX2ZpbmlzaAojIyMjCgoJYWxpZ24JCTB4MTAKQ0FTMlcyX1NUQVJUOgoJbW92YwkJJWEyLCVidXNjcgkJIyBhc3NlcnQgTE9DSyoKCW1vdnMudwkJKCVhMSksJWQxCQkjIGZldGNoIERlc3QyWzE1OjBdCgltb3ZzLncJCSglYTApLCVkMAkJIyBmZXRjaCBEZXN0MVsxNTowXQoJYnJhLmIJCUNBUzJXMl9DT05UMgpDQVMyVzJfRU5URVI6CglicmEuYgkJfisxNgoKQ0FTMlcyX0NPTlQyOgoJY21wLncJCSVkMCwlZDIJCQkjIERlc3QxIC0gQ29tcGFyZTEKCWJuZS5iCQlDQVMyVzJfTk9VUERBVEUKCWNtcC53CQklZDEsJWQzCQkJIyBEZXN0MiAtIENvbXBhcmUyCglibmUuYgkJQ0FTMlcyX05PVVBEQVRFCgltb3ZzLncJCSVkNSwoJWExKQkJIyBVcGRhdGUyWzE1OjBdIC0+IERFU1QyCglicmEuYgkJQ0FTMlcyX1VQREFURQoJYnJhLmIJCX4rMTYKCkNBUzJXMl9VUERBVEU6Cglyb3IubAkJJjB4OCwlZDQJCSMgZ2V0IFVwZGF0ZTFbMTU6OF0KCW1vdnMuYgkJJWQ0LCglYTApKwkJIyBVcGRhdGUxWzE1OjhdIC0+IERFU1QxCgltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKCXJvbC5sCQkmMHg4LCVkNAkJIyBnZXQgVXBkYXRlMVs3OjBdCglicmEuYgkJQ0FTMlcyX1VQREFURTIKCWJyYS5iCQl+KzE2CgpDQVMyVzJfVVBEQVRFMjoKCW1vdnMuYgkJJWQ0LCglYTApCQkjIFVwZGF0ZTFbNzowXSAtPiBERVNUMSsweDEKCW1vdmMJCSVhNCwlYnVzY3IJCSMgdW5sb2NrIHRoZSBidXMKCWJyYS53CQljYXMyd191cGRhdGVfZG9uZQoJbm9wCglicmEuYgkJfisxNgoKQ0FTMlcyX05PVVBEQVRFOgoJcm9yLmwJCSYweDgsJWQwCQkjIGdldCBEZXN0MVsxNTo4XQoJbW92cy5iCQklZDAsKCVhMCkrCQkjIERlc3QxWzE1OjhdIC0+IERFU1QxCgltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKCXJvbC5sCQkmMHg4LCVkMAkJIyBnZXQgRGVzdDFbNzowXQoJYnJhLmIJCUNBUzJXMl9OT1VQREFURTIKCWJyYS5iCQl+KzE2CgpDQVMyVzJfTk9VUERBVEUyOgoJbW92cy5iCQklZDAsKCVhMCkJCSMgRGVzdDFbNzowXSAtPiBERVNUMSsweDEKCW1vdmMJCSVhNCwlYnVzY3IJCSMgdW5sb2NrIHRoZSBidXMKCWJyYS53CQljYXMyd19ub3VwZGF0ZV9kb25lCglub3AKCWJyYS5iCQl+KzE2CgpDQVMyVzJfRklMTEVSOgoJbm9wCglub3AKCW5vcAoJbm9wCglub3AKCW5vcAoJbm9wCglicmEuYgkJQ0FTMlcyX1NUQVJUCgojICAgICAgICMjIyMjIyAgICAgICMjICAgICAgIyMjIyMjCiMgICAgICAgIwkgICAjICAjICAgICAjCiMJIwkgICMjIyMjIyAgICAjIyMjIyMKIwkjCSAgIyAgICAjICAgICAgICAgIwojICAgICAgICMjIyMjIyAgICAjICAgICMgICAgIyMjIyMjCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwlfaXNwX2NhcygpOiAiY29yZSIgZW11bGF0aW9uIGNvZGUgZm9yIHRoZSBjYXMgaW5zdHJ1Y3Rpb24JIwojCQkJCQkJCQkJIwojIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJX2lzcF9jYXNfZmluaXNoKCkgLSBvbmx5IGV4aXQgcG9pbnQgZm9yIHRoaXMgZW11bGF0aW9uIGNvZGU7CSMKIwkJCSAgICBkbyBjbGVhbi11cAkJCQkJIwojCQkJCQkJCQkJIwojIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJKnNlZSBlbnRyeSBjaGFydCBiZWxvdyoJCQkJCQkjCiMJCQkJCQkJCQkjCiMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKIwkqc2VlIGV4aXQgY2hhcnQgYmVsb3cqCQkJCQkJIwojCQkJCQkJCQkJIwojIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCiMJKDEpIE1ha2Ugc2V2ZXJhbCBjb3BpZXMgb2YgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzLgkJIwojCSgyKSBTYXZlIGN1cnJlbnQgU1I7IFRoZW4gbWFzayBvZmYgYWxsIG1hc2thYmxlIGludGVycnVwdHMuCSMKIwkoMykgU2F2ZSBjdXJyZW50IERGQy9TRkMgKEFTU1VNRUQgVE8gQkUgRVFVQUwhISEpOyBUaGVuIHNldAkjCiMJICAgIFNGQy9ERkMgYWNjb3JkaW5nIHRvIHdoZXRoZXIgZXhjZXB0aW9uIG9jY3VycmVkIGluIHVzZXIgb3IJIwojCSAgICBzdXBlcnZpc29yIG1vZGUuCQkJCQkJIwojCSg0KSBVc2UgInBscGF3IiBpbnN0cnVjdGlvbiB0byBwcmUtbG9hZCBBVEMgd2l0aCBlZmVjdGl2ZQkjCiMJICAgIGFkZHJlc3MgcGFnZShzKS4gVEhJUyBTSE9VTEQgTk9UIEZBVUxUISEhIFRoZSByZWxldmFudAkjCiMJICAgIHBhZ2Uocykgc2hvdWxkIGhhdmUgYmVlbiBtYWRlIHJlc2lkZW50IHByaW9yIHRvIGVudGVyaW5nCSMKIwkgICAgdGhpcyByb3V0aW5lLgkJCQkJCSMKIwkoNSkgUHVzaCB0aGUgb3BlcmFuZCBsaW5lcyBmcm9tIHRoZSBjYWNoZSB3LyAiY3B1c2hsIi4JCSMKIwkgICAgSW4gdGhlIDY4MDQwLCB0aGlzIHdhcyBkb25lIHdpdGhpbiB0aGUgbG9ja2VkIHJlZ2lvbi4gSW4JIwojCSAgICB0aGUgNjgwNjAsIGl0IGlzIGRvbmUgb3V0c2lkZSBvZiB0aGUgbG9ja2VkIHJlZ2lvbi4JCSMKIwkoNikgUHJlLWZldGNoIHRoZSBjb3JlIGVtdWxhdGlvbiBpbnN0cnVjdGlvbnMgYnkgZXhlY3V0aW5nIG9uZQkjCiMJICAgIGJyYW5jaCB3aXRoaW4gZWFjaCBwaHlzaWNhbCBsaW5lICgxNiBieXRlcykgb2YgdGhlIGNvZGUJIwojCSAgICBiZWZvcmUgYWN0dWFsbHkgZXhlY3V0aW5nIHRoZSBjb2RlLgkJCQkjCiMJKDcpIExvYWQgdGhlIEJVU0NSIHdpdGggdGhlIGJ1cyBsb2NrIHZhbHVlLgkJCSMKIwkoOCkgRmV0Y2ggdGhlIHNvdXJjZSBvcGVyYW5kLgkJCQkJIwojCSg5KSBEbyB0aGUgY29tcGFyZS4gSWYgZXF1YWwsIGdvIHRvIHN0ZXAgKDEyKS4JCQkjCiMJKDEwKVVuZXF1YWwuIE5vIHVwZGF0ZSBvY2N1cnMuIEJ1dCwgd2UgZG8gd3JpdGUgdGhlIERTVCBvcCBiYWNrCSMKIwkgICAgdG8gaXRzZWxmIChhcyB3LyB0aGUgJzA0MCkgc28gd2UgY2FuIGdyYWNlZnVsbHkgdW5sb2NrCSMKIwkgICAgdGhlIGJ1cyAoYW5kIGFzc2VydCBMT0NLRSopIHVzaW5nIEJVU0NSIGFuZCB0aGUgZmluYWwgbW92ZS4JIwojCSgxMSlFeGl0LgkJCQkJCQkjCiMJKDEyKVdyaXRlIHVwZGF0ZSBvcGVyYW5kIHRvIHRoZSBEU1QgbG9jYXRpb24uIFVzZSBCVVNDUiB0bwkjCiMJICAgIGFzc2VydCBMT0NLRSogZm9yIHRoZSBmaW5hbCB3cml0ZSBvcGVyYXRpb24uCQkjCiMJKDEzKUV4aXQuCQkJCQkJCSMKIwkJCQkJCQkJCSMKIwlUaGUgYWxnb3JpdGhtIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIHNsaWdodGx5IGRpZmZlcmVudGx5CSMKIyBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIG9wZXJhdGlvbiBhbmQgdGhlIG1pc2FsaWdubWVudCBvZiB0aGUJIwojIG9wZXJhbmQuIEEgbWlzYWxpZ25lZCBvcGVyYW5kIG11c3QgYmUgd3JpdHRlbiBpbiBhbGlnbmVkIGNodW5rcyBvcgkjCiMgZWxzZSB0aGUgQlVTQ1IgcmVnaXN0ZXIgY29udHJvbCBnZXRzIGNvbmZ1c2VkLgkJCSMKIwkJCQkJCQkJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgVEhJUyBJUyBUSEUgU1RBVEUgT0YgVEhFIElOVEVHRVIgUkVHSVNURVIgRklMRSBVUE9OCSMKIyBFTlRFUklORyBfaXNwX2NhcygpLgkJCQkJIwojCQkJCQkJCSMKIyBEMCA9IHh4eHh4eHh4CQkJCQkJIwojIEQxID0geHh4eHh4eHgJCQkJCQkjCiMgRDIgPSB1cGRhdGUgb3BlcmFuZAkJCQkJIwojIEQzID0geHh4eHh4eHgJCQkJCQkjCiMgRDQgPSBjb21wYXJlIG9wZXJhbmQJCQkJCSMKIyBENSA9IHh4eHh4eHh4CQkJCQkJIwojIEQ2ID0gc3VwZXJ2aXNvciAoJ3h4eHh4eGZmKSBvciB1c2VyIG1vZGUgKCd4eHh4eHgwMCkJIwojIEQ3ID0gbG9uZ3dvcmQgKCd4eHh4eHhmZikgb3Igd29yZCBzaXplICgneHh4eHh4MDApCSMKIyBBMCA9IEFERFIJCQkJCQkjCiMgQTEgPSB4eHh4eHh4eAkJCQkJCSMKIyBBMiA9IHh4eHh4eHh4CQkJCQkJIwojIEEzID0geHh4eHh4eHgJCQkJCQkjCiMgQTQgPSB4eHh4eHh4eAkJCQkJCSMKIyBBNSA9IHh4eHh4eHh4CQkJCQkJIwojIEE2ID0gZnJhbWUgcG9pbnRlcgkJCQkJIwojIEE3ID0gc3RhY2sgcG9pbnRlcgkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglnbG9iYWwJCV9pc3BfY2FzCl9pc3BfY2FzOgoJdHN0LmIJCSVkNgkJCSMgdXNlciBvciBzdXBlcnZpc29yIG1vZGU/CglibmUuYgkJY2FzX3N1cGVyCQkjIHN1cGVydmlzb3IKY2FzX3VzZXI6Cgltb3ZxLmwJCSYweDEsJWQwCQkjIGxvYWQgdXNlciBkYXRhIGZjCglicmEuYgkJY2FzX2NvbnQKY2FzX3N1cGVyOgoJbW92cS5sCQkmMHg1LCVkMAkJIyBsb2FkIHN1cGVydmlzb3IgZGF0YSBmYwoKY2FzX2NvbnQ6Cgl0c3QuYgkJJWQ3CQkJIyB3b3JkIG9yIGxvbmd3b3JkPwoJYm5lLncJCWNhc2wJCQkjIGxvbmd3b3JkCgojIyMjCmNhc3c6Cgltb3YubAkJJWEwLCVhMQkJCSMgbWFrZSBjb3B5IGZvciBwbHBhdzEKCW1vdi5sCQklYTAsJWEyCQkJIyBtYWtlIGNvcHkgZm9yIHBscGF3MgoJYWRkcS5sCQkmMHgxLCVhMgkJIyBwbHBhdzIgcG9pbnRzIHRvIGVuZCBvZiB3b3JkCgoJbW92LmwJCSVkMiwlZDMJCQkjIGQzID0gdXBkYXRlWzc6MF0KCWxzci53CQkmMHg4LCVkMgkJIyBkMiA9IHVwZGF0ZVsxNTo4XQoKIyBtYXNrIGludGVycnVwdCBsZXZlbHMgMC02LiBzYXZlIG9sZCBtYXNrIHZhbHVlLgoJbW92LncJCSVzciwlZDcJCQkjIHNhdmUgY3VycmVudCBTUgoJb3JpLncJCSYweDA3MDAsJXNyCQkjIGluaGliaXQgaW50ZXJydXB0cwoKIyBsb2FkIHRoZSBTRkMgYW5kIERGQyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBtb2RlLgoJbW92YwkJJXNmYywlZDYJCSMgc2F2ZSBvbGQgU0ZDL0RGQwoJbW92YwkJJWQwLCVzZmMJCSMgbG9hZCBuZXcgc2ZjCgltb3ZjCQklZDAsJWRmYwkJIyBsb2FkIG5ldyBkZmMKCiMgcHJlLWxvYWQgdGhlIG9wZXJhbmQgQVRDLiBubyBwYWdlIGZhdWx0cyBzaG91bGQgb2NjdXIgaGVyZSBiZWNhdXNlCiMgX3JlYWxfbG9ja19wYWdlKCkgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGlzLgoJcGxwYXcJCSglYTEpCQkJIyBsb2FkIGF0YyBmb3IgQUREUgoJcGxwYXcJCSglYTIpCQkJIyBsb2FkIGF0YyBmb3IgQUREUisxCgojIHB1c2ggdGhlIG9wZXJhbmQgbGluZXMgZnJvbSB0aGUgY2FjaGUgaWYgdGhleSBleGlzdC4KCWNwdXNobAkJJWRjLCglYTEpCQkjIHB1c2ggZGlydHkgZGF0YQoJY3B1c2hsCQklZGMsKCVhMikJCSMgcHVzaCBkaXJ0eSBkYXRhCgojIGxvYWQgdGhlIEJVU0NSIHZhbHVlcy4KCW1vdi5sCQkmMHg4MDAwMDAwMCwlYTEJCSMgYXNzZXJ0IExPQ0sqIGJ1c2NyIHZhbHVlCgltb3YubAkJJjB4YTAwMDAwMDAsJWEyCQkjIGFzc2VydCBMT0NLRSogYnVzY3IgdmFsdWUKCW1vdi5sCQkmMHgwMDAwMDAwMCwlYTMJCSMgYnVzY3IgdW5sb2NrIHZhbHVlCgojIHByZS1sb2FkIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBmb3IgdGhlIGZvbGxvd2luZyBhbGdvcml0aG0uCiMgdGhpcyB3aWxsIG1pbmltaXplIHRoZSBudW1iZXIgb2YgY3ljbGVzIHRoYXQgTE9DSyogd2lsbCBiZSBhc3NlcnRlZC4KCWJyYS5iCQlDQVNXX0VOVEVSCQkjIHN0YXJ0IHByZS1sb2FkaW5nIGljYWNoZQoKIwojIEQwID0gZHN0IG9wZXJhbmQgPC0KIyBEMSA9IHVwZGF0ZVsxNTo4XSBvcGVyYW5kCiMgRDIgPSB1cGRhdGVbNzowXSAgb3BlcmFuZAojIEQzID0geHh4eHh4eHgKIyBENCA9IGNvbXBhcmVbMTU6MF0gb3BlcmFuZAojIEQ1ID0geHh4eHh4eHgKIyBENiA9IG9sZCBTRkMvREZDCiMgRDcgPSBvbGQgU1IKIyBBMCA9IEFERFIKIyBBMSA9IGJ1cyBMT0NLKiAgdmFsdWUKIyBBMiA9IGJ1cyBMT0NLRSogdmFsdWUKIyBBMyA9IGJ1cyB1bmxvY2sgdmFsdWUKIyBBNCA9IHh4eHh4eHh4CiMgQTUgPSB4eHh4eHh4eAojCglhbGlnbgkJMHgxMApDQVNXX1NUQVJUOgoJbW92YwkJJWExLCVidXNjcgkJIyBhc3NlcnQgTE9DSyoKCW1vdnMudwkJKCVhMCksJWQwCQkjIGZldGNoIERlc3RbMTU6MF0KCWNtcC53CQklZDAsJWQ0CQkJIyBEZXN0IC0gQ29tcGFyZQoJYm5lLmIJCUNBU1dfTk9VUERBVEUKCWJyYS5iCQlDQVNXX1VQREFURQpDQVNXX0VOVEVSOgoJYnJhLmIJCX4rMTYKCkNBU1dfVVBEQVRFOgoJbW92cy5iCQklZDIsKCVhMCkrCQkjIFVwZGF0ZVsxNTo4XSAtPiBERVNUCgltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKCW1vdnMuYgkJJWQzLCglYTApCQkjIFVwZGF0ZVs3OjBdIC0+IERFU1QrMHgxCglicmEuYgkJQ0FTV19VUERBVEUyCglicmEuYgkJfisxNgoKQ0FTV19VUERBVEUyOgoJbW92YwkJJWEzLCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cwoJYnJhLmIJCWNhc3dfdXBkYXRlX2RvbmUKCW5vcAoJbm9wCglub3AKCW5vcAoJYnJhLmIJCX4rMTYKCkNBU1dfTk9VUERBVEU6Cglyb3IubAkJJjB4OCwlZDAJCSMgZ2V0IERlc3RbMTU6OF0KCW1vdnMuYgkJJWQwLCglYTApKwkJIyBEZXN0WzE1OjhdIC0+IERFU1QKCW1vdmMJCSVhMiwlYnVzY3IJCSMgYXNzZXJ0IExPQ0tFKgoJcm9sLmwJCSYweDgsJWQwCQkjIGdldCBEZXN0Wzc6MF0KCWJyYS5iCQlDQVNXX05PVVBEQVRFMgoJYnJhLmIJCX4rMTYKCkNBU1dfTk9VUERBVEUyOgoJbW92cy5iCQklZDAsKCVhMCkJCSMgRGVzdFs3OjBdIC0+IERFU1QrMHgxCgltb3ZjCQklYTMsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCglicmEuYgkJY2Fzd19ub3VwZGF0ZV9kb25lCglub3AKCW5vcAoJYnJhLmIJCX4rMTYKCkNBU1dfRklMTEVSOgoJbm9wCglub3AKCW5vcAoJbm9wCglub3AKCW5vcAoJbm9wCglicmEuYgkJQ0FTV19TVEFSVAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBUSElTIE1VU1QgQkUgVEhFIFNUQVRFIE9GIFRIRSBJTlRFR0VSIFJFR0lTVEVSIEZJTEUgVVBPTgkjCiMgQ0FMTElORyBfaXNwX2Nhc19maW5pc2goKS4JCQkJCSMKIwkJCQkJCQkJIwojIEQwID0gZGVzdGluYXRpb25bMTU6MF0gb3BlcmFuZAkJCQkjCiMgRDEgPSAneHh4eHh4MTEgLT4gbm8gcmVnIHVwZGF0ZTsgJ3h4eHh4eDAwIC0+IHVwZGF0ZSByZXF1aXJlZAkjCiMgRDIgPSB4eHh4eHh4eAkJCQkJCQkjCiMgRDMgPSB4eHh4eHh4eAkJCQkJCQkjCiMgRDQgPSBjb21wYXJlWzE1OjBdIG9wZXJhbmQJCQkJCSMKIyBENSA9IHh4eHh4eHh4CQkJCQkJCSMKIyBENiA9IHh4eHh4eHh4CQkJCQkJCSMKIyBENyA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBMCA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBMSA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBMiA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBMyA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBNCA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBNSA9IHh4eHh4eHh4CQkJCQkJCSMKIyBBNiA9IGZyYW1lIHBvaW50ZXIJCQkJCQkjCiMgQTcgPSBzdGFjayBwb2ludGVyCQkJCQkJIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKY2Fzd19ub3VwZGF0ZV9kb25lOgoKIyByZXN0b3JlIHByZXZpb3VzIFNGQy9ERkMgdmFsdWUuCgltb3ZjCQklZDYsJXNmYwkJIyByZXN0b3JlIG9sZCBTRkMKCW1vdmMJCSVkNiwlZGZjCQkjIHJlc3RvcmUgb2xkIERGQwoKIyByZXN0b3JlIHByZXZpb3VzIGludGVycnVwdCBtYXNrIGxldmVsLgoJbW92LncJCSVkNywlc3IJCQkjIHJlc3RvcmUgb2xkIFNSCgoJc2YJCSVkMQkJCSMgaW5kaWNhdGUgbm8gdXBkYXRlIHdhcyBkb25lCglicmEubAkJX2lzcF9jYXNfZmluaXNoCgpjYXN3X3VwZGF0ZV9kb25lOgoKIyByZXN0b3JlIHByZXZpb3VzIFNGQy9ERkMgdmFsdWUuCgltb3ZjCQklZDYsJXNmYwkJIyByZXN0b3JlIG9sZCBTRkMKCW1vdmMJCSVkNiwlZGZjCQkjIHJlc3RvcmUgb2xkIERGQwoKIyByZXN0b3JlIHByZXZpb3VzIGludGVycnVwdCBtYXNrIGxldmVsLgoJbW92LncJCSVkNywlc3IJCQkjIHJlc3RvcmUgb2xkIFNSCgoJc3QJCSVkMQkJCSMgaW5kaWNhdGUgdXBkYXRlIHdhcyBkb25lCglicmEubAkJX2lzcF9jYXNfZmluaXNoCgojIyMjIyMjIyMjIyMjIyMjCgojIHRoZXJlIGFyZSB0d28gcG9zc2libGUgbWlzLWFsaWduZWQgY2FzZXMgZm9yIGxvbmd3b3JkIGNhcy4gdGhleQojIGFyZSBzZXBhcmF0ZWQgYmVjYXVzZSB0aGUgZmluYWwgd3JpdGUgd2hpY2ggYXNzZXJ0cyBMT0NLRSogbXVzdAojIGJlIGFuIGFsaWduZWQgd3JpdGUuCmNhc2w6Cgltb3YubAkJJWEwLCVhMQkJCSMgbWFrZSBjb3B5IGZvciBwbHBhdzEKCW1vdi5sCQklYTAsJWEyCQkJIyBtYWtlIGNvcHkgZm9yIHBscGF3MgoJYWRkcS5sCQkmMHgzLCVhMgkJIyBwbHBhdzIgcG9pbnRzIHRvIGVuZCBvZiBsb25nd29yZAoKCW1vdi5sCQklYTAsJWQxCQkJIyBieXRlIG9yIHdvcmQgbWlzYWxpZ25lZD8KCWJ0c3QJCSYweDAsJWQxCglibmUudwkJY2FzbDIJCQkjIGJ5dGUgbWlzYWxpZ25lZAoKCW1vdi5sCQklZDIsJWQzCQkJIyBkMyA9IHVwZGF0ZVsxNTowXQoJc3dhcAkJJWQyCQkJIyBkMiA9IHVwZGF0ZVszMToxNl0KCiMgbWFzayBpbnRlcnJ1cHRzIGxldmVscyAwLTYuIHNhdmUgb2xkIG1hc2sgdmFsdWUuCgltb3YudwkJJXNyLCVkNwkJCSMgc2F2ZSBjdXJyZW50IFNSCglvcmkudwkJJjB4MDcwMCwlc3IJCSMgaW5oaWJpdCBpbnRlcnJ1cHRzCgojIGxvYWQgdGhlIFNGQyBhbmQgREZDIHdpdGggdGhlIGFwcHJvcHJpYXRlIG1vZGUuCgltb3ZjCQklc2ZjLCVkNgkJIyBzYXZlIG9sZCBTRkMvREZDCgltb3ZjCQklZDAsJXNmYwkJIyBsb2FkIG5ldyBzZmMKCW1vdmMJCSVkMCwlZGZjCQkjIGxvYWQgbmV3IGRmYwoKIyBwcmUtbG9hZCB0aGUgb3BlcmFuZCBBVEMuIG5vIHBhZ2UgZmF1bHRzIHNob3VsZCBvY2N1ciBoZXJlIGJlY2F1c2UKIyBfcmVhbF9sb2NrX3BhZ2UoKSBzaG91bGQgaGF2ZSB0YWtlbiBjYXJlIG9mIHRoaXMuCglwbHBhdwkJKCVhMSkJCQkjIGxvYWQgYXRjIGZvciBBRERSCglwbHBhdwkJKCVhMikJCQkjIGxvYWQgYXRjIGZvciBBRERSKzMKCiMgcHVzaCB0aGUgb3BlcmFuZCBsaW5lcyBmcm9tIHRoZSBjYWNoZSBpZiB0aGV5IGV4aXN0LgoJY3B1c2hsCQklZGMsKCVhMSkJCSMgcHVzaCBkaXJ0eSBkYXRhCgljcHVzaGwJCSVkYywoJWEyKQkJIyBwdXNoIGRpcnR5IGRhdGEKCiMgbG9hZCB0aGUgQlVTQ1IgdmFsdWVzLgoJbW92LmwJCSYweDgwMDAwMDAwLCVhMQkJIyBhc3NlcnQgTE9DSyogYnVzY3IgdmFsdWUKCW1vdi5sCQkmMHhhMDAwMDAwMCwlYTIJCSMgYXNzZXJ0IExPQ0tFKiBidXNjciB2YWx1ZQoJbW92LmwJCSYweDAwMDAwMDAwLCVhMwkJIyBidXNjciB1bmxvY2sgdmFsdWUKCglicmEuYgkJQ0FTTF9FTlRFUgkJIyBzdGFydCBwcmUtbG9hZGluZyBpY2FjaGUKCiMKIyBEMCA9IGRzdCBvcGVyYW5kIDwtCiMgRDEgPSB4eHh4eHh4eAojIEQyID0gdXBkYXRlWzMxOjE2XSBvcGVyYW5kCiMgRDMgPSB1cGRhdGVbMTU6MF0gIG9wZXJhbmQKIyBENCA9IGNvbXBhcmVbMzE6MF0gb3BlcmFuZAojIEQ1ID0geHh4eHh4eHgKIyBENiA9IG9sZCBTRkMvREZDCiMgRDcgPSBvbGQgU1IKIyBBMCA9IEFERFIKIyBBMSA9IGJ1cyBMT0NLKiAgdmFsdWUKIyBBMiA9IGJ1cyBMT0NLRSogdmFsdWUKIyBBMyA9IGJ1cyB1bmxvY2sgdmFsdWUKIyBBNCA9IHh4eHh4eHh4CiMgQTUgPSB4eHh4eHh4eAojCglhbGlnbgkJMHgxMApDQVNMX1NUQVJUOgoJbW92YwkJJWExLCVidXNjcgkJIyBhc3NlcnQgTE9DSyoKCW1vdnMubAkJKCVhMCksJWQwCQkjIGZldGNoIERlc3RbMzE6MF0KCWNtcC5sCQklZDAsJWQ0CQkJIyBEZXN0IC0gQ29tcGFyZQoJYm5lLmIJCUNBU0xfTk9VUERBVEUKCWJyYS5iCQlDQVNMX1VQREFURQpDQVNMX0VOVEVSOgoJYnJhLmIJCX4rMTYKCkNBU0xfVVBEQVRFOgoJbW92cy53CQklZDIsKCVhMCkrCQkjIFVwZGF0ZVszMToxNl0gLT4gREVTVAoJbW92YwkJJWEyLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCgltb3ZzLncJCSVkMywoJWEwKQkJIyBVcGRhdGVbMTU6MF0gLT4gREVTVCsweDIKCWJyYS5iCQlDQVNMX1VQREFURTIKCWJyYS5iCQl+KzE2CgpDQVNMX1VQREFURTI6Cgltb3ZjCQklYTMsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCglicmEuYgkJY2FzbF91cGRhdGVfZG9uZQoJbm9wCglub3AKCW5vcAoJbm9wCglicmEuYgkJfisxNgoKQ0FTTF9OT1VQREFURToKCXN3YXAJCSVkMAkJCSMgZ2V0IERlc3RbMzE6MTZdCgltb3ZzLncJCSVkMCwoJWEwKSsJCSMgRGVzdFszMToxNl0gLT4gREVTVAoJc3dhcAkJJWQwCQkJIyBnZXQgRGVzdFsxNTowXQoJbW92YwkJJWEyLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCglicmEuYgkJQ0FTTF9OT1VQREFURTIKCWJyYS5iCQl+KzE2CgpDQVNMX05PVVBEQVRFMjoKCW1vdnMudwkJJWQwLCglYTApCQkjIERlc3RbMTU6MF0gLT4gREVTVCsweDIKCW1vdmMJCSVhMywlYnVzY3IJCSMgdW5sb2NrIHRoZSBidXMKCWJyYS5iCQljYXNsX25vdXBkYXRlX2RvbmUKCW5vcAoJbm9wCglicmEuYgkJfisxNgoKQ0FTTF9GSUxMRVI6Cglub3AKCW5vcAoJbm9wCglub3AKCW5vcAoJbm9wCglub3AKCWJyYS5iCQlDQVNMX1NUQVJUCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFRISVMgTVVTVCBCRSBUSEUgU1RBVEUgT0YgVEhFIElOVEVHRVIgUkVHSVNURVIgRklMRSBVUE9OCSMKIyBDQUxMSU5HIF9pc3BfY2FzX2ZpbmlzaCgpLgkJCQkJIwojCQkJCQkJCQkjCiMgRDAgPSBkZXN0aW5hdGlvblszMTowXSBvcGVyYW5kCQkJCSMKIyBEMSA9ICd4eHh4eHgxMSAtPiBubyByZWcgdXBkYXRlOyAneHh4eHh4MDAgLT4gdXBkYXRlIHJlcXVpcmVkCSMKIyBEMiA9IHh4eHh4eHh4CQkJCQkJCSMKIyBEMyA9IHh4eHh4eHh4CQkJCQkJCSMKIyBENCA9IGNvbXBhcmVbMzE6MF0gb3BlcmFuZAkJCQkJIwojIEQ1ID0geHh4eHh4eHgJCQkJCQkJIwojIEQ2ID0geHh4eHh4eHgJCQkJCQkJIwojIEQ3ID0geHh4eHh4eHgJCQkJCQkJIwojIEEwID0geHh4eHh4eHgJCQkJCQkJIwojIEExID0geHh4eHh4eHgJCQkJCQkJIwojIEEyID0geHh4eHh4eHgJCQkJCQkJIwojIEEzID0geHh4eHh4eHgJCQkJCQkJIwojIEE0ID0geHh4eHh4eHgJCQkJCQkJIwojIEE1ID0geHh4eHh4eHgJCQkJCQkJIwojIEE2ID0gZnJhbWUgcG9pbnRlcgkJCQkJCSMKIyBBNyA9IHN0YWNrIHBvaW50ZXIJCQkJCQkjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpjYXNsX25vdXBkYXRlX2RvbmU6CgojIHJlc3RvcmUgcHJldmlvdXMgU0ZDL0RGQyB2YWx1ZS4KCW1vdmMJCSVkNiwlc2ZjCQkjIHJlc3RvcmUgb2xkIFNGQwoJbW92YwkJJWQ2LCVkZmMJCSMgcmVzdG9yZSBvbGQgREZDCgojIHJlc3RvcmUgcHJldmlvdXMgaW50ZXJydXB0IG1hc2sgbGV2ZWwuCgltb3YudwkJJWQ3LCVzcgkJCSMgcmVzdG9yZSBvbGQgU1IKCglzZgkJJWQxCQkJIyBpbmRpY2F0ZSBubyB1cGRhdGUgd2FzIGRvbmUKCWJyYS5sCQlfaXNwX2Nhc19maW5pc2gKCmNhc2xfdXBkYXRlX2RvbmU6CgojIHJlc3RvcmUgcHJldmlvdXMgU0ZDL0RGQyB2YWx1ZS4KCW1vdmMJCSVkNiwlc2ZjCQkjIHJlc3RvcmUgb2xkIFNGQwoJbW92YwkJJWQ2LCVkZmMJCSMgcmVzdG9yZSBvbGQgREZDCgojIHJlc3RvcmUgcHJldmlvdXMgaW50ZXJydXB0cyBtYXNrIGxldmVsLgoJbW92LncJCSVkNywlc3IJCQkjIHJlc3RvcmUgb2xkIFNSCgoJc3QJCSVkMQkJCSMgaW5kaWNhdGUgdXBkYXRlIHdhcyBkb25lCglicmEubAkJX2lzcF9jYXNfZmluaXNoCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKY2FzbDI6Cgltb3YubAkJJWQyLCVkNQkJCSMgZDUgPSBVcGRhdGVbNzowXQoJbHNyLmwJCSYweDgsJWQyCgltb3YubAkJJWQyLCVkMwkJCSMgZDMgPSBVcGRhdGVbMjM6OF0KCXN3YXAJCSVkMgkJCSMgZDIgPSBVcGRhdGVbMzE6MjRdCgojIG1hc2sgaW50ZXJydXB0cyBsZXZlbHMgMC02LiBzYXZlIG9sZCBtYXNrIHZhbHVlLgoJbW92LncJCSVzciwlZDcJCQkjIHNhdmUgY3VycmVudCBTUgoJb3JpLncJCSYweDA3MDAsJXNyCQkjIGluaGliaXQgaW50ZXJydXB0cwoKIyBsb2FkIHRoZSBTRkMgYW5kIERGQyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBtb2RlLgoJbW92YwkJJXNmYywlZDYJCSMgc2F2ZSBvbGQgU0ZDL0RGQwoJbW92YwkJJWQwLCVzZmMJCSMgbG9hZCBuZXcgc2ZjCgltb3ZjCQklZDAsJWRmYwkJIyBsb2FkIG5ldyBkZmMKCiMgcHJlLWxvYWQgdGhlIG9wZXJhbmQgQVRDLiBubyBwYWdlIGZhdWx0cyBzaG91bGQgb2NjdXIgaGVyZSBiZWNhdXNlCiMgX3JlYWxfbG9ja19wYWdlKCkgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGlzIGFscmVhZHkuCglwbHBhdwkJKCVhMSkJCQkjIGxvYWQgYXRjIGZvciBBRERSCglwbHBhdwkJKCVhMikJCQkjIGxvYWQgYXRjIGZvciBBRERSKzMKCiMgcHVjaCB0aGUgb3BlcmFuZCBsaW5lcyBmcm9tIHRoZSBjYWNoZSBpZiB0aGV5IGV4aXN0LgoJY3B1c2hsCQklZGMsKCVhMSkJCSMgcHVzaCBkaXJ0eSBkYXRhCgljcHVzaGwJCSVkYywoJWEyKQkJIyBwdXNoIGRpcnR5IGRhdGEKCiMgbG9hZCB0aGUgQlVTQ1IgdmFsdWVzLgoJbW92LmwJCSYweDgwMDAwMDAwLCVhMQkJIyBhc3NlcnQgTE9DSyogYnVzY3IgdmFsdWUKCW1vdi5sCQkmMHhhMDAwMDAwMCwlYTIJCSMgYXNzZXJ0IExPQ0tFKiBidXNjciB2YWx1ZQoJbW92LmwJCSYweDAwMDAwMDAwLCVhMwkJIyBidXNjciB1bmxvY2sgdmFsdWUKCiMgcHJlLWxvYWQgdGhlIGluc3RydWN0aW9uIGNhY2hlIGZvciB0aGUgZm9sbG93aW5nIGFsZ29yaXRobS4KIyB0aGlzIHdpbGwgbWluaW1pemUgdGhlIG51bWJlciBvZiBjeWNsZXMgdGhhdCBMT0NLKiB3aWxsIGJlIGFzc2VydGVkLgoJYnJhLmIJCUNBU0wyX0VOVEVSCQkjIHN0YXJ0IHByZS1sb2FkaW5nIGljYWNoZQoKIwojIEQwID0gZHN0IG9wZXJhbmQgPC0KIyBEMSA9IHh4eHh4eHh4CiMgRDIgPSB1cGRhdGVbMzE6MjRdIG9wZXJhbmQKIyBEMyA9IHVwZGF0ZVsyMzo4XSAgb3BlcmFuZAojIEQ0ID0gY29tcGFyZVszMTowXSBvcGVyYW5kCiMgRDUgPSB1cGRhdGVbNzowXSAgb3BlcmFuZAojIEQ2ID0gb2xkIFNGQy9ERkMKIyBENyA9IG9sZCBTUgojIEEwID0gQUREUgojIEExID0gYnVzIExPQ0sqICB2YWx1ZQojIEEyID0gYnVzIExPQ0tFKiB2YWx1ZQojIEEzID0gYnVzIHVubG9jayB2YWx1ZQojIEE0ID0geHh4eHh4eHgKIyBBNSA9IHh4eHh4eHh4CiMKCWFsaWduCQkweDEwCkNBU0wyX1NUQVJUOgoJbW92YwkJJWExLCVidXNjcgkJIyBhc3NlcnQgTE9DSyoKCW1vdnMubAkJKCVhMCksJWQwCQkjIGZldGNoIERlc3RbMzE6MF0KCWNtcC5sCQklZDAsJWQ0CQkJIyBEZXN0IC0gQ29tcGFyZQoJYm5lLmIJCUNBU0wyX05PVVBEQVRFCglicmEuYgkJQ0FTTDJfVVBEQVRFCkNBU0wyX0VOVEVSOgoJYnJhLmIJCX4rMTYKCkNBU0wyX1VQREFURToKCW1vdnMuYgkJJWQyLCglYTApKwkJIyBVcGRhdGVbMzE6MjRdIC0+IERFU1QKCW1vdnMudwkJJWQzLCglYTApKwkJIyBVcGRhdGVbMjM6OF0gLT4gREVTVCsweDEKCW1vdmMJCSVhMiwlYnVzY3IJCSMgYXNzZXJ0IExPQ0tFKgoJYnJhLmIJCUNBU0wyX1VQREFURTIKCWJyYS5iCQl+KzE2CgpDQVNMMl9VUERBVEUyOgoJbW92cy5iCQklZDUsKCVhMCkJCSMgVXBkYXRlWzc6MF0gLT4gREVTVCsweDMKCW1vdmMJCSVhMywlYnVzY3IJCSMgdW5sb2NrIHRoZSBidXMKCWJyYS53CQljYXNsX3VwZGF0ZV9kb25lCglub3AKCWJyYS5iCQl+KzE2CgpDQVNMMl9OT1VQREFURToKCXJvbC5sCQkmMHg4LCVkMAkJIyBnZXQgRGVzdFszMToyNF0KCW1vdnMuYgkJJWQwLCglYTApKwkJIyBEZXN0WzMxOjI0XSAtPiBERVNUCglzd2FwCQklZDAJCQkjIGdldCBEZXN0WzIzOjhdCgltb3ZzLncJCSVkMCwoJWEwKSsJCSMgRGVzdFsyMzo4XSAtPiBERVNUKzB4MQoJYnJhLmIJCUNBU0wyX05PVVBEQVRFMgoJYnJhLmIJCX4rMTYKCkNBU0wyX05PVVBEQVRFMjoKCXJvbC5sCQkmMHg4LCVkMAkJIyBnZXQgRGVzdFs3OjBdCgltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKCW1vdnMuYgkJJWQwLCglYTApCQkjIERlc3RbNzowXSAtPiBERVNUKzB4MwoJYnJhLmIJCUNBU0wyX05PVVBEQVRFMwoJbm9wCglicmEuYgkJfisxNgoKQ0FTTDJfTk9VUERBVEUzOgoJbW92YwkJJWEzLCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cwoJYnJhLncJCWNhc2xfbm91cGRhdGVfZG9uZQoJbm9wCglub3AKCW5vcAoJYnJhLmIJCX4rMTYKCkNBU0wyX0ZJTExFUjoKCW5vcAoJbm9wCglub3AKCW5vcAoJbm9wCglub3AKCW5vcAoJYnJhLmIJCUNBU0wyX1NUQVJUCgojIyMjCiMjIyMKIyBlbmQgbGFiZWwgdXNlZCBieSBfaXNwX2Nhc19pbnJhbmdlKCkKCWdsb2JhbAkJX0NBU0hJCl9DQVNISToK