ZGlmZiAtLWdpdCBhL0JVSUxELmduIGIvQlVJTEQuZ24KaW5kZXggOGI1MDkyYS4uMTFiYmEwOCAxMDA2NDQKLS0tIGEvQlVJTEQuZ24KKysrIGIvQlVJTEQuZ24KQEAgLTcsNyArNywxMCBAQAogCiBjb25maWcoInBkZml1bV9jb25maWciKSB7CiAgIGNmbGFncyA9IFtdCi0gIGluY2x1ZGVfZGlycyA9IFsgInRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUiIF0KKyAgaW5jbHVkZV9kaXJzID0gWworICAgICJ0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlIiwKKyAgICAidGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZSIsCisgIF0KICAgZGVmaW5lcyA9IFsKICAgICAiT1BKX1NUQVRJQyIsCiAgICAgIlY4X0RFUFJFQ0FUSU9OX1dBUk5JTkdTIiwKZGlmZiAtLWdpdCBhL0RFUFMgYi9ERVBTCmluZGV4IGJmMWU2NWIuLmI2ZDdlZmEgMTAwNjQ0Ci0tLSBhL0RFUFMKKysrIGIvREVQUwpAQCAtOCw3ICs4LDcgQEAKICAgICAiaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2J1aWxkdG9vbHMuZ2l0QDQ2Y2U4Y2I2MDM2NGU5ZTBiMjFhODExMzZjN2RlYmRkZGZkMDYzYTgiLAogCiAgICJ0ZXN0aW5nL2NvcnB1cyI6Ci0gICAgICJodHRwczovL3BkZml1bS5nb29nbGVzb3VyY2UuY29tL3BkZml1bV90ZXN0c0AyZGRjZmJkMjNhYTdlZjBhNzQyNGVmMjRhM2ZhYzdhY2RmYjM5ZWU1IiwKKyAgICAgImh0dHBzOi8vcGRmaXVtLmdvb2dsZXNvdXJjZS5jb20vcGRmaXVtX3Rlc3RzQDQ1Zjg4YzY5MTRmY2FjMjZhZDkzMGJiMGViYmZhNDY4YzIxZGIwYTUiLAogCiAgICJ0ZXN0aW5nL2dtb2NrIjoKICAgICAgImh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9leHRlcm5hbC9nb29nbGVtb2NrLmdpdEAyOTc2Mzk2NWFiNTJmMjQ1NjUyOTk5NzZiOTM2ZDEyNjVjYjZhMjcxIiwKZGlmZiAtLWdpdCBhL3BkZml1bS5neXAgYi9wZGZpdW0uZ3lwCmluZGV4IDE3ZDQzMzYuLmFmOGNkNWIgMTAwNjQ0Ci0tLSBhL3BkZml1bS5neXAKKysrIGIvcGRmaXVtLmd5cApAQCAtMjEsNiArMjEsNyBAQAogICAgIF0sCiAgICAgJ2luY2x1ZGVfZGlycyc6IFsKICAgICAgICd0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlJywKKyAgICAgICd0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlJywKICAgICBdLAogICAgICdjb25kaXRpb25zJzogWwogICAgICAgWydwZGZfdXNlX3NraWE9PTEnLCB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9CVUlMRC5nbiBiL3RoaXJkX3BhcnR5L0JVSUxELmduCmluZGV4IGU5ZTUwY2QuLmIxZmM1NDggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L0JVSUxELmduCisrKyBiL3RoaXJkX3BhcnR5L0JVSUxELmduCkBAIC01MSwxNSArNTEsMTUgQEAKICAgXQogICBkZWZpbmVzID0gWyAiRlQyX0JVSUxEX0xJQlJBUlkiIF0KICAgc291cmNlcyA9IFsKLSAgICAiZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS5oIiwKKyAgICAiZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIiwKKyAgICAiZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdG1tLmgiLAorICAgICJmcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3R2YWwuaCIsCisgICAgImZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRvdXRsbi5oIiwKKyAgICAiZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCIsCisgICAgImZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaCIsCisgICAgImZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIiwKKyAgICAiZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oIiwKICAgICAiZnJlZXR5cGUvaW5jbHVkZS9mdDJidWlsZC5oIiwKLSAgICAiZnJlZXR5cGUvaW5jbHVkZS9mdG1tLmgiLAotICAgICJmcmVldHlwZS9pbmNsdWRlL2Z0b3R2YWwuaCIsCi0gICAgImZyZWV0eXBlL2luY2x1ZGUvZnRvdXRsbi5oIiwKLSAgICAiZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdG9ianMuaCIsCi0gICAgImZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnRzdHJlYW0uaCIsCi0gICAgImZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvdHR0eXBlcy5oIiwKLSAgICAiZnJlZXR5cGUvaW5jbHVkZS90dHRhYmxlcy5oIiwKICAgICAiZnJlZXR5cGUvc3JjL2Jhc2UvZnRiYXNlLmMiLAogICAgICJmcmVldHlwZS9zcmMvYmFzZS9mdGJhc2UuaCIsCiAgICAgImZyZWV0eXBlL3NyYy9iYXNlL2Z0Yml0bWFwLmMiLApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvMDAwMC1pbmNsdWRlLnBhdGNoIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvMDAwMC1pbmNsdWRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDc4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS8wMDAwLWluY2x1ZGUucGF0Y2gKQEAgLTAsMCArMSwxMjAgQEAKK2RpZmYgLXJ1IGZyZWV0eXBlLTIuNi4xL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmggaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaAorLS0tIGZyZWV0eXBlLTIuNi4xL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmgJMjAxNS0xMS0wNSAxMzo1MjozNi43MzQ3MzMxODYgLTA4MDAKKysrKyBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oCTIwMTUtMTEtMDUgMTM6NDQ6NTQuNDQ1NDc5ODIyIC0wODAwCitAQCAtMSwzICsxLDIwIEBACisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworKy8qICBmdG1vZHVsZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysvKiAgICBGcmVlVHlwZSBtb2R1bGVzIHB1YmxpYyBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLworKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrLyogIENvcHlyaWdodCAxOTk2LTIwMDEsIDIwMDIsIDIwMDMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKysvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisrLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKysvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKyAvKgorICAqICBUaGlzIGZpbGUgcmVnaXN0ZXJzIHRoZSBGcmVlVHlwZSBtb2R1bGVzIGNvbXBpbGVkIGludG8gdGhlIGxpYnJhcnkuCisgICoKK0BAIC0xMCwxNSArMjcsMTUgQEAKKyAgKgorICAqLworIAorLUZUX1VTRV9NT0RVTEUoIEZUX01vZHVsZV9DbGFzcywgYXV0b2ZpdF9tb2R1bGVfY2xhc3MgKQorKy8vRlRfVVNFX01PRFVMRSggRlRfTW9kdWxlX0NsYXNzLCBhdXRvZml0X21vZHVsZV9jbGFzcyApCisgRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCB0dF9kcml2ZXJfY2xhc3MgKQorIEZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgdDFfZHJpdmVyX2NsYXNzICkKKyBGVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIGNmZl9kcml2ZXJfY2xhc3MgKQorIEZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgdDFjaWRfZHJpdmVyX2NsYXNzICkKKy1GVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHBmcl9kcml2ZXJfY2xhc3MgKQorLUZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgdDQyX2RyaXZlcl9jbGFzcyApCistRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCB3aW5mbnRfZHJpdmVyX2NsYXNzICkKKy1GVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHBjZl9kcml2ZXJfY2xhc3MgKQorKy8vRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCBwZnJfZHJpdmVyX2NsYXNzICkKKysvL0ZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgdDQyX2RyaXZlcl9jbGFzcyApCisrLy9GVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHdpbmZudF9kcml2ZXJfY2xhc3MgKQorKy8vRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCBwY2ZfZHJpdmVyX2NsYXNzICkKKyBGVF9VU0VfTU9EVUxFKCBGVF9Nb2R1bGVfQ2xhc3MsIHBzYXV4X21vZHVsZV9jbGFzcyApCisgRlRfVVNFX01PRFVMRSggRlRfTW9kdWxlX0NsYXNzLCBwc25hbWVzX21vZHVsZV9jbGFzcyApCisgRlRfVVNFX01PRFVMRSggRlRfTW9kdWxlX0NsYXNzLCBwc2hpbnRlcl9tb2R1bGVfY2xhc3MgKQorQEAgLTI3LDYgKzQ0LDYgQEAKKyBGVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfc21vb3RoX3JlbmRlcmVyX2NsYXNzICkKKyBGVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzcyApCisgRlRfVVNFX01PRFVMRSggRlRfUmVuZGVyZXJfQ2xhc3MsIGZ0X3Ntb290aF9sY2R2X3JlbmRlcmVyX2NsYXNzICkKKy1GVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIGJkZl9kcml2ZXJfY2xhc3MgKQorKy8vRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCBiZGZfZHJpdmVyX2NsYXNzICkKKyAKKyAvKiBFT0YgKi8KK2RpZmYgLXJ1IGZyZWV0eXBlLTIuNi4xL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmggaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAorLS0tIGZyZWV0eXBlLTIuNi4xL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgJMjAxNS0xMS0wNSAxMzo1MjozNi43MzQ3MzMxODYgLTA4MDAKKysrKyBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCTIwMTUtMTEtMDUgMTM6NDQ6NTQuNDQ1NDc5ODIyIC0wODAwCitAQCAtOTIsNyArOTIsNyBAQAorICAgLyogVGhpcyBpcyBkb25lIHRvIGFsbG93IEZyZWVUeXBlIGNsaWVudHMgdG8gcnVuIHVubW9kaWZpZWQsIGZvcmNpbmcgICAgICovCisgICAvKiB0aGVtIHRvIGRpc3BsYXkgbm9ybWFsIGdyYXktbGV2ZWwgYW50aS1hbGlhc2VkIGdseXBocy4gICAgICAgICAgICAgICAgKi8KKyAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLS8qICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgKi8KKysjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HCisgCisgCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0BAIC0xNjMsNyArMTYzLDcgQEAKKyAgIC8qICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgYGZlYXR1cmUnLiAgU2VlIGFsc28gICAqLworICAgLyogICB0aGUgbWFjcm8gRlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQiBiZWxvdy4gICAgICAgICAgICAgICAgICAgICAgICovCisgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0jZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fVVNFX1pMSUIKKysvLyNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9VU0VfWkxJQgorIAorIAorICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitAQCAtMzM2LDcgKzMzNiw3IEBACisgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgIC8qICAgTm90ZSB0aGF0IHRoZSBgRk9ORCcgcmVzb3VyY2UgaXNuJ3QgY2hlY2tlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX01BQ19GT05UUworKyN1bmRlZiBGVF9DT05GSUdfT1BUSU9OX01BQ19GT05UUworIAorIAorICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitAQCAtNTEyLDcgKzUxMiw3IEBACisgICAvKiBlbWJlZGRlZCBiaXRtYXBzIGluIGFsbCBmb3JtYXRzIHVzaW5nIHRoZSBTRk5UIG1vZHVsZSAobmFtZWx5ICAgICAgICAgKi8KKyAgIC8qIFRydWVUeXBlICYgT3BlblR5cGUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMKKysjdW5kZWYgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTCisgCisgCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0BAIC02ODEsNyArNjgxLDcgQEAKKyAgIC8qIGFuZCBhdmFyIHRhYmxlcykuICBUaGlzIGhhcyBtYW55IHNpbWlsYXJpdGllcyB0byBUeXBlIDEgTXVsdGlwbGUgICAgICAqLworICAgLyogTWFzdGVycyBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0jZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKysjdW5kZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorIAorIAorICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitAQCAtNjg5LDcgKzY4OSw3IEBACisgICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9CREYgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciAgICAgICAgKi8KKyAgIC8qIGFuIGVtYmVkZGVkIGBCREYgJyB0YWJsZSB3aXRoaW4gU0ZOVC1iYXNlZCBiaXRtYXAgZm9ybWF0cy4gICAgICAgICAgICAqLworICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX0JERgorKyN1bmRlZiBUVF9DT05GSUdfT1BUSU9OX0JERgorIAorIAorICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitAQCAtNzI1LDcgKzcyNSw3IEBACisgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgIC8qIFRoZSBDaGluZXNlIGZvbnQgTWluZ1RpRUctTWVkaXVtIChDTlMgMTE2NDMgY2hhcmFjdGVyIHNldCkgbmVlZHMgMjU2LiAqLworICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistI2RlZmluZSBUMV9NQVhfQ0hBUlNUUklOR1NfT1BFUkFORFMgIDI1NgorKyNkZWZpbmUgVDFfTUFYX0NIQVJTVFJJTkdTX09QRVJBTkRTICA1MTIKKyAKKyAKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworT25seSBpbiBmcmVldHlwZS0yLjYuMS9pbmNsdWRlL2ZyZWV0eXBlOiBmdGNoYXB0ZXJzLmgKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL0ZUTC5UWFQgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9GVEwuVFhUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYWJhMzMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9GVEwuVFhUCkBAIC0wLDAgKzEsMTY5IEBACisgICAgICAgICAgICAgICAgICAgIFRoZSBGcmVlVHlwZSBQcm9qZWN0IExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwNi1KYW4tMjcKKworICAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgMTk5Ni0yMDAyLCAyMDA2IGJ5CisgICAgICAgICAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnCisKKworCitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorCisgIFRoZSBGcmVlVHlwZSAgUHJvamVjdCBpcyBkaXN0cmlidXRlZCBpbiAgc2V2ZXJhbCBhcmNoaXZlIHBhY2thZ2VzOworICBzb21lIG9mIHRoZW0gbWF5IGNvbnRhaW4sIGluIGFkZGl0aW9uIHRvIHRoZSBGcmVlVHlwZSBmb250IGVuZ2luZSwKKyAgdmFyaW91cyB0b29scyBhbmQgIGNvbnRyaWJ1dGlvbnMgd2hpY2ggcmVseSBvbiwgb3IgIHJlbGF0ZSB0bywgdGhlCisgIEZyZWVUeXBlIFByb2plY3QuCisKKyAgVGhpcyAgbGljZW5zZSBhcHBsaWVzICB0byBhbGwgIGZpbGVzIGZvdW5kICBpbiBzdWNoICBwYWNrYWdlcywgYW5kCisgIHdoaWNoIGRvIG5vdCAgZmFsbCB1bmRlciB0aGVpciBvd24gZXhwbGljaXQgIGxpY2Vuc2UuICBUaGUgbGljZW5zZQorICBhZmZlY3RzICB0aHVzICB0aGUgIEZyZWVUeXBlICAgZm9udCAgZW5naW5lLCAgdGhlICB0ZXN0ICBwcm9ncmFtcywKKyAgZG9jdW1lbnRhdGlvbiBhbmQgbWFrZWZpbGVzLCBhdCB0aGUgdmVyeSBsZWFzdC4KKworICBUaGlzICBsaWNlbnNlICAgd2FzICBpbnNwaXJlZCAgYnkgIHRoZSAgQlNELCAgIEFydGlzdGljLCAgYW5kICBJSkcKKyAgKEluZGVwZW5kZW50IEpQRUcgIEdyb3VwKSBsaWNlbnNlcywgd2hpY2ggIGFsbCBlbmNvdXJhZ2UgaW5jbHVzaW9uCisgIGFuZCAgdXNlIG9mICBmcmVlICBzb2Z0d2FyZSBpbiAgY29tbWVyY2lhbCAgYW5kIGZyZWV3YXJlICBwcm9kdWN0cworICBhbGlrZS4gIEFzIGEgY29uc2VxdWVuY2UsIGl0cyBtYWluIHBvaW50cyBhcmUgdGhhdDoKKworICAgIG8gV2UgZG9uJ3QgcHJvbWlzZSB0aGF0IHRoaXMgc29mdHdhcmUgd29ya3MuIEhvd2V2ZXIsIHdlIHdpbGwgYmUKKyAgICAgIGludGVyZXN0ZWQgaW4gYW55IGtpbmQgb2YgYnVnIHJlcG9ydHMuIChgYXMgaXMnIGRpc3RyaWJ1dGlvbikKKworICAgIG8gWW91IGNhbiAgdXNlIHRoaXMgc29mdHdhcmUgZm9yIHdoYXRldmVyIHlvdSAgd2FudCwgaW4gcGFydHMgb3IKKyAgICAgIGZ1bGwgZm9ybSwgd2l0aG91dCBoYXZpbmcgdG8gcGF5IHVzLiAoYHJveWFsdHktZnJlZScgdXNhZ2UpCisKKyAgICBvIFlvdSBtYXkgbm90IHByZXRlbmQgdGhhdCAgeW91IHdyb3RlIHRoaXMgc29mdHdhcmUuICBJZiB5b3UgdXNlCisgICAgICBpdCwgb3IgIG9ubHkgcGFydHMgb2YgaXQsICBpbiBhIHByb2dyYW0sICB5b3UgbXVzdCBhY2tub3dsZWRnZQorICAgICAgc29tZXdoZXJlICBpbiAgeW91ciAgZG9jdW1lbnRhdGlvbiAgdGhhdCAgeW91ICBoYXZlICB1c2VkICB0aGUKKyAgICAgIEZyZWVUeXBlIGNvZGUuIChgY3JlZGl0cycpCisKKyAgV2UgIHNwZWNpZmljYWxseSAgcGVybWl0ICBhbmQgIGVuY291cmFnZSAgdGhlICBpbmNsdXNpb24gIG9mICB0aGlzCisgIHNvZnR3YXJlLCB3aXRoICBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsICBpbiBjb21tZXJjaWFsIHByb2R1Y3RzLgorICBXZSAgZGlzY2xhaW0gIGFsbCB3YXJyYW50aWVzICBjb3ZlcmluZyAgVGhlICBGcmVlVHlwZSBQcm9qZWN0ICBhbmQKKyAgYXNzdW1lIG5vIGxpYWJpbGl0eSByZWxhdGVkIHRvIFRoZSBGcmVlVHlwZSBQcm9qZWN0LgorCisKKyAgRmluYWxseSwgIG1hbnkgIHBlb3BsZSAgYXNrZWQgIHVzICBmb3IgIGEgIHByZWZlcnJlZCAgZm9ybSAgZm9yICBhCisgIGNyZWRpdC9kaXNjbGFpbWVyIHRvIHVzZSBpbiBjb21wbGlhbmNlIHdpdGggdGhpcyBsaWNlbnNlLiAgV2UgdGh1cworICBlbmNvdXJhZ2UgeW91IHRvIHVzZSB0aGUgZm9sbG93aW5nIHRleHQ6CisKKyAgICIiIgorICAgIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgYXJlIGNvcHlyaWdodCCpIDx5ZWFyPiBUaGUgRnJlZVR5cGUKKyAgICBQcm9qZWN0ICh3d3cuZnJlZXR5cGUub3JnKS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAiIiIKKworICBQbGVhc2UgcmVwbGFjZSA8eWVhcj4gd2l0aCB0aGUgdmFsdWUgZnJvbSB0aGUgRnJlZVR5cGUgdmVyc2lvbiB5b3UKKyAgYWN0dWFsbHkgdXNlLgorCisKK0xlZ2FsIFRlcm1zCis9PT09PT09PT09PQorCiswLiBEZWZpbml0aW9ucworLS0tLS0tLS0tLS0tLS0KKworICBUaHJvdWdob3V0IHRoaXMgbGljZW5zZSwgIHRoZSB0ZXJtcyBgcGFja2FnZScsIGBGcmVlVHlwZSBQcm9qZWN0JywKKyAgYW5kICBgRnJlZVR5cGUgIGFyY2hpdmUnIHJlZmVyICB0byAgdGhlICBzZXQgIG9mIGZpbGVzICBvcmlnaW5hbGx5CisgIGRpc3RyaWJ1dGVkICBieSB0aGUgIGF1dGhvcnMgIChEYXZpZCBUdXJuZXIsICBSb2JlcnQgV2lsaGVsbSwgIGFuZAorICBXZXJuZXIgTGVtYmVyZykgYXMgdGhlIGBGcmVlVHlwZSBQcm9qZWN0JywgYmUgdGhleSBuYW1lZCBhcyBhbHBoYSwKKyAgYmV0YSBvciBmaW5hbCByZWxlYXNlLgorCisgIGBZb3UnIHJlZmVycyB0byAgdGhlIGxpY2Vuc2VlLCBvciBwZXJzb24gdXNpbmcgIHRoZSBwcm9qZWN0LCB3aGVyZQorICBgdXNpbmcnIGlzIGEgZ2VuZXJpYyB0ZXJtIGluY2x1ZGluZyBjb21waWxpbmcgdGhlIHByb2plY3QncyBzb3VyY2UKKyAgY29kZSBhcyAgd2VsbCBhcyBsaW5raW5nIGl0ICB0byBmb3JtIGEgIGBwcm9ncmFtJyBvciBgZXhlY3V0YWJsZScuCisgIFRoaXMgIHByb2dyYW0gaXMgIHJlZmVycmVkIHRvICBhcyAgYGEgcHJvZ3JhbSAgdXNpbmcgdGhlICBGcmVlVHlwZQorICBlbmdpbmUnLgorCisgIFRoaXMgIGxpY2Vuc2UgYXBwbGllcyAgdG8gYWxsICBmaWxlcyBkaXN0cmlidXRlZCAgaW4gIHRoZSBvcmlnaW5hbAorICBGcmVlVHlwZSAgUHJvamVjdCwgICBpbmNsdWRpbmcgIGFsbCAgc291cmNlICAgY29kZSwgIGJpbmFyaWVzICBhbmQKKyAgZG9jdW1lbnRhdGlvbiwgIHVubGVzcyAgb3RoZXJ3aXNlICBzdGF0ZWQgICBpbiAgdGhlICBmaWxlICBpbiAgaXRzCisgIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGZvcm0gYXMgIGRpc3RyaWJ1dGVkIGluIHRoZSBvcmlnaW5hbCBhcmNoaXZlLgorICBJZiB5b3UgYXJlICB1bnN1cmUgd2hldGhlciBvciBub3QgYSBwYXJ0aWN1bGFyICBmaWxlIGlzIGNvdmVyZWQgYnkKKyAgdGhpcyBsaWNlbnNlLCB5b3UgbXVzdCBjb250YWN0IHVzIHRvIHZlcmlmeSB0aGlzLgorCisgIFRoZSBGcmVlVHlwZSAgUHJvamVjdCBpcyBjb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCAgYnkgRGF2aWQgVHVybmVyLAorICBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgQWxsIHJpZ2h0cyByZXNlcnZlZCBleGNlcHQgYXMKKyAgc3BlY2lmaWVkIGJlbG93LgorCisxLiBObyBXYXJyYW50eQorLS0tLS0tLS0tLS0tLS0KKworICBUSEUgRlJFRVRZUEUgUFJPSkVDVCAgSVMgUFJPVklERUQgYEFTIElTJyBXSVRIT1VUICBXQVJSQU5UWSBPRiBBTlkKKyAgS0lORCwgRUlUSEVSICBFWFBSRVNTIE9SIElNUExJRUQsICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgVE8sCisgIFdBUlJBTlRJRVMgIE9GICBNRVJDSEFOVEFCSUxJVFkgICBBTkQgIEZJVE5FU1MgIEZPUiAgQSAgUEFSVElDVUxBUgorICBQVVJQT1NFLiAgSU4gTk8gRVZFTlQgV0lMTCBBTlkgT0YgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAgQkUgTElBQkxFICBGT1IgQU5ZIERBTUFHRVMgQ0FVU0VEICBCWSBUSEUgVVNFIE9SICBUSEUgSU5BQklMSVRZIFRPCisgIFVTRSwgT0YgVEhFIEZSRUVUWVBFIFBST0pFQ1QuCisKKzIuIFJlZGlzdHJpYnV0aW9uCistLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgIGxpY2Vuc2UgIGdyYW50cyAgYSAgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsICBwZXJwZXR1YWwgIGFuZAorICBpcnJldm9jYWJsZSByaWdodCAgYW5kIGxpY2Vuc2UgdG8gdXNlLCAgZXhlY3V0ZSwgcGVyZm9ybSwgY29tcGlsZSwKKyAgZGlzcGxheSwgIGNvcHksICAgY3JlYXRlICBkZXJpdmF0aXZlICB3b3JrcyAgIG9mLCAgZGlzdHJpYnV0ZSAgYW5kCisgIHN1YmxpY2Vuc2UgdGhlICBGcmVlVHlwZSBQcm9qZWN0IChpbiAgYm90aCBzb3VyY2UgYW5kICBvYmplY3QgY29kZQorICBmb3JtcykgIGFuZCAgZGVyaXZhdGl2ZSB3b3JrcyAgdGhlcmVvZiAgZm9yICBhbnkgIHB1cnBvc2U7IGFuZCAgdG8KKyAgYXV0aG9yaXplIG90aGVycyAgdG8gZXhlcmNpc2UgIHNvbWUgb3IgYWxsICBvZiB0aGUgIHJpZ2h0cyBncmFudGVkCisgIGhlcmVpbiwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICBvIFJlZGlzdHJpYnV0aW9uIG9mICBzb3VyY2UgY29kZSAgbXVzdCByZXRhaW4gdGhpcyAgbGljZW5zZSBmaWxlCisgICAgICAoYEZUTC5UWFQnKSB1bmFsdGVyZWQ7IGFueSAgYWRkaXRpb25zLCBkZWxldGlvbnMgb3IgY2hhbmdlcyB0bworICAgICAgdGhlIG9yaWdpbmFsICBmaWxlcyBtdXN0IGJlIGNsZWFybHkgIGluZGljYXRlZCBpbiBhY2NvbXBhbnlpbmcKKyAgICAgIGRvY3VtZW50YXRpb24uICAgVGhlICBjb3B5cmlnaHQgICBub3RpY2VzICBvZiAgdGhlICB1bmFsdGVyZWQsCisgICAgICBvcmlnaW5hbCAgZmlsZXMgbXVzdCAgYmUgIHByZXNlcnZlZCBpbiAgYWxsICBjb3BpZXMgb2YgIHNvdXJjZQorICAgICAgZmlsZXMuCisKKyAgICBvIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcHJvdmlkZSBhICBkaXNjbGFpbWVyICB0aGF0CisgICAgICBzdGF0ZXMgIHRoYXQgIHRoZSBzb2Z0d2FyZSBpcyBiYXNlZCBpbiBwYXJ0IG9mIHRoZSB3b3JrIG9mIHRoZQorICAgICAgRnJlZVR5cGUgVGVhbSwgIGluICB0aGUgIGRpc3RyaWJ1dGlvbiAgZG9jdW1lbnRhdGlvbi4gIFdlIGFsc28KKyAgICAgIGVuY291cmFnZSB5b3UgdG8gcHV0IGFuIFVSTCB0byB0aGUgRnJlZVR5cGUgd2ViIHBhZ2UgIGluICB5b3VyCisgICAgICBkb2N1bWVudGF0aW9uLCB0aG91Z2ggdGhpcyBpc24ndCBtYW5kYXRvcnkuCisKKyAgVGhlc2UgY29uZGl0aW9ucyAgYXBwbHkgdG8gYW55ICBzb2Z0d2FyZSBkZXJpdmVkIGZyb20gb3IgIGJhc2VkIG9uCisgIHRoZSBGcmVlVHlwZSBQcm9qZWN0LCAgbm90IGp1c3QgdGhlIHVubW9kaWZpZWQgZmlsZXMuICAgSWYgeW91IHVzZQorICBvdXIgd29yaywgeW91ICBtdXN0IGFja25vd2xlZGdlIHVzLiAgSG93ZXZlciwgbm8gIGZlZSBuZWVkIGJlIHBhaWQKKyAgdG8gdXMuCisKKzMuIEFkdmVydGlzaW5nCistLS0tLS0tLS0tLS0tLQorCisgIE5laXRoZXIgdGhlICBGcmVlVHlwZSBhdXRob3JzIGFuZCAgY29udHJpYnV0b3JzIG5vciB5b3UgIHNoYWxsIHVzZQorICB0aGUgbmFtZSBvZiB0aGUgIG90aGVyIGZvciBjb21tZXJjaWFsLCBhZHZlcnRpc2luZywgb3IgcHJvbW90aW9uYWwKKyAgcHVycG9zZXMgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgV2Ugc3VnZ2VzdCwgIGJ1dCBkbyBub3QgcmVxdWlyZSwgdGhhdCAgeW91IHVzZSBvbmUgb3IgIG1vcmUgb2YgdGhlCisgIGZvbGxvd2luZyBwaHJhc2VzIHRvIHJlZmVyICB0byB0aGlzIHNvZnR3YXJlIGluIHlvdXIgZG9jdW1lbnRhdGlvbgorICBvciBhZHZlcnRpc2luZyAgbWF0ZXJpYWxzOiBgRnJlZVR5cGUgUHJvamVjdCcsICBgRnJlZVR5cGUgRW5naW5lJywKKyAgYEZyZWVUeXBlIGxpYnJhcnknLCBvciBgRnJlZVR5cGUgRGlzdHJpYnV0aW9uJy4KKworICBBcyAgeW91IGhhdmUgIG5vdCBzaWduZWQgIHRoaXMgbGljZW5zZSwgIHlvdSBhcmUgIG5vdCAgcmVxdWlyZWQgdG8KKyAgYWNjZXB0ICBpdC4gICBIb3dldmVyLCAgYXMgIHRoZSBGcmVlVHlwZSAgUHJvamVjdCAgaXMgIGNvcHlyaWdodGVkCisgIG1hdGVyaWFsLCBvbmx5ICB0aGlzIGxpY2Vuc2UsIG9yICBhbm90aGVyIG9uZSBjb250cmFjdGVkICB3aXRoIHRoZQorICBhdXRob3JzLCBncmFudHMgeW91ICB0aGUgcmlnaHQgdG8gdXNlLCBkaXN0cmlidXRlLCAgYW5kIG1vZGlmeSBpdC4KKyAgVGhlcmVmb3JlLCAgYnkgIHVzaW5nLCAgZGlzdHJpYnV0aW5nLCAgb3IgbW9kaWZ5aW5nICB0aGUgIEZyZWVUeXBlCisgIFByb2plY3QsIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgYWxsIHRoZSB0ZXJtcworICBvZiB0aGlzIGxpY2Vuc2UuCisKKzQuIENvbnRhY3RzCistLS0tLS0tLS0tLQorCisgIFRoZXJlIGFyZSB0d28gbWFpbGluZyBsaXN0cyByZWxhdGVkIHRvIEZyZWVUeXBlOgorCisgICAgbyBmcmVldHlwZUBub25nbnUub3JnCisKKyAgICAgIERpc2N1c3NlcyBnZW5lcmFsIHVzZSBhbmQgYXBwbGljYXRpb25zIG9mIEZyZWVUeXBlLCBhcyB3ZWxsIGFzCisgICAgICBmdXR1cmUgYW5kICB3YW50ZWQgYWRkaXRpb25zIHRvIHRoZSAgbGlicmFyeSBhbmQgZGlzdHJpYnV0aW9uLgorICAgICAgSWYgIHlvdSBhcmUgbG9va2luZyAgZm9yIHN1cHBvcnQsICBzdGFydCBpbiAgdGhpcyBsaXN0ICBpZiB5b3UKKyAgICAgIGhhdmVuJ3QgZm91bmQgYW55dGhpbmcgdG8gaGVscCB5b3UgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKKyAgICBvIGZyZWV0eXBlLWRldmVsQG5vbmdudS5vcmcKKworICAgICAgRGlzY3Vzc2VzIGJ1Z3MsICBhcyB3ZWxsICBhcyBlbmdpbmUgaW50ZXJuYWxzLCAgZGVzaWduIGlzc3VlcywKKyAgICAgIHNwZWNpZmljIGxpY2Vuc2VzLCBwb3J0aW5nLCBldGMuCisKKyAgT3VyIGhvbWUgcGFnZSBjYW4gYmUgZm91bmQgYXQKKworICAgIGh0dHA6Ly93d3cuZnJlZXR5cGUub3JnCisKKworLS0tIGVuZCBvZiBGVEwuVFhUIC0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvUkVBRE1FLnBkZml1bSBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL1JFQURNRS5wZGZpdW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhmYWQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL1JFQURNRS5wZGZpdW0KQEAgLTAsMCArMSwzNCBAQAorTmFtZTogRnJlZVR5cGUKK1VSTDogaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvCitWZXJzaW9uOiAyLjYuMQorU2VjdXJpdHkgQ3JpdGljYWw6IHllcworTGljZW5zZTogRnJlZVR5cGUgTGljZW5zZSAoRlRMKQorTGljZW5zZSBGaWxlOiBGVEwuVFhUCisKK0Rlc2NyaXB0aW9uOgorRnJlZVR5cGUgbGlicmFyeS4KKworTG9jYWwgTW9kaWZpY2F0aW9uczoKKworMDAwMC1pbmNsdWRlLnBhdGNoOiBNb2RpZmljYXRpb25zIHRvIGNvbmZpZ3VyYXRpb24gaGVhZGVyIGZpbGVzLgorCitpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2hhcGVycy5oIGlzIG5vdCBpbmNsdWRlZC4KKworVGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyBpbiBzcmMvIGFyZSBub3QgaW5jbHVkZWQgZnJvbQordXBzdHJlYW0gRnJlZVR5cGUgYXMgdGhleSBhcmUgbmV2ZXIgdXNlZDoKKworYXV0b2ZpdAorYmRmCitiemlwMgorY2FjaGUKK2d4dmFsaWQKK2d6aXAKK0phbWZpbGUKK2x6dworb3R2YWxpZAorcGNmCitwZnIKK3Rvb2xzCit0eXBlNDIKK3dpbmZvbnRzCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgKaW5kZXggMjJkNzBmZC4uZDRkNzk5MyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9jb25maWcvZnRjb25maWcuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFOU0ktc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDQsIDIwMDYtMjAwOCwgMjAxMC0yMDExLCAyMDEzLCAyMDE0IGJ5ICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zMTksMTEgKzMxOSwyOCBAQAogI2VuZGlmCiAKIAorICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIG1pc2NlbGxhbmVvdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwogI2RlZmluZSBGVF9CRUdJTl9TVE1OVCAgZG8gewogI2RlZmluZSBGVF9FTkRfU1RNTlQgICAgfSB3aGlsZSAoIDAgKQogI2RlZmluZSBGVF9EVU1NWV9TVE1OVCAgRlRfQkVHSU5fU1RNTlQgRlRfRU5EX1NUTU5UCiAKIAorICAvKiB0eXBlb2YgY29uZGl0aW9uIHRha2VuIGZyb20gZ251bGliJ3MgYGludHByb3BzLmgnIGhlYWRlciBmaWxlICovCisjaWYgKCBfX0dOVUNfXyA+PSAyICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKKyAgICAgIGRlZmluZWQoIF9fSUJNX19UWVBFT0ZfXyApICAgICAgICAgICAgfHwgXAorICAgICAgKCBfX1NVTlBST19DID49IDB4NTExMCAmJiAhX19TVERDX18gKSApCisjZGVmaW5lIEZUX1RZUEVPRiggdHlwZSApICAoX190eXBlb2ZfXyAodHlwZSkpCisjZWxzZQorI2RlZmluZSBGVF9UWVBFT0YoIHR5cGUgKSAgLyogZW1wdHkgKi8KKyNlbmRpZgorCisKICNpZmRlZiBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCiAKICNkZWZpbmUgRlRfTE9DQUwoIHggKSAgICAgIHN0YXRpYyAgeApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9jb25maWcvZnRoZWFkZXIuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmgKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9jb25maWcvZnRoZWFkZXIuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaAppbmRleCBiNjIzNjI5Li41NWY4MzNkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2NvbmZpZy9mdGhlYWRlci5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQnVpbGQgbWFjcm9zIG9mIHRoZSBGcmVlVHlwZSAyIGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwOCwgMjAxMCwgMjAxMiwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgKgogICAgKi8KICNpZm5kZWYgRlRfQ09ORklHX0NPTkZJR19ICi0jZGVmaW5lIEZUX0NPTkZJR19DT05GSUdfSCAgPGNvbmZpZy9mdGNvbmZpZy5oPgorI2RlZmluZSBGVF9DT05GSUdfQ09ORklHX0ggIDxmcmVldHlwZS9jb25maWcvZnRjb25maWcuaD4KICNlbmRpZgogCiAKQEAgLTEyMiw3ICsxMjIsNyBAQAogICAgKgogICAgKi8KICNpZm5kZWYgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSAotI2RlZmluZSBGVF9DT05GSUdfU1RBTkRBUkRfTElCUkFSWV9IICA8Y29uZmlnL2Z0c3RkbGliLmg+CisjZGVmaW5lIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0ggIDxmcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaD4KICNlbmRpZgogCiAKQEAgLTEzNyw3ICsxMzcsNyBAQAogICAgKgogICAgKi8KICNpZm5kZWYgRlRfQ09ORklHX09QVElPTlNfSAotI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OU19IICA8Y29uZmlnL2Z0b3B0aW9uLmg+CisjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05TX0ggIDxmcmVldHlwZS9jb25maWcvZnRvcHRpb24uaD4KICNlbmRpZgogCiAKQEAgLTE1Myw3ICsxNTMsNyBAQAogICAgKgogICAgKi8KICNpZm5kZWYgRlRfQ09ORklHX01PRFVMRVNfSAotI2RlZmluZSBGVF9DT05GSUdfTU9EVUxFU19IICA8Y29uZmlnL2Z0bW9kdWxlLmg+CisjZGVmaW5lIEZUX0NPTkZJR19NT0RVTEVTX0ggIDxmcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaD4KICNlbmRpZgogCiAgIC8qICovCkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICogICBiYXNlIEZyZWVUeXBlfjIgQVBJLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfRlJFRVRZUEVfSCAgPGZyZWV0eXBlLmg+CisjZGVmaW5lIEZUX0ZSRUVUWVBFX0ggIDxmcmVldHlwZS9mcmVldHlwZS5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgKiAgIEl0IGlzIGluY2x1ZGVkIGJ5IEBGVF9GUkVFVFlQRV9ILgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfRVJST1JTX0ggIDxmdGVycm9ycy5oPgorI2RlZmluZSBGVF9FUlJPUlNfSCAgPGZyZWV0eXBlL2Z0ZXJyb3JzLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTk4LDcgKzE5OCw3IEBACiAgICAqICAgbGlzdCBvZiBGcmVlVHlwZX4yIG1vZHVsZSBlcnJvciBvZmZzZXRzIChhbmQgbWVzc2FnZXMpLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfTU9EVUxFX0VSUk9SU19IICA8ZnRtb2RlcnIuaD4KKyNkZWZpbmUgRlRfTU9EVUxFX0VSUk9SU19IICA8ZnJlZXR5cGUvZnRtb2RlcnIuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yMTQsNyArMjE0LDcgQEAKICAgICogICBJdCBpcyBpbmNsdWRlZCBieSBARlRfRlJFRVRZUEVfSC4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX1NZU1RFTV9IICA8ZnRzeXN0ZW0uaD4KKyNkZWZpbmUgRlRfU1lTVEVNX0ggIDxmcmVldHlwZS9mdHN5c3RlbS5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIzMCw3ICsyMzAsNyBAQAogICAgKiAgIEl0IGlzIGluY2x1ZGVkIGJ5IEBGVF9GUkVFVFlQRV9ILgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfSU1BR0VfSCAgPGZ0aW1hZ2UuaD4KKyNkZWZpbmUgRlRfSU1BR0VfSCAgPGZyZWV0eXBlL2Z0aW1hZ2UuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNDUsNyArMjQ1LDcgQEAKICAgICogICBJdCBpcyBpbmNsdWRlZCBieSBARlRfRlJFRVRZUEVfSC4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX1RZUEVTX0ggIDxmdHR5cGVzLmg+CisjZGVmaW5lIEZUX1RZUEVTX0ggIDxmcmVldHlwZS9mdHR5cGVzLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjYwLDcgKzI2MCw3IEBACiAgICAqICAgKE1vc3QgYXBwbGljYXRpb25zIHdpbGwgbmV2ZXIgbmVlZCB0byBpbmNsdWRlIHRoaXMgZmlsZS4pCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9MSVNUX0ggIDxmdGxpc3QuaD4KKyNkZWZpbmUgRlRfTElTVF9IICA8ZnJlZXR5cGUvZnRsaXN0Lmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjczLDcgKzI3Myw3IEBACiAgICAqICAgc2NhbGFibGUgb3V0bGluZSBtYW5hZ2VtZW50IEFQSSBvZiBGcmVlVHlwZX4yLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfT1VUTElORV9IICA8ZnRvdXRsbi5oPgorI2RlZmluZSBGVF9PVVRMSU5FX0ggIDxmcmVldHlwZS9mdG91dGxuLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjg2LDcgKzI4Niw3IEBACiAgICAqICAgQVBJIHdoaWNoIG1hbmFnZXMgbXVsdGlwbGUgQEZUX1NpemUgb2JqZWN0cyBwZXIgZmFjZS4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX1NJWkVTX0ggIDxmdHNpemVzLmg+CisjZGVmaW5lIEZUX1NJWkVTX0ggIDxmcmVldHlwZS9mdHNpemVzLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjk5LDcgKzI5OSw3IEBACiAgICAqICAgbW9kdWxlIG1hbmFnZW1lbnQgQVBJIG9mIEZyZWVUeXBlfjIuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9NT0RVTEVfSCAgPGZ0bW9kYXBpLmg+CisjZGVmaW5lIEZUX01PRFVMRV9IICA8ZnJlZXR5cGUvZnRtb2RhcGkuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMTIsNyArMzEyLDcgQEAKICAgICogICByZW5kZXJlciBtb2R1bGUgbWFuYWdlbWVudCBBUEkgb2YgRnJlZVR5cGV+Mi4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX1JFTkRFUl9IICA8ZnRyZW5kZXIuaD4KKyNkZWZpbmUgRlRfUkVOREVSX0ggIDxmcmVldHlwZS9mdHJlbmRlci5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMyNSw3ICszMjUsNyBAQAogICAgKiAgIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyByZWxhdGVkIHRvIHRoZSBhdXRvLWhpbnRpbmcgbW9kdWxlLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfQVVUT0hJTlRFUl9IICA8ZnRhdXRvaC5oPgorI2RlZmluZSBGVF9BVVRPSElOVEVSX0ggIDxmcmVldHlwZS9mdGF1dG9oLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzM4LDcgKzMzOCw3IEBACiAgICAqICAgc3RydWN0dXJlcyBhbmQgbWFjcm9zIHJlbGF0ZWQgdG8gdGhlIENGRiBkcml2ZXIgbW9kdWxlLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfQ0ZGX0RSSVZFUl9IICA8ZnRjZmZkcnYuaD4KKyNkZWZpbmUgRlRfQ0ZGX0RSSVZFUl9IICA8ZnJlZXR5cGUvZnRjZmZkcnYuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNTEsNyArMzUxLDcgQEAKICAgICogICBzdHJ1Y3R1cmVzIGFuZCBtYWNyb3MgcmVsYXRlZCB0byB0aGUgVHJ1ZVR5cGUgZHJpdmVyIG1vZHVsZS4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX1RSVUVUWVBFX0RSSVZFUl9IICA8ZnR0dGRydi5oPgorI2RlZmluZSBGVF9UUlVFVFlQRV9EUklWRVJfSCAgPGZyZWV0eXBlL2Z0dHRkcnYuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNjQsNyArMzY0LDcgQEAKICAgICogICB0eXBlcyBhbmQgQVBJIHNwZWNpZmljIHRvIHRoZSBUeXBlfjEgZm9ybWF0LgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfVFlQRTFfVEFCTEVTX0ggIDx0MXRhYmxlcy5oPgorI2RlZmluZSBGVF9UWVBFMV9UQUJMRVNfSCAgPGZyZWV0eXBlL3QxdGFibGVzLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzc5LDcgKzM3OSw3IEBACiAgICAqICAgZGVmaW5pdGlvbnMsIHRha2VuIGZyb20gdGhlIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBzcGVjaWZpY2F0aW9ucy4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX1RSVUVUWVBFX0lEU19IICA8dHRuYW1laWQuaD4KKyNkZWZpbmUgRlRfVFJVRVRZUEVfSURTX0ggIDxmcmVldHlwZS90dG5hbWVpZC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM5Miw3ICszOTIsNyBAQAogICAgKiAgIHR5cGVzIGFuZCBBUEkgc3BlY2lmaWMgdG8gdGhlIFRydWVUeXBlIChhcyB3ZWxsIGFzIE9wZW5UeXBlKSBmb3JtYXQuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9UUlVFVFlQRV9UQUJMRVNfSCAgPHR0dGFibGVzLmg+CisjZGVmaW5lIEZUX1RSVUVUWVBFX1RBQkxFU19IICA8ZnJlZXR5cGUvdHR0YWJsZXMuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MDYsNyArNDA2LDcgQEAKICAgICogICBTRk5ULWJhc2VkIGZvbnQgZm9ybWF0cyAoaS5lLiwgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlKS4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX1RSVUVUWVBFX1RBR1NfSCAgPHR0dGFncy5oPgorI2RlZmluZSBGVF9UUlVFVFlQRV9UQUdTX0ggIDxmcmVldHlwZS90dHRhZ3MuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MjAsNyArNDIwLDcgQEAKICAgICogICBmYWNlLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfQkRGX0ggIDxmdGJkZi5oPgorI2RlZmluZSBGVF9CREZfSCAgPGZyZWV0eXBlL2Z0YmRmLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDM0LDcgKzQzNCw3IEBACiAgICAqICAgZmFjZS4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX0NJRF9IICA8ZnRjaWQuaD4KKyNkZWZpbmUgRlRfQ0lEX0ggIDxmcmVldHlwZS9mdGNpZC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogICAgKiAgIGRlZmluaXRpb25zIG9mIGFuIEFQSSB3aGljaCBzdXBwb3J0cyBnemlwLWNvbXByZXNzZWQgZmlsZXMuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9HWklQX0ggIDxmdGd6aXAuaD4KKyNkZWZpbmUgRlRfR1pJUF9IICA8ZnJlZXR5cGUvZnRnemlwLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDYwLDcgKzQ2MCw3IEBACiAgICAqICAgZGVmaW5pdGlvbnMgb2YgYW4gQVBJIHdoaWNoIHN1cHBvcnRzIExaVy1jb21wcmVzc2VkIGZpbGVzLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfTFpXX0ggIDxmdGx6dy5oPgorI2RlZmluZSBGVF9MWldfSCAgPGZyZWV0eXBlL2Z0bHp3Lmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDczLDcgKzQ3Myw3IEBACiAgICAqICAgZGVmaW5pdGlvbnMgb2YgYW4gQVBJIHdoaWNoIHN1cHBvcnRzIGJ6aXAyLWNvbXByZXNzZWQgZmlsZXMuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9CWklQMl9IICA8ZnRiemlwMi5oPgorI2RlZmluZSBGVF9CWklQMl9IICA8ZnJlZXR5cGUvZnRiemlwMi5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ4Niw3ICs0ODYsNyBAQAogICAgKiAgIGRlZmluaXRpb25zIG9mIGFuIEFQSSB3aGljaCBzdXBwb3J0cyBXaW5kb3dzIEZOVCBmaWxlcy4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX1dJTkZPTlRTX0ggICA8ZnR3aW5mbnQuaD4KKyNkZWZpbmUgRlRfV0lORk9OVFNfSCAgIDxmcmVldHlwZS9mdHdpbmZudC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ5OSw3ICs0OTksNyBAQAogICAgKiAgIEFQSSBvZiB0aGUgb3B0aW9uYWwgZ2x5cGggbWFuYWdlbWVudCBjb21wb25lbnQuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9HTFlQSF9IICA8ZnRnbHlwaC5oPgorI2RlZmluZSBGVF9HTFlQSF9IICA8ZnJlZXR5cGUvZnRnbHlwaC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTUxMiw3ICs1MTIsNyBAQAogICAgKiAgIEFQSSBvZiB0aGUgb3B0aW9uYWwgYml0bWFwIGNvbnZlcnNpb24gY29tcG9uZW50LgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfQklUTUFQX0ggIDxmdGJpdG1hcC5oPgorI2RlZmluZSBGVF9CSVRNQVBfSCAgPGZyZWV0eXBlL2Z0Yml0bWFwLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTI1LDcgKzUyNSw3IEBACiAgICAqICAgQVBJIG9mIHRoZSBvcHRpb25hbCBleGFjdCBib3VuZGluZyBib3ggY29tcHV0YXRpb24gcm91dGluZXMuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9CQk9YX0ggIDxmdGJib3guaD4KKyNkZWZpbmUgRlRfQkJPWF9IICA8ZnJlZXR5cGUvZnRiYm94Lmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTM4LDcgKzUzOCw3IEBACiAgICAqICAgQVBJIG9mIHRoZSBvcHRpb25hbCBGcmVlVHlwZX4yIGNhY2hlIHN1Yi1zeXN0ZW0uCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9DQUNIRV9IICA8ZnRjYWNoZS5oPgorI2RlZmluZSBGVF9DQUNIRV9IICA8ZnJlZXR5cGUvZnRjYWNoZS5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTYxMiw3ICs2MTIsNyBAQAogICAgKiAgIGNvbXBpbGVkIG9uIHRoZSBNYWMgKG5vdGUgdGhhdCB0aGUgYmFzZSBBUEkgc3RpbGwgd29ya3MgdGhvdWdoKS4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX01BQ19IICA8ZnRtYWMuaD4KKyNkZWZpbmUgRlRfTUFDX0ggIDxmcmVldHlwZS9mdG1hYy5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTYyNSw3ICs2MjUsNyBAQAogICAgKiAgIG9wdGlvbmFsIG11bHRpcGxlLW1hc3RlcnMgbWFuYWdlbWVudCBBUEkgb2YgRnJlZVR5cGV+Mi4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX01VTFRJUExFX01BU1RFUlNfSCAgPGZ0bW0uaD4KKyNkZWZpbmUgRlRfTVVMVElQTEVfTUFTVEVSU19IICA8ZnJlZXR5cGUvZnRtbS5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTYzOSw3ICs2MzksNyBAQAogICAgKiAgIFNGTlQtYmFzZWQgZm9udCBmb3JtYXRzIChpLmUuLCBUcnVlVHlwZSBhbmQgT3BlblR5cGUpLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfU0ZOVF9OQU1FU19IICA8ZnRzbmFtZXMuaD4KKyNkZWZpbmUgRlRfU0ZOVF9OQU1FU19IICA8ZnJlZXR5cGUvZnRzbmFtZXMuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02NTMsNyArNjUzLDcgQEAKICAgICogICBHUE9TLCBHU1VCLCBKU1RGKS4KICAgICoKICAgICovCi0jZGVmaW5lIEZUX09QRU5UWVBFX1ZBTElEQVRFX0ggIDxmdG90dmFsLmg+CisjZGVmaW5lIEZUX09QRU5UWVBFX1ZBTElEQVRFX0ggIDxmcmVldHlwZS9mdG90dmFsLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjY3LDcgKzY2Nyw3IEBACiAgICAqICAgbW9ydCwgbW9yeCwgYnNsbiwganVzdCwga2Vybiwgb3BiZCwgdHJhaywgcHJvcCkuCiAgICAqCiAgICAqLwotI2RlZmluZSBGVF9HWF9WQUxJREFURV9IICA8ZnRneHZhbC5oPgorI2RlZmluZSBGVF9HWF9WQUxJREFURV9IICA8ZnJlZXR5cGUvZnRneHZhbC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTY4MCw3ICs2ODAsNyBAQAogICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIGFjY2Vzc2VzIFBGUi1zcGVjaWZpYyBkYXRhLgogICAgKgogICAgKi8KLSNkZWZpbmUgRlRfUEZSX0ggIDxmdHBmci5oPgorI2RlZmluZSBGVF9QRlJfSCAgPGZyZWV0eXBlL2Z0cGZyLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjkyLDcgKzY5Miw3IEBACiAgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQogICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBzdHJva2Ugb3V0bGluZSBwYXRocy4KICAgICovCi0jZGVmaW5lIEZUX1NUUk9LRVJfSCAgPGZ0c3Ryb2tlLmg+CisjZGVmaW5lIEZUX1NUUk9LRVJfSCAgPGZyZWV0eXBlL2Z0c3Ryb2tlLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzA0LDIwICs3MDQsMjIgQEAKICAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCiAgICAqICAgRnJlZVR5cGV+MiBBUEkgd2hpY2ggcGVyZm9ybXMgYXJ0aWZpY2lhbCBvYmxpcXVpbmcgYW5kIGVtYm9sZGVuaW5nLgogICAgKi8KLSNkZWZpbmUgRlRfU1lOVEhFU0lTX0ggIDxmdHN5bnRoLmg+CisjZGVmaW5lIEZUX1NZTlRIRVNJU19IICA8ZnJlZXR5cGUvZnRzeW50aC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKICAgICogQG1hY3JvOgotICAgKiAgIEZUX1hGUkVFODZfSAorICAgKiAgIEZUX0ZPTlRfRk9STUFUU19ICiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKICAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCi0gICAqICAgRnJlZVR5cGV+MiBBUEkgd2hpY2ggcHJvdmlkZXMgZnVuY3Rpb25zIHNwZWNpZmljIHRvIHRoZSBYRnJlZTg2IGFuZAotICAgKiAgIFguT3JnIFgxMSBzZXJ2ZXJzLgorICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHByb3ZpZGVzIGZ1bmN0aW9ucyBzcGVjaWZpYyB0byBmb250IGZvcm1hdHMuCiAgICAqLwotI2RlZmluZSBGVF9YRlJFRTg2X0ggIDxmdHhmODYuaD4KKyNkZWZpbmUgRlRfRk9OVF9GT1JNQVRTX0ggIDxmcmVldHlwZS9mdGZudGZtdC5oPgorCisgIC8qIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgRlRfWEZSRUU4Nl9IICBGVF9GT05UX0ZPUk1BVFNfSAogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTczMCw3ICs3MzIsNyBAQAogICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHBlcmZvcm1zIHRyaWdvbm9tZXRyaWMgY29tcHV0YXRpb25zIChlLmcuLAogICAgKiAgIGNvc2luZXMgYW5kIGFyYyB0YW5nZW50cykuCiAgICAqLwotI2RlZmluZSBGVF9UUklHT05PTUVUUllfSCAgPGZ0dHJpZ29uLmg+CisjZGVmaW5lIEZUX1RSSUdPTk9NRVRSWV9IICA8ZnJlZXR5cGUvZnR0cmlnb24uaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03NDIsNyArNzQ0LDcgQEAKICAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCiAgICAqICAgRnJlZVR5cGV+MiBBUEkgd2hpY2ggcGVyZm9ybXMgY29sb3IgZmlsdGVyaW5nIGZvciBzdWJwaXhlbCByZW5kZXJpbmcuCiAgICAqLwotI2RlZmluZSBGVF9MQ0RfRklMVEVSX0ggIDxmdGxjZGZpbC5oPgorI2RlZmluZSBGVF9MQ0RfRklMVEVSX0ggIDxmcmVldHlwZS9mdGxjZGZpbC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc1NCw3ICs3NTYsNyBAQAogICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKICAgICogICBGcmVlVHlwZX4yIEFQSSB3aGljaCBwZXJmb3JtcyBjb2xvciBmaWx0ZXJpbmcgZm9yIHN1YnBpeGVsIHJlbmRlcmluZy4KICAgICovCi0jZGVmaW5lIEZUX1VOUEFURU5URURfSElOVElOR19IICA8dHR1bnBhdC5oPgorI2RlZmluZSBGVF9VTlBBVEVOVEVEX0hJTlRJTkdfSCAgPGZyZWV0eXBlL3R0dW5wYXQuaD4KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03NjYsNyArNzY4LDcgQEAKICAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCiAgICAqICAgRnJlZVR5cGV+MiBBUEkgd2hpY2ggcGVyZm9ybXMgY29sb3IgZmlsdGVyaW5nIGZvciBzdWJwaXhlbCByZW5kZXJpbmcuCiAgICAqLwotI2RlZmluZSBGVF9JTkNSRU1FTlRBTF9IICA8ZnRpbmNyZW0uaD4KKyNkZWZpbmUgRlRfSU5DUkVNRU5UQUxfSCAgPGZyZWV0eXBlL2Z0aW5jcmVtLmg+CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzc4LDcgKzc4MCw3IEBACiAgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQogICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHJldHVybnMgZW50cmllcyBmcm9tIHRoZSBUcnVlVHlwZSBHQVNQIHRhYmxlLgogICAgKi8KLSNkZWZpbmUgRlRfR0FTUF9IICA8ZnRnYXNwLmg+CisjZGVmaW5lIEZUX0dBU1BfSCAgPGZyZWV0eXBlL2Z0Z2FzcC5oPgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc5MCwzMCArNzkyLDMwIEBACiAgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQogICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHJldHVybnMgaW5kaXZpZHVhbCBhbmQgcmFuZ2VkIGdseXBoIGFkdmFuY2VzLgogICAgKi8KLSNkZWZpbmUgRlRfQURWQU5DRVNfSCAgPGZ0YWR2YW5jLmg+CisjZGVmaW5lIEZUX0FEVkFOQ0VTX0ggIDxmcmVldHlwZS9mdGFkdmFuYy5oPgogCiAKICAgLyogKi8KIAotI2RlZmluZSBGVF9FUlJPUl9ERUZJTklUSU9OU19IICA8ZnRlcnJkZWYuaD4KKyNkZWZpbmUgRlRfRVJST1JfREVGSU5JVElPTlNfSCAgPGZyZWV0eXBlL2Z0ZXJyZGVmLmg+CiAKIAogICAvKiBUaGUgaW50ZXJuYWxzIG9mIHRoZSBjYWNoZSBzdWItc3lzdGVtIGFyZSBubyBsb25nZXIgZXhwb3NlZC4gIFdlICovCiAgIC8qIGRlZmF1bHQgdG8gRlRfQ0FDSEVfSCBhdCB0aGUgbW9tZW50IGp1c3QgaW4gY2FzZSwgYnV0IHdlIGtub3cgb2YgKi8KICAgLyogbm8gcm9ndWUgY2xpZW50IHRoYXQgdXNlcyB0aGVtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZUX0NBQ0hFX01BTkFHRVJfSCAgICAgICAgICAgPGZ0Y2FjaGUuaD4KLSNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfTVJVX0ggICAgICA8ZnRjYWNoZS5oPgotI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9NQU5BR0VSX0ggIDxmdGNhY2hlLmg+Ci0jZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX0NBQ0hFX0ggICAgPGZ0Y2FjaGUuaD4KLSNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfR0xZUEhfSCAgICA8ZnRjYWNoZS5oPgotI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9JTUFHRV9IICAgIDxmdGNhY2hlLmg+Ci0jZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX1NCSVRTX0ggICAgPGZ0Y2FjaGUuaD4KKyNkZWZpbmUgRlRfQ0FDSEVfTUFOQUdFUl9IICAgICAgICAgICA8ZnJlZXR5cGUvZnRjYWNoZS5oPgorI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9NUlVfSCAgICAgIDxmcmVldHlwZS9mdGNhY2hlLmg+CisjZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX01BTkFHRVJfSCAgPGZyZWV0eXBlL2Z0Y2FjaGUuaD4KKyNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfQ0FDSEVfSCAgICA8ZnJlZXR5cGUvZnRjYWNoZS5oPgorI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9HTFlQSF9IICAgIDxmcmVldHlwZS9mdGNhY2hlLmg+CisjZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX0lNQUdFX0ggICAgPGZyZWV0eXBlL2Z0Y2FjaGUuaD4KKyNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfU0JJVFNfSCAgICA8ZnJlZXR5cGUvZnRjYWNoZS5oPgogCiAKLSNkZWZpbmUgRlRfSU5DUkVNRU5UQUxfSCAgICAgICAgICA8ZnRpbmNyZW0uaD4KKyNkZWZpbmUgRlRfSU5DUkVNRU5UQUxfSCAgICAgICAgICA8ZnJlZXR5cGUvZnRpbmNyZW0uaD4KIAotI2RlZmluZSBGVF9UUlVFVFlQRV9VTlBBVEVOVEVEX0ggIDx0dHVucGF0Lmg+CisjZGVmaW5lIEZUX1RSVUVUWVBFX1VOUEFURU5URURfSCAgPGZyZWV0eXBlL3R0dW5wYXQuaD4KIAogCiAgIC8qCkBAIC04MjEsNyArODIzLDcgQEAKICAgICogb25seSB3aGVuIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5LgogICAgKi8KICNpZmRlZiBGVDJfQlVJTERfTElCUkFSWQotI2RlZmluZSAgRlRfSU5URVJOQUxfSU5URVJOQUxfSCAgPGludGVybmFsL2ludGVybmFsLmg+CisjZGVmaW5lICBGVF9JTlRFUk5BTF9JTlRFUk5BTF9IICA8ZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaD4KICNpbmNsdWRlIEZUX0lOVEVSTkFMX0lOVEVSTkFMX0gKICNlbmRpZiAvKiBGVDJfQlVJTERfTElCUkFSWSAqLwogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2NvbmZpZy9mdG1vZHVsZS5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9jb25maWcvZnRtb2R1bGUuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9jb25maWcvZnRvcHRpb24uaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9jb25maWcvZnRvcHRpb24uaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAppbmRleCBkNWYxNGQ3Li44ODZlNjRlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2NvbmZpZy9mdG9wdGlvbi5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVXNlci1zZWxlY3RhYmxlIGNvbmZpZ3VyYXRpb24gbWFjcm9zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTM4LDkgKzM4LDkgQEAKICAgLyogICAgbGlicmFyeSBmcm9tIGEgc2luZ2xlIHNvdXJjZSBkaXJlY3RvcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgLSBZb3UgY2FuIHB1dCBhIGNvcHkgb2YgdGhpcyBmaWxlIGluIHlvdXIgYnVpbGQgZGlyZWN0b3J5LCBtb3JlICAgICAgKi8KLSAgLyogICAgcHJlY2lzZWx5IGluIGAkQlVJTEQvY29uZmlnL2Z0b3B0aW9uLmgnLCB3aGVyZSBgJEJVSUxEJyBpcyB0aGUgICAgICovCi0gIC8qICAgIG5hbWUgb2YgYSBkaXJlY3RvcnkgdGhhdCBpcyBpbmNsdWRlZCBfYmVmb3JlXyB0aGUgRnJlZVR5cGUgaW5jbHVkZSAqLwotICAvKiAgICBwYXRoIGR1cmluZyBjb21waWxhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcHJlY2lzZWx5IGluIGAkQlVJTEQvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgnLCB3aGVyZSBgJEJVSUxEJyAgICovCisgIC8qICAgIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IHRoYXQgaXMgaW5jbHVkZWQgX2JlZm9yZV8gdGhlIEZyZWVUeXBlICAqLworICAvKiAgICBpbmNsdWRlIHBhdGggZHVyaW5nIGNvbXBpbGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFRoZSBkZWZhdWx0IEZyZWVUeXBlIE1ha2VmaWxlcyBhbmQgSmFtZmlsZXMgdXNlIHRoZSBidWlsZCAgICAgICAgICAqLwogICAvKiAgICBkaXJlY3RvcnkgYGJ1aWxkcy88c3lzdGVtPicgYnkgZGVmYXVsdCwgYnV0IHlvdSBjYW4gZWFzaWx5IGNoYW5nZSAgKi8KQEAgLTUxLDcgKzUxLDcgQEAKICAgLyogICAgbG9jYXRlIHRoaXMgZmlsZSBkdXJpbmcgdGhlIGJ1aWxkLiAgRm9yIGV4YW1wbGUsICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICNkZWZpbmUgRlRfQ09ORklHX09QVElPTlNfSCAgPG15ZnRvcHRpb25zLmg+ICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAjaW5jbHVkZSA8Y29uZmlnL2Z0aGVhZGVyLmg+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgI2luY2x1ZGUgPGZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgd2lsbCB1c2UgYCRCVUlMRC9teWZ0b3B0aW9ucy5oJyBpbnN0ZWFkIG9mIHRoaXMgZmlsZSBmb3IgbWFjcm8gICAgICovCiAgIC8qICAgIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNTksNyArNTksNyBAQAogICAvKiAgICBOb3RlIGFsc28gdGhhdCB5b3UgY2FuIHNpbWlsYXJseSBwcmUtZGVmaW5lIHRoZSBtYWNybyAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfQ09ORklHX01PRFVMRVNfSCB1c2VkIHRvIGxvY2F0ZSB0aGUgZmlsZSBsaXN0aW5nIG9mIHRoZSBtb2R1bGVzICovCiAgIC8qICAgIHRoYXQgYXJlIHN0YXRpY2FsbHkgbGlua2VkIHRvIHRoZSBsaWJyYXJ5IGF0IGNvbXBpbGUgdGltZS4gIEJ5ICAgICAqLwotICAvKiAgICBkZWZhdWx0LCB0aGlzIGZpbGUgaXMgPGNvbmZpZy9mdG1vZHVsZS5oPi4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGVmYXVsdCwgdGhpcyBmaWxlIGlzIDxmcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaD4uICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBXZSBoaWdobHkgcmVjb21tZW5kIHVzaW5nIHRoZSB0aGlyZCBtZXRob2Qgd2hlbmV2ZXIgcG9zc2libGUuICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC05Miw3ICs5Miw3IEBACiAgIC8qIFRoaXMgaXMgZG9uZSB0byBhbGxvdyBGcmVlVHlwZSBjbGllbnRzIHRvIHJ1biB1bm1vZGlmaWVkLCBmb3JjaW5nICAgICAqLwogICAvKiB0aGVtIHRvIGRpc3BsYXkgbm9ybWFsIGdyYXktbGV2ZWwgYW50aS1hbGlhc2VkIGdseXBocy4gICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORworI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zNzgsMTAgKzM3OCw2IEBACiAgIC8qIFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSByZW5kZXIgcG9vbCB1c2VkIGJ5IHRoZSBzY2FuLWxpbmUgY29udmVydGVyICAqLwogICAvKiB0byBkbyBhbGwgb2YgaXRzIHdvcmsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gNEtCeXRlIGlmIHlvdSB1c2UgRnJlZVR5cGUgdG8gcmFzdGVyaXplICAgICAqLwotICAvKiBnbHlwaHM7IG90aGVyd2lzZSwgeW91IG1heSBzZXQgaXQgdG8gemVybyB0byBhdm9pZCB1bm5lY2Vzc2FyeSAgICAgICAgKi8KLSAgLyogYWxsb2NhdGlvbiBvZiB0aGUgcmVuZGVyIHBvb2wuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBGVF9SRU5ERVJfUE9PTF9TSVpFICAxNjM4NEwKIAogCkBAIC00MzUsNiArNDMxLDggQEAKICAgLyogICAgIGFmX2dseXBoX2hpbnRzX2R1bXBfcG9pbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICBhZl9nbHlwaF9oaW50c19kdW1wX3NlZ21lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgYWZfZ2x5cGhfaGludHNfZHVtcF9lZGdlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIGFmX2dseXBoX2hpbnRzX2dldF9udW1fc2VnbWVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBhZl9nbHlwaF9oaW50c19nZXRfc2VnbWVudF9vZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICBBcyBhbiBhcmd1bWVudCwgdGhleSB1c2UgYW5vdGhlciBnbG9iYWwgdmFyaWFibGU6ICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNjU5LDE5ICs2NTcsNiBAQAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fSU5URVJQUkVURVJfU1dJVENIIHRvIGNvbXBpbGUgdGhlIFRydWVUeXBlICAgICovCi0gIC8qIGJ5dGVjb2RlIGludGVycHJldGVyIHdpdGggYSBodWdlIHN3aXRjaCBzdGF0ZW1lbnQsIHJhdGhlciB0aGFuIGEgY2FsbCAqLwotICAvKiB0YWJsZS4gIFRoaXMgcmVzdWx0cyBpbiBzbWFsbGVyIGFuZCBmYXN0ZXIgY29kZSBmb3IgYSBudW1iZXIgb2YgICAgICAgKi8KLSAgLyogYXJjaGl0ZWN0dXJlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBOb3RlIGhvd2V2ZXIgdGhhdCBvbiBzb21lIGNvbXBpbGVyL3Byb2Nlc3NvciBjb21iaW5hdGlvbnMsIHVuZGVmaW5pbmcgKi8KLSAgLyogdGhpcyBtYWNybyB3aWxsIGdlbmVyYXRlIGZhc3RlciwgdGhvdWdoIGxhcmdlciwgY29kZS4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX0lOVEVSUFJFVEVSX1NXSVRDSAotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9DT01QT05FTlRfT0ZGU0VUX1NDQUxFRCB0byBjb21waWxlIHRoZSAgICAgICAgKi8KICAgLyogVHJ1ZVR5cGUgZ2x5cGggbG9hZGVyIHRvIHVzZSBBcHBsZSdzIGRlZmluaXRpb24gb2YgaG93IHRvIGhhbmRsZSAgICAgICovCiAgIC8qIGNvbXBvbmVudCBvZmZzZXRzIGluIGNvbXBvc2l0ZSBnbHlwaHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNjg0LDcgKzY2OSw3IEBACiAgIC8qIGZvbnRzIHdpbGwgbm90IGhhdmUgdGhlbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdHNwZWMvZ2x5Zi5odG0gICAgICAgICAgICAgICAgICovCi0gIC8qICAgaHR0cDovL2ZvbnRzLmFwcGxlLmNvbS9UVFJlZk1hbi9STTA2L0NoYXA2Z2x5Zi5odG1sICAgICAgICAgICAgICAgICAqLworICAvKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDYvQ2hhcDZnbHlmLmh0bWwgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjdW5kZWYgVFRfQ09ORklHX09QVElPTl9DT01QT05FTlRfT0ZGU0VUX1NDQUxFRAogCkBAIC04MzUsMTAgKzgyMCwxMiBAQAogICAvKiBncmlkLiAgVG8gZmluZCBvdXQgdGhlIG9wdGltYWwgc2NhbGluZyBhbmQgc2hpZnRpbmcgdmFsdWUsIHZhcmlvdXMgICAgKi8KICAgLyogcGFyYW1ldGVyIGNvbWJpbmF0aW9ucyBhcmUgdHJpZWQgYW5kIHNjb3JlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGV4cGVyaW1lbnRhbCBvcHRpb24gaXMgb25seSBhY3RpdmUgaWYgdGhlIHJlbmRlciBtb2RlIGlzICAgICAgICAgKi8KLSAgLyogRlRfUkVOREVSX01PREVfTElHSFQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgZXhwZXJpbWVudGFsIG9wdGlvbiBpcyBhY3RpdmUgb25seSBpZiB0aGUgcmVuZGVyaW5nIG1vZGUgaXMgICAgICAqLworICAvKiBGVF9SRU5ERVJfTU9ERV9MSUdIVDsgeW91IGNhbiBzd2l0Y2ggd2FycGluZyBvbiBhbmQgb2ZmIHdpdGggdGhlICAgICAgKi8KKyAgLyogYHdhcnBpbmcnIHByb3BlcnR5IG9mIHRoZSBhdXRvLWhpbnRlciAoc2VlIGZpbGUgYGZ0YXV0b2guaCcgZm9yIG1vcmUgICovCisgIC8qIGluZm9ybWF0aW9uOyBieSBkZWZhdWx0IGl0IGlzIHN3aXRjaGVkIG9mZikuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSICovCisjZGVmaW5lIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgogCiAgIC8qICovCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvY29uZmlnL2Z0c3RkbGliLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvY29uZmlnL2Z0c3RkbGliLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmgKaW5kZXggYjk0MGVmYy4uNGI0NzFkNCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9jb25maWcvZnRzdGRsaWIuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgQU5TSS1zcGVjaWZpYyBsaWJyYXJ5IGFuZCBoZWFkZXIgY29uZmlndXJhdGlvbiBmaWxlIChzcGVjaWZpY2F0aW9uICAgKi8KIC8qICAgIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMDcsIDIwMDksIDIwMTEtMjAxMiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC02NCw2ICs2NCw3IEBACiAjZGVmaW5lIEZUX0lOVF9NQVggICAgIElOVF9NQVgKICNkZWZpbmUgRlRfSU5UX01JTiAgICAgSU5UX01JTgogI2RlZmluZSBGVF9VSU5UX01BWCAgICBVSU5UX01BWAorI2RlZmluZSBGVF9MT05HX01BWCAgICBMT05HX01BWAogI2RlZmluZSBGVF9VTE9OR19NQVggICBVTE9OR19NQVgKIAogCkBAIC0xNDEsOCArMTQyLDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2RlZmluZSBmdF9hdG9sICAgYXRvbAotI2RlZmluZSBmdF9sYWJzICAgbGFicworI2RlZmluZSBmdF9hdG9sICBhdG9sCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaApzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaAppbmRleCBlZmJkMTNhLi5iNjI0N2Y1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGhpZ2gtbGV2ZWwgQVBJIGFuZCBjb21tb24gdHlwZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zOTQsOCArMzk0LDExIEBACiAgIC8qICAgIEl0IGFsc28gZW1iZWRzIGEgbWVtb3J5IG1hbmFnZXIgKHNlZSBARlRfTWVtb3J5KSwgYXMgd2VsbCBhcyBhICAgICAqLwogICAvKiAgICBzY2FuLWxpbmUgY29udmVydGVyIG9iamVjdCAoc2VlIEBGVF9SYXN0ZXIpLiAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEluIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucywgbWFrZSBzdXJlIHRoYXQgdGhlIHNhbWUgRlRfTGlicmFyeSAqLwotICAvKiAgICBvYmplY3Qgb3IgYW55IG9mIGl0cyBjaGlsZHJlbiBkb2Vzbid0IGdldCBhY2Nlc3NlZCBpbiBwYXJhbGxlbC4gICAgKi8KKyAgLyogICAgSW4gbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zIGl0IGlzIGVhc2llc3QgdG8gdXNlIG9uZSAgICAgICAgICAgICovCisgIC8qICAgIGBGVF9MaWJyYXJ5JyBvYmplY3QgcGVyIHRocmVhZC4gIEluIGNhc2UgdGhpcyBpcyB0b28gY3VtYmVyc29tZSwgICAqLworICAvKiAgICBhIHNpbmdsZSBgRlRfTGlicmFyeScgb2JqZWN0IGFjcm9zcyB0aHJlYWRzIGlzIHBvc3NpYmxlIGFsc28gICAgICAgKi8KKyAgLyogICAgKHNpbmNlIEZyZWVUeXBlIHZlcnNpb24gMi41LjYpLCBhcyBsb25nIGFzIGEgbXV0ZXggbG9jayBpcyB1c2VkICAgICovCisgIC8qICAgIGFyb3VuZCBARlRfTmV3X0ZhY2UgYW5kIEBGVF9Eb25lX0ZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIExpYnJhcnkgb2JqZWN0cyBhcmUgbm9ybWFsbHkgY3JlYXRlZCBieSBARlRfSW5pdF9GcmVlVHlwZSwgYW5kICAgICAqLwpAQCAtNDc3LDYgKzQ4MCwxNCBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVXNlIEBGVF9Eb25lX0ZhY2UgdG8gZGVzdHJveSBpdCAoYWxvbmcgd2l0aCBpdHMgc2xvdCBhbmQgc2l6ZXMpLiAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBgRlRfRmFjZScgb2JqZWN0IGNhbiBvbmx5IGJlIHNhZmVseSB1c2VkIGZyb20gb25lIHRocmVhZCBhdCBhICAgKi8KKyAgLyogICAgdGltZS4gIFNpbWlsYXJseSwgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uIG9mIGBGVF9GYWNlJyB3aXRoIHRoZSAgICovCisgIC8qICAgIHNhbWUgQEZUX0xpYnJhcnkgb2JqZWN0IGNhbiBvbmx5IGJlIGRvbmUgZnJvbSBvbmUgdGhyZWFkIGF0IGEgICAgICAqLworICAvKiAgICB0aW1lLiAgT24gdGhlIG90aGVyIGhhbmQsIGZ1bmN0aW9ucyBsaWtlIEBGVF9Mb2FkX0dseXBoIGFuZCBpdHMgICAgKi8KKyAgLyogICAgc2libGluZ3MgYXJlIHRocmVhZC1zYWZlIGFuZCBkbyBub3QgbmVlZCB0aGUgbG9jayB0byBiZSBoZWxkIGFzICAgICovCisgIC8qICAgIGxvbmcgYXMgdGhlIHNhbWUgYEZUX0ZhY2UnIG9iamVjdCBpcyBub3QgdXNlZCBmcm9tIG11bHRpcGxlICAgICAgICAqLworICAvKiAgICB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxBbHNvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBTZWUgQEZUX0ZhY2VSZWMgZm9yIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZpZWxkcyBvZiBhIGdpdmVuIGZhY2UgKi8KICAgLyogICAgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC02MzEsOSArNjQyLDEzIEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9FTkNPRElOR19NU19TWU1CT0wgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICBDb3JyZXNwb25kcyB0byB0aGUgTWljcm9zb2Z0IFN5bWJvbCBlbmNvZGluZywgdXNlZCB0byBlbmNvZGUgICAgICovCi0gIC8qICAgICAgbWF0aGVtYXRpY2FsIHN5bWJvbHMgaW4gdGhlIDMyLi4yNTUgY2hhcmFjdGVyIGNvZGUgcmFuZ2UuICBGb3IgICAqLwotICAvKiAgICAgIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBgaHR0cDovL3d3dy5rb3N0aXMubmV0L2NoYXJzZXRzL3N5bWJvbC5odG0nLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgbWF0aGVtYXRpY2FsIHN5bWJvbHMgYW5kIHdpbmdkaW5ncy4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgICAqLworICAvKiAgICAgIGBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdHNwZWMvcmVjb20uaHRtJywgICAgICAgICAgKi8KKyAgLyogICAgICBgaHR0cDovL3d3dy5rb3N0aXMubmV0L2NoYXJzZXRzL3N5bWJvbC5odG0nLCBhbmQgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgYGh0dHA6Ly93d3cua29zdGlzLm5ldC9jaGFyc2V0cy93aW5nZGluZy5odG0nLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGlzIGVuY29kaW5nIHVzZXMgY2hhcmFjdGVyIGNvZGVzIGZyb20gdGhlIFBVQSAoUHJpdmF0ZSBVbmljb2RlICovCisgIC8qICAgICAgQXJlYSkgaW4gdGhlIHJhbmdlIFUrRjAyMC1VK0YwRkYuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfRU5DT0RJTkdfU0pJUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gSmFwYW5lc2UgU0pJUyBlbmNvZGluZy4gIE1vcmUgaW5mbyBhdCAgICAgICAgICAgICAqLwpAQCAtNjUxLDcgKzY2Niw3IEBACiAgIC8qICAgIEZUX0VOQ09ESU5HX1dBTlNVTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIHRoZSBLb3JlYW4gZW5jb2Rpbmcgc3lzdGVtIGtub3duIGFzIFdhbnN1bmcuICAgICAgKi8KICAgLyogICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgYGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tVVMvZ29nbG9iYWwvY2MzMDUxNTQnLiAgICAgICAgICAgICAqLworICAvKiAgICAgIGBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi1VUy9nb2dsb2JhbC9jYzMwNTE1NCcuICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX0VOQ09ESU5HX0pPSEFCIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIFRoZSBLb3JlYW4gc3RhbmRhcmQgY2hhcmFjdGVyIHNldCAoS1N+QyA1NjAxLTE5OTIpLCB3aGljaCAgICAgICAgKi8KQEAgLTg2MSwxNyArODc2LDM2IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCBmb3JtYXRzIGNhbiBoYXZlIG11bHRpcGxlIGZhY2VzIGluICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZm9udCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2VfaW5kZXggICAgICAgICAgOjogVGhlIGluZGV4IG9mIHRoZSBmYWNlIGluIHRoZSBmb250IGZpbGUuICBJdCAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0b34wIGlmIHRoZXJlIGlzIG9ubHkgb25lIGZhY2UgaW4gICAgKi8KKyAgLyogICAgZmFjZV9pbmRleCAgICAgICAgICA6OiBUaGlzIGZpZWxkIGhvbGRzIHR3byBkaWZmZXJlbnQgdmFsdWVzLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0cyAwLTE1IGFyZSB0aGUgaW5kZXggb2YgdGhlIGZhY2UgaW4gdGhlICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgZmlsZSAoc3RhcnRpbmcgd2l0aCB2YWx1ZX4wKS4gIFRoZXkgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgc2V0IHRvfjAgaWYgdGhlcmUgaXMgb25seSBvbmUgZmFjZSBpbiAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRzIDE2LTMwIGFyZSByZWxldmFudCB0byBHWCB2YXJpYXRpb24gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udHMgb25seSwgaG9sZGluZyB0aGUgbmFtZWQgaW5zdGFuY2UgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IGZvciB0aGUgY3VycmVudCBmYWNlIGluZGV4IChzdGFydGluZyAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHZhbHVlfjE7IHZhbHVlfjAgaW5kaWNhdGVzIGZvbnQgYWNjZXNzICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBHWCB2YXJpYXRpb24gZGF0YSkuICBGb3Igbm9uLUdYICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRzLCBiaXRzIDE2LTMwIGFyZSBpZ25vcmVkLiAgSWYgd2UgaGF2ZSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGhpcmQgbmFtZWQgaW5zdGFuY2Ugb2YgZmFjZX40LCBzYXksICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZhY2VfaW5kZXgnIGlzIHNldCB0byAweDAwMDMwMDA0LiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMzEgaXMgYWx3YXlzIHplcm8gKHRoaXMgaXMsICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZhY2VfaW5kZXgnIGlzIGFsd2F5cyBhIHBvc2l0aXZlIHZhbHVlKS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgZmFjZV9mbGFncyAgICAgICAgICA6OiBBIHNldCBvZiBiaXQgZmxhZ3MgdGhhdCBnaXZlIGltcG9ydGFudCAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZhY2U7IHNlZSAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9GQUNFX0ZMQUdfWFhYIGZvciB0aGUgZGV0YWlscy4gICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0eWxlX2ZsYWdzICAgICAgICAgOjogQSBzZXQgb2YgYml0IGZsYWdzIGluZGljYXRpbmcgdGhlIHN0eWxlIG9mICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmYWNlOyBzZWUgQEZUX1NUWUxFX0ZMQUdfWFhYIGZvciB0aGUgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0eWxlX2ZsYWdzICAgICAgICAgOjogVGhlIGxvd2VyIDE2fmJpdHMgY29udGFpbiBhIHNldCBvZiBiaXQgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIGluZGljYXRpbmcgdGhlIHN0eWxlIG9mIHRoZSBmYWNlOyBzZWUgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBARlRfU1RZTEVfRkxBR19YWFggZm9yIHRoZSBkZXRhaWxzLiAgQml0cyAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYtMzAgaG9sZCB0aGUgbnVtYmVyIG9mIG5hbWVkIGluc3RhbmNlcyAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQgZmFjZSBpZiB3ZSBoYXZlIGEgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBHWCB2YXJpYXRpb24gKHN1Yilmb250LiAgQml0IDMxIGlzIGFsd2F5cyAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgemVybyAodGhpcyBpcywgYHN0eWxlX2ZsYWdzJyBpcyBhbHdheXMgYSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aXZlIHZhbHVlKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIG51bV9nbHlwaHMgICAgICAgICAgOjogVGhlIG51bWJlciBvZiBnbHlwaHMgaW4gdGhlIGZhY2UuICBJZiB0aGUgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgaXMgc2NhbGFibGUgYW5kIGhhcyBzYml0cyAoc2VlICAgICAgICAgKi8KQEAgLTg5Myw2ICs5MjcsMTEgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgTlVMTCAoZS5nLiwgaW4gZm9udHMgZW1iZWRkZWQgaW4gYSAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgUERGIGZpbGUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBjYXNlIHRoZSBmb250IGRvZXNuJ3QgcHJvdmlkZSBhIHNwZWNpZmljICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5IG5hbWUgZW50cnksIEZyZWVUeXBlIHRyaWVzIHRvICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRoZXNpemUgb25lLCBkZXJpdmluZyBpdCBmcm9tIG90aGVyIG5hbWUgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBzdHlsZV9uYW1lICAgICAgICAgIDo6IFRoZSBmYWNlJ3Mgc3R5bGUgbmFtZS4gIFRoaXMgaXMgYW4gQVNDSUkgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsIHVzdWFsbHkgaW4gRW5nbGlzaCwgdGhhdCBkZXNjcmliZXMgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHR5cGVmYWNlJ3Mgc3R5bGUgKGxpa2UgYEl0YWxpYycsICAgICAgICAqLwpAQCAtMTE0MCw3ICsxMTc5LDcgQEAKICAgLyogICAgICBUcnVlVHlwZSBieXRlY29kZSBpbnN0cnVjdGlvbnMgdG8gbW92ZSBhbmQgc2NhbGUgYWxsIG9mIGl0cyAgICAgICovCiAgIC8qICAgICAgc3ViZ2x5cGhzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBJdCBpcyBub3QgcG9zc2libGUgdG8gYXV0b2hpbnQgc3VjaCBmb250cyB1c2luZyAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGF1dG8taGludCBzdWNoIGZvbnRzIHVzaW5nICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIEBGVF9MT0FEX0ZPUkNFX0FVVE9ISU5UOyBpdCB3aWxsIGFsc28gaWdub3JlICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICBARlRfTE9BRF9OT19ISU5USU5HLiAgWW91IGhhdmUgdG8gc2V0IGJvdGggQEZUX0xPQURfTk9fSElOVElORyAgICovCiAgIC8qICAgICAgYW5kIEBGVF9MT0FEX05PX0FVVE9ISU5UIHRvIHJlYWxseSBkaXNhYmxlIGhpbnRpbmc7IGhvd2V2ZXIsIHlvdSAqLwpAQCAtMTM3Miw3ICsxNDExLDcgQEAKICAgLyogICAgRlRfU1RZTEVfRkxBR19YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBsaXN0IG9mIGJpdC1mbGFncyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdHlsZSBvZiBhIGdpdmVuIGZhY2UuICAgICovCisgIC8qICAgIEEgbGlzdCBvZiBiaXQgZmxhZ3MgdXNlZCB0byBpbmRpY2F0ZSB0aGUgc3R5bGUgb2YgYSBnaXZlbiBmYWNlLiAgICAqLwogICAvKiAgICBUaGVzZSBhcmUgdXNlZCBpbiB0aGUgYHN0eWxlX2ZsYWdzJyBmaWVsZCBvZiBARlRfRmFjZVJlYy4gICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTY0OSwxMSArMTY4OCwxMSBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBpbWFnZSBmb3JtYXQuICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGxzYl9kZWx0YSAgICAgICAgIDo6IFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gaGludGVkIGFuZCB1bmhpbnRlZCAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IHNpZGUgYmVhcmluZyB3aGlsZSBhdXRvaGludGluZyBpcyAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCBzaWRlIGJlYXJpbmcgd2hpbGUgYXV0by1oaW50aW5nIGlzICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS4gIFplcm8gb3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgcnNiX2RlbHRhICAgICAgICAgOjogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBoaW50ZWQgYW5kIHVuaGludGVkICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0IHNpZGUgYmVhcmluZyB3aGlsZSBhdXRvaGludGluZyBpcyAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCBzaWRlIGJlYXJpbmcgd2hpbGUgYXV0by1oaW50aW5nIGlzICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlLiAgWmVybyBvdGhlcndpc2UuICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE2NzYsNyArMTcxNSw3IEBACiAgIC8qICAgIGBzbG90LT5mb3JtYXQnIGlzIGFsc28gY2hhbmdlZCB0byBARlRfR0xZUEhfRk9STUFUX0JJVE1BUC4gICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEhlcmUgYSBzbWFsbCBwc2V1ZG8gY29kZSBmcmFnbWVudCB0aGF0IHNob3dzIGhvdyB0byB1c2UgICAgICAgICAgICAqLworICAvKiAgICBIZXJlIGlzIGEgc21hbGwgcHNldWRvIGNvZGUgZnJhZ21lbnQgdGhhdCBzaG93cyBob3cgdG8gdXNlICAgICAgICAgKi8KICAgLyogICAgYGxzYl9kZWx0YScgYW5kIGByc2JfZGVsdGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE3NjksOCArMTgwOCw4IEBACiAgIC8qICAgIHVzZSBARlRfTmV3X0xpYnJhcnkgaW5zdGVhZCwgZm9sbG93ZWQgYnkgYSBjYWxsIHRvICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBARlRfQWRkX0RlZmF1bHRfTW9kdWxlcyAob3IgYSBzZXJpZXMgb2YgY2FsbHMgdG8gQEZUX0FkZF9Nb2R1bGUpLiAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZvciBtdWx0aS10aHJlYWRpbmcgYXBwbGljYXRpb25zIGVhY2ggdGhyZWFkIHNob3VsZCBoYXZlIGl0cyBvd24gICAqLwotICAvKiAgICBGVF9MaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIEBGVF9MaWJyYXJ5IGFuZCBARlRfRmFjZSBmb3IgICAgICAgICAgICAgICovCisgIC8qICAgIG11bHRpLXRocmVhZGluZyBpc3N1ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgSWYgeW91IG5lZWQgcmVmZXJlbmNlLWNvdW50aW5nIChjZi4gQEZUX1JlZmVyZW5jZV9MaWJyYXJ5KSwgdXNlICAgICovCiAgIC8qICAgIEBGVF9OZXdfTGlicmFyeSBhbmQgQEZUX0RvbmVfTGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTgwNCw3ICsxODQzLDcgQEAKICAgLyogICAgRlRfT1BFTl9YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBsaXN0IG9mIGJpdC1maWVsZCBjb25zdGFudHMgdXNlZCB3aXRoaW4gdGhlIGBmbGFncycgZmllbGQgb2YgdGhlICovCisgIC8qICAgIEEgbGlzdCBvZiBiaXQgZmllbGQgY29uc3RhbnRzIHVzZWQgd2l0aGluIHRoZSBgZmxhZ3MnIGZpZWxkIG9mIHRoZSAqLwogICAvKiAgICBARlRfT3Blbl9BcmdzIHN0cnVjdHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTk1MSwxMyArMTk5MCwxMiBAQAogICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgcGF0aG5hbWUgICA6OiBBIHBhdGggdG8gdGhlIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZmFjZSB3aXRoaW4gdGhlIGZvbnQuICBUaGUgZmlyc3QgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBmYWNlIGhhcyBpbmRleH4wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2VfaW5kZXggOjogU2VlIEBGVF9PcGVuX0ZhY2UgZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhpcyAqLworICAvKiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBhZmFjZSAgICAgIDo6IEEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LiAgSWYgYGZhY2VfaW5kZXgnIGlzICAgKi8KICAgLyogICAgICAgICAgICAgICAgICBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXQgbXVzdCBiZSBub24tTlVMTC4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgU2VlIEBGVF9PcGVuX0ZhY2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTk5MCwxMyArMjAyOCwxMiBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgZmlsZV9zaXplICA6OiBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGNodW5rIHVzZWQgYnkgdGhlIGZvbnQgZGF0YS4gICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZmFjZSB3aXRoaW4gdGhlIGZvbnQuICBUaGUgZmlyc3QgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBmYWNlIGhhcyBpbmRleH4wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2VfaW5kZXggOjogU2VlIEBGVF9PcGVuX0ZhY2UgZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhpcyAqLworICAvKiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBhZmFjZSAgICAgIDo6IEEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LiAgSWYgYGZhY2VfaW5kZXgnIGlzICAgKi8KICAgLyogICAgICAgICAgICAgICAgICBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXQgbXVzdCBiZSBub24tTlVMTC4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgU2VlIEBGVF9PcGVuX0ZhY2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjAyOCwxMyArMjA2NSw0MyBAQAogICAvKiAgICBhcmdzICAgICAgIDo6IEEgcG9pbnRlciB0byBhbiBgRlRfT3Blbl9BcmdzJyBzdHJ1Y3R1cmUgdGhhdCBtdXN0ICAgKi8KICAgLyogICAgICAgICAgICAgICAgICBiZSBmaWxsZWQgYnkgdGhlIGNhbGxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZmFjZSB3aXRoaW4gdGhlIGZvbnQuICBUaGUgZmlyc3QgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBmYWNlIGhhcyBpbmRleH4wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2VfaW5kZXggOjogVGhpcyBmaWVsZCBob2xkcyB0d28gZGlmZmVyZW50IHZhbHVlcy4gIEJpdHMgMC0xNSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGFyZSB0aGUgaW5kZXggb2YgdGhlIGZhY2UgaW4gdGhlIGZvbnQgZmlsZSAoc3RhcnRpbmcgKi8KKyAgLyogICAgICAgICAgICAgICAgICB3aXRoIHZhbHVlfjApLiAgU2V0IGl0IHRvfjAgaWYgdGhlcmUgaXMgb25seSBvbmUgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgZmFjZSBpbiB0aGUgZm9udCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBCaXRzIDE2LTMwIGFyZSByZWxldmFudCB0byBHWCB2YXJpYXRpb24gZm9udHMgb25seSwgICovCisgIC8qICAgICAgICAgICAgICAgICAgc3BlY2lmeWluZyB0aGUgbmFtZWQgaW5zdGFuY2UgaW5kZXggZm9yIHRoZSBjdXJyZW50ICAqLworICAvKiAgICAgICAgICAgICAgICAgIGZhY2UgaW5kZXggKHN0YXJ0aW5nIHdpdGggdmFsdWV+MTsgdmFsdWV+MCBtYWtlcyAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBGcmVlVHlwZSBpZ25vcmUgbmFtZWQgaW5zdGFuY2VzKS4gIEZvciBub24tR1ggZm9udHMsICovCisgIC8qICAgICAgICAgICAgICAgICAgYml0cyAxNi0zMCBhcmUgaWdub3JlZC4gIEFzc3VtaW5nIHRoYXQgeW91IHdhbnQgdG8gICAqLworICAvKiAgICAgICAgICAgICAgICAgIGFjY2VzcyB0aGUgdGhpcmQgbmFtZWQgaW5zdGFuY2UgaW4gZmFjZX40LCAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBgZmFjZV9pbmRleCcgc2hvdWxkIGJlIHNldCB0byAweDAwMDMwMDA0LiAgSWYgeW91ICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgd2FudCB0byBhY2Nlc3MgZmFjZX40IHdpdGhvdXQgR1ggdmFyaWF0aW9uIGhhbmRsaW5nLCAqLworICAvKiAgICAgICAgICAgICAgICAgIHNpbXBseSBzZXQgYGZhY2VfaW5kZXgnIHRvIHZhbHVlfjQuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgRlRfT3Blbl9GYWNlIGFuZCBpdHMgc2libGluZ3MgY2FuIGJlIHVzZWQgdG8gcXVpY2tseSAqLworICAvKiAgICAgICAgICAgICAgICAgIGNoZWNrIHdoZXRoZXIgdGhlIGZvbnQgZm9ybWF0IG9mIGEgZ2l2ZW4gZm9udCAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICByZXNvdXJjZSBpcyBzdXBwb3J0ZWQgYnkgRnJlZVR5cGUuICBJbiBnZW5lcmFsLCBpZiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgdGhlIGBmYWNlX2luZGV4JyBhcmd1bWVudCBpcyBuZWdhdGl2ZSwgdGhlICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGlzfjAgaWYgdGhlIGZvbnQgZm9ybWF0IGlzICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICByZWNvZ25pemVkLCBvciBub24temVybyBvdGhlcndpc2UuICBUaGUgZnVuY3Rpb24gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgYWxsb2NhdGVzIGEgbW9yZSBvciBsZXNzIGVtcHR5IGZhY2UgaGFuZGxlIGluICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGAqYWZhY2UnIChpZiBgYWZhY2UnIGlzbid0IE5VTEwpOyB0aGUgb25seSB0d28gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICB1c2VmdWwgZmllbGRzIGluIHRoaXMgc3BlY2lhbCBjYXNlIGFyZSAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgYGZhY2UtPm51bV9mYWNlcycgYW5kIGBmYWNlLT5zdHlsZV9mbGFncycuICBGb3IgYW55ICAqLworICAvKiAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlIHZhbHVlIG9mIGBmYWNlX2luZGV4JywgYGZhY2UtPm51bV9mYWNlcycgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBnaXZlcyB0aGUgbnVtYmVyIG9mIGZhY2VzIHdpdGhpbiB0aGUgZm9udCBmaWxlLiAgRm9yICovCisgIC8qICAgICAgICAgICAgICAgICAgdGhlIG5lZ2F0aXZlIHZhbHVlIGAtKE4rMSknICh3aXRoIGBOJyBhIDE2LWJpdCAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlKSwgYml0cyAxNi0zMCBpbiBgZmFjZS0+c3R5bGVfZmxhZ3MnIGdpdmUgdGhlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBudW1iZXIgb2YgbmFtZWQgaW5zdGFuY2VzIGluIGZhY2UgYE4nIGlmIHdlIGhhdmUgYSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgR1ggdmFyaWF0aW9uIGZvbnQgKG9yIHplcm8gb3RoZXJ3aXNlKS4gIEFmdGVyICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGV4YW1pbmF0aW9uLCB0aGUgcmV0dXJuZWQgQEZUX0ZhY2Ugc3RydWN0dXJlIHNob3VsZCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBiZSBkZWFsbG9jYXRlZCB3aXRoIGEgY2FsbCB0byBARlRfRG9uZV9GYWNlLiAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgYWZhY2UgICAgICA6OiBBIGhhbmRsZSB0byBhIG5ldyBmYWNlIG9iamVjdC4gIElmIGBmYWNlX2luZGV4JyBpcyAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIGl0IG11c3QgYmUgbm9uLU5VTEwuICAqLwotICAvKiAgICAgICAgICAgICAgICAgIFNlZSBub3RlIGJlbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTIwNDQsMTYgKzIxMTEsNiBAQAogICAvKiAgICBzbG90IGZvciB0aGUgZmFjZSBvYmplY3QgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgdGhyb3VnaCAgICAgKi8KICAgLyogICAgYGZhY2UtPmdseXBoJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PcGVuX0ZhY2UgY2FuIGJlIHVzZWQgdG8gcXVpY2tseSBjaGVjayB3aGV0aGVyIHRoZSBmb250ICAgICAgICAgKi8KLSAgLyogICAgZm9ybWF0IG9mIGEgZ2l2ZW4gZm9udCByZXNvdXJjZSBpcyBzdXBwb3J0ZWQgYnkgRnJlZVR5cGUuICBJZiB0aGUgICovCi0gIC8qICAgIGBmYWNlX2luZGV4JyBmaWVsZCBpcyBuZWdhdGl2ZSwgdGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGlzfjAgICAqLwotICAvKiAgICBpZiB0aGUgZm9udCBmb3JtYXQgaXMgcmVjb2duaXplZCwgb3Igbm9uLXplcm8gb3RoZXJ3aXNlOyAgICAgICAgICAgKi8KLSAgLyogICAgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBtb3JlIG9yIGxlc3MgZW1wdHkgZmFjZSBoYW5kbGUgaW4gYCphZmFjZScgICovCi0gIC8qICAgIChpZiBgYWZhY2UnIGlzbid0IE5VTEwpLiAgVGhlIG9ubHkgdXNlZnVsIGZpZWxkIGluIHRoaXMgc3BlY2lhbCAgICAqLwotICAvKiAgICBjYXNlIGlzIGBmYWNlLT5udW1fZmFjZXMnIHRoYXQgZ2l2ZXMgdGhlIG51bWJlciBvZiBmYWNlcyB3aXRoaW4gICAgKi8KLSAgLyogICAgdGhlIGZvbnQgZmlsZS4gIEFmdGVyIGV4YW1pbmF0aW9uLCB0aGUgcmV0dXJuZWQgQEZUX0ZhY2Ugc3RydWN0dXJlICovCi0gIC8qICAgIHNob3VsZCBiZSBkZWFsbG9jYXRlZCB3aXRoIGEgY2FsbCB0byBARlRfRG9uZV9GYWNlLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRWFjaCBuZXcgZmFjZSBvYmplY3QgY3JlYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24gYWxzbyBvd25zIGEgICAgICAgICovCiAgIC8qICAgIGRlZmF1bHQgQEZUX1NpemUgb2JqZWN0LCBhY2Nlc3NpYmxlIGFzIGBmYWNlLT5zaXplJy4gICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTIwNjQsNiArMjEyMSw3NCBAQAogICAvKiAgICBTZWUgdGhlIGRpc2N1c3Npb24gb2YgcmVmZXJlbmNlIGNvdW50ZXJzIGluIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgKi8KICAgLyogICAgQEZUX1JlZmVyZW5jZV9GYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUbyBsb29wIG92ZXIgYWxsIGZhY2VzLCB1c2UgY29kZSBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgc25pcHBldCAgKi8KKyAgLyogICAgKG9taXR0aW5nIHRoZSBlcnJvciBoYW5kbGluZykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgRlRfRmFjZSAgZmFjZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEZUX0xvbmcgIGksIG51bV9mYWNlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGVycm9yID0gRlRfT3Blbl9GYWNlKCBsaWJyYXJ5LCBhcmdzLCAtMSwgJmZhY2UgKTsgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBpZiAoIGVycm9yICkgeyAuLi4gfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIG51bV9mYWNlcyA9IGZhY2UtPm51bV9mYWNlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBGVF9Eb25lX0ZhY2UoIGZhY2UgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2ZhY2VzOyBpKysgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgZXJyb3IgPSBGVF9PcGVuX0ZhY2UoIGxpYnJhcnksIGFyZ3MsIGksICZmYWNlICk7ICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBGVF9Eb25lX0ZhY2UoIGZhY2UgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVG8gbG9vcCBvdmVyIGFsbCB2YWxpZCB2YWx1ZXMgZm9yIGBmYWNlX2luZGV4JywgdXNlIHNvbWV0aGluZyAgICAgICovCisgIC8qICAgIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBzbmlwcGV0LCBhZ2FpbiB3aXRob3V0IGVycm9yIGhhbmRsaW5nLiAgICAqLworICAvKiAgICBUaGUgY29kZSBhY2Nlc3NlcyBhbGwgZmFjZXMgaW1tZWRpYXRlbHkgKHRodXMgb25seSBhIHNpbmdsZSBjYWxsICAgKi8KKyAgLyogICAgb2YgYEZUX09wZW5fRmFjZScgd2l0aGluIHRoZSBkby1sb29wKSwgd2l0aCBhbmQgd2l0aG91dCBuYW1lZCAgICAgICovCisgIC8qICAgIGluc3RhbmNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEZUX0ZhY2UgIGZhY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgRlRfTG9uZyAgbnVtX2ZhY2VzICAgICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEZUX0xvbmcgIG51bV9pbnN0YW5jZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgRlRfTG9uZyAgZmFjZV9pZHggICAgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEZUX0xvbmcgIGluc3RhbmNlX2lkeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBGVF9Mb25nICBpZCA9ICggaW5zdGFuY2VfaWR4IDw8IDE2ICkgKyBmYWNlX2lkeDsgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBlcnJvciA9IEZUX09wZW5fRmFjZSggbGlicmFyeSwgYXJncywgaWQsICZmYWNlICk7ICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgaWYgKCBlcnJvciApIHsgLi4uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBudW1fZmFjZXMgICAgID0gZmFjZS0+bnVtX2ZhY2VzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgbnVtX2luc3RhbmNlcyA9IGZhY2UtPnN0eWxlX2ZsYWdzID4+IDE2OyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIEZUX0RvbmVfRmFjZSggZmFjZSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgaWYgKCBpbnN0YW5jZV9pZHggPCBudW1faW5zdGFuY2VzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgaW5zdGFuY2VfaWR4Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgZmFjZV9pZHgrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgIGluc3RhbmNlX2lkeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgfSB3aGlsZSAoIGZhY2VfaWR4IDwgbnVtX2ZhY2VzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9PcGVuX0ZhY2UoIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgY29uc3QgRlRfT3Blbl9BcmdzKiAgYXJncywKQEAgLTI1MDEsNyArMjYyNiw3IEBACiAgICAqICAgRlRfTE9BRF9YWFgKICAgICoKICAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIEEgbGlzdCBvZiBiaXQtZmllbGQgY29uc3RhbnRzIHVzZWQgd2l0aCBARlRfTG9hZF9HbHlwaCB0byBpbmRpY2F0ZQorICAgKiAgIEEgbGlzdCBvZiBiaXQgZmllbGQgY29uc3RhbnRzIHVzZWQgd2l0aCBARlRfTG9hZF9HbHlwaCB0byBpbmRpY2F0ZQogICAgKiAgIHdoYXQga2luZCBvZiBvcGVyYXRpb25zIHRvIHBlcmZvcm0gZHVyaW5nIGdseXBoIGxvYWRpbmcuCiAgICAqCiAgICAqIEB2YWx1ZXM6CkBAIC0yNjE4LDYgKzI3NDMsMTYgQEAKICAgICogICAgIGJpdG1hcHMgdHJhbnNwYXJlbnRseS4gIFRob3NlIGJpdG1hcHMgd2lsbCBiZSBpbiB0aGUKICAgICogICAgIEBGVF9QSVhFTF9NT0RFX0dSQVkgZm9ybWF0LgogICAgKgorICAgKiAgIEZUX0xPQURfQ09NUFVURV9NRVRSSUNTIDo6CisgICAqICAgICBUaGlzIGZsYWcgc2V0cyBjb21wdXRpbmcgZ2x5cGggbWV0cmljcyB3aXRob3V0IHRoZSB1c2Ugb2YgYnVuZGxlZAorICAgKiAgICAgbWV0cmljcyB0YWJsZXMgKGZvciBleGFtcGxlLCB0aGUgYGhkbXgnIHRhYmxlIGluIFRydWVUeXBlIGZvbnRzKS4KKyAgICogICAgIFdlbGwtYmVoYXZpbmcgZm9udHMgaGF2ZSBvcHRpbWl6ZWQgYnVuZGxlZCBtZXRyaWNzIGFuZCB0aGVzZSBzaG91bGQKKyAgICogICAgIGJlIHVzZWQuICBUaGlzIGZsYWcgaXMgbWFpbmx5IHVzZWQgYnkgZm9udCB2YWxpZGF0aW5nIG9yIGZvbnQKKyAgICogICAgIGVkaXRpbmcgYXBwbGljYXRpb25zLCB3aGljaCBuZWVkIHRvIGlnbm9yZSwgdmVyaWZ5LCBvciBlZGl0IHRob3NlCisgICAqICAgICB0YWJsZXMuCisgICAqCisgICAqICAgICBDdXJyZW50bHksIHRoaXMgZmxhZyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciBUcnVlVHlwZSBmb250cy4KKyAgICoKICAgICogICBGVF9MT0FEX0NST1BfQklUTUFQIDo6CiAgICAqICAgICBJZ25vcmVkLiAgRGVwcmVjYXRlZC4KICAgICoKQEAgLTI2NjMsNiArMjc5OCw3IEBACiAjZGVmaW5lIEZUX0xPQURfTk9fQVVUT0hJTlQgICAgICAgICAgICAgICAgICAoIDFMIDw8IDE1ICkKICAgLyogQml0cyAxNi4uMTkgYXJlIHVzZWQgYnkgYEZUX0xPQURfVEFSR0VUXycgKi8KICNkZWZpbmUgRlRfTE9BRF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICggMUwgPDwgMjAgKQorI2RlZmluZSBGVF9MT0FEX0NPTVBVVEVfTUVUUklDUyAgICAgICAgICAgICAgKCAxTCA8PCAyMSApCiAKICAgLyogKi8KIApAQCAtMjkwNywxNSArMzA0MywyMiBAQAogICAvKiAgICBARlRfR2V0X0tlcm5pbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9LRVJOSU5HX0RFRkFVTFQgIDo6IFJldHVybiBzY2FsZWQgYW5kIGdyaWQtZml0dGVkIGtlcm5pbmcgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZXMgKHZhbHVlIGlzfjApLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0tFUk5JTkdfREVGQVVMVCAgOjogUmV0dXJuIGdyaWQtZml0dGVkIGtlcm5pbmcgZGlzdGFuY2VzIGluICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVscyAodmFsdWUgaXN+MCkuICBXaGV0aGVyIHRoZXkgYXJlICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWQgZGVwZW5kcyBvbiBARlRfTE9BRF9OT19TQ0FMRS4gICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9LRVJOSU5HX1VORklUVEVEIDo6IFJldHVybiBzY2FsZWQgYnV0IHVuLWdyaWQtZml0dGVkIGtlcm5pbmcgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0tFUk5JTkdfVU5GSVRURUQgOjogUmV0dXJuIHVuLWdyaWQtZml0dGVkIGtlcm5pbmcgZGlzdGFuY2VzIGluICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMuICBXaGV0aGVyIHRoZXkgYXJlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWQgZGVwZW5kcyBvbiBARlRfTE9BRF9OT19TQ0FMRS4gICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9LRVJOSU5HX1VOU0NBTEVEIDo6IFJldHVybiB0aGUga2VybmluZyB2ZWN0b3IgaW4gb3JpZ2luYWwgZm9udCAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfS0VSTklOR19ERUZBVUxUIHJldHVybnMgZnVsbCBwaXhlbCB2YWx1ZXM7IGl0IGFsc28gbWFrZXMgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGhldXJpc3RpY2FsbHkgc2NhbGUgZG93biBrZXJuaW5nIGRpc3RhbmNlcyBhdCBzbWFsbCBwcGVtICAqLworICAvKiAgICB2YWx1ZXMgc28gdGhhdCB0aGV5IGRvbid0IGJlY29tZSB0b28gYmlnLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHR5cGVkZWYgZW51bSAgRlRfS2VybmluZ19Nb2RlXwogICB7CiAgICAgRlRfS0VSTklOR19ERUZBVUxUICA9IDAsCkBAIC0yOTUyLDkgKzMwOTUsMTAgQEAKICAgLyogICAgICAgICAgICAgICAgICAga2VybmluZyB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWtlcm5pbmcgICAgOjogVGhlIGtlcm5pbmcgdmVjdG9yLiAgVGhpcyBpcyBlaXRoZXIgaW4gZm9udCB1bml0cyAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIG9yIGluIHBpeGVscyAoMjYuNiBmb3JtYXQpIGZvciBzY2FsYWJsZSBmb3JtYXRzLCAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBhbmQgaW4gcGl4ZWxzIGZvciBmaXhlZC1zaXplcyBmb3JtYXRzLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWtlcm5pbmcgICAgOjogVGhlIGtlcm5pbmcgdmVjdG9yLiAgVGhpcyBpcyBlaXRoZXIgaW4gZm9udCB1bml0cywgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uYWwgcGl4ZWxzICgyNi42IGZvcm1hdCksIG9yIHBpeGVscyBmb3IgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBzY2FsYWJsZSBmb3JtYXRzLCBhbmQgaW4gcGl4ZWxzIGZvciBmaXhlZC1zaXplcyAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zMjM5LDYgKzMzODMsMTMgQEAKICAgLyogICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQmUgYXdhcmUgdGhhdCBjaGFyYWN0ZXIgY29kZXMgY2FuIGhhdmUgdmFsdWVzIHVwIHRvIDB4RkZGRkZGRkY7ICAgICovCisgIC8qICAgIHRoaXMgbWlnaHQgaGFwcGVuIGZvciBub24tVW5pY29kZSBvciBtYWxmb3JtZWQgY21hcHMuICBIb3dldmVyLCAgICAqLworICAvKiAgICBldmVuIHdpdGggcmVndWxhciBVbmljb2RlIGVuY29kaW5nLCBzby1jYWxsZWQgYGxhc3QgcmVzb3J0IGZvbnRzJyAgKi8KKyAgLyogICAgKHVzaW5nIFNGTlQgY21hcCBmb3JtYXQgMTMsIHNlZSBmdW5jdGlvbiBARlRfR2V0X0NNYXBfRm9ybWF0KSAgICAgICovCisgIC8qICAgIG5vcm1hbGx5IGhhdmUgZW50cmllcyBmb3IgYWxsIFVuaWNvZGUgY2hhcmFjdGVycyB1cCB0byAweDFGRkZGRiwgICAqLworICAvKiAgICB3aGljaCBjYW4gY2F1c2UgKmEgbG90KiBvZiBpdGVyYXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIE5vdGUgdGhhdCBgKmFnaW5kZXgnIGlzIHNldCB0b34wIGlmIHRoZSBjaGFybWFwIGlzIGVtcHR5LiAgVGhlICAgICAqLwogICAvKiAgICByZXN1bHQgaXRzZWxmIGNhbiBiZX4wIGluIHR3byBjYXNlczogaWYgdGhlIGNoYXJtYXAgaXMgZW1wdHkgb3IgICAgKi8KICAgLyogICAgaWYgdGhlIHZhbHVlfjAgaXMgdGhlIGZpcnN0IHZhbGlkIGNoYXJhY3RlciBjb2RlLiAgICAgICAgICAgICAgICAgICovCkBAIC0zMzk4LDggKzM1NDksOSBAQAogICAvKiAgICBARlRfR2V0X0ZTVHlwZV9GbGFnczsgdGhleSBpbmZvcm0gY2xpZW50IGFwcGxpY2F0aW9ucyBvZiBlbWJlZGRpbmcgKi8KICAgLyogICAgYW5kIHN1YnNldHRpbmcgcmVzdHJpY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBhIGZvbnQuICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZWUgaHR0cDovL3d3dy5hZG9iZS5jb20vZGV2bmV0L2Fjcm9iYXQvcGRmcy9Gb250UG9saWNpZXMucGRmIGZvciAgKi8KLSAgLyogICAgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBodHRwOi8vd3d3LmFkb2JlLmNvbS9jb250ZW50L2RhbS9BZG9iZS9lbi9kZXZuZXQvYWNyb2JhdC9wZGZzL0ZvbnRQb2xpY2llcy5wZGYgKi8KKyAgLyogICAgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfRlNUWVBFX0lOU1RBTExBQkxFX0VNQkVERElORyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNDMzLDYgKzM1ODUsOSBAQAogICAvKiAgICAgIGJpdG1hcHMgYXZhaWxhYmxlIGluIHRoZSBmb250LCB0aGVuIHRoZSBmb250IGlzIHVuZW1iZWRkYWJsZS4gICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZmxhZ3MgYXJlIE9SZWQgdG9nZXRoZXIsIHRodXMgbW9yZSB0aGFuIGEgc2luZ2xlIHZhbHVlIGNhbiBiZSAgKi8KKyAgLyogICAgcmV0dXJuZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBXaGlsZSB0aGUgZnNUeXBlIGZsYWdzIGNhbiBpbmRpY2F0ZSB0aGF0IGEgZm9udCBtYXkgYmUgZW1iZWRkZWQsIGEgKi8KICAgLyogICAgbGljZW5zZSB3aXRoIHRoZSBmb250IHZlbmRvciBtYXkgYmUgc2VwYXJhdGVseSByZXF1aXJlZCB0byB1c2UgdGhlICovCiAgIC8qICAgIGZvbnQgaW4gdGhpcyB3YXkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzgxOCw3ICszOTczLDggQEAKICAgLyogICAgYSA6OiBUaGUgbnVtYmVyIHRvIGJlIHJvdW5kZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHJlc3VsdCBvZiBgKGEgKyAweDgwMDApICYgLTB4MTAwMDAnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGBhJyByb3VuZGVkIHRvIG5lYXJlc3QgMTYuMTYgZml4ZWQgaW50ZWdlciwgaGFsZndheSBjYXNlcyBhd2F5ICAgICAqLworICAvKiAgICBmcm9tIHplcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRml4ZWQgKQogICBGVF9Sb3VuZEZpeCggRlRfRml4ZWQgIGEgKTsKQEAgLTM4MzcsNyArMzk5Myw3IEBACiAgIC8qICAgIGEgOjogVGhlIG51bWJlciBmb3Igd2hpY2ggdGhlIGNlaWxpbmcgZnVuY3Rpb24gaXMgdG8gYmUgY29tcHV0ZWQuICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSByZXN1bHQgb2YgYChhICsgMHgxMDAwMCAtIDEpICYgLTB4MTAwMDAnLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBgYScgcm91bmRlZCB0b3dhcmRzIHBsdXMgaW5maW5pdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRml4ZWQgKQogICBGVF9DZWlsRml4KCBGVF9GaXhlZCAgYSApOwpAQCAtMzg1Niw3ICs0MDEyLDcgQEAKICAgLyogICAgYSA6OiBUaGUgbnVtYmVyIGZvciB3aGljaCB0aGUgZmxvb3IgZnVuY3Rpb24gaXMgdG8gYmUgY29tcHV0ZWQuICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHJlc3VsdCBvZiBgYSAmIC0weDEwMDAwJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGBhJyByb3VuZGVkIHRvd2FyZHMgbWludXMgaW5maW5pdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfRVhQT1JUKCBGVF9GaXhlZCApCiAgIEZUX0Zsb29yRml4KCBGVF9GaXhlZCAgYSApOwpAQCAtMzkzNiw4ICs0MDkyLDggQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZSRUVUWVBFX01BSk9SICAyCi0jZGVmaW5lIEZSRUVUWVBFX01JTk9SICA1Ci0jZGVmaW5lIEZSRUVUWVBFX1BBVENIICA0CisjZGVmaW5lIEZSRUVUWVBFX01JTk9SICA2CisjZGVmaW5lIEZSRUVUWVBFX1BBVENIICAxCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRhZHZhbmMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRhZHZhbmMuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0YWR2YW5jLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRhZHZhbmMuaAppbmRleCA5NTVmOTNmLi5iNGQyYWVkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0YWR2YW5jLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGFkdmFuYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFF1aWNrIGNvbXB1dGF0aW9uIG9mIGFkdmFuY2Ugd2lkdGhzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA4LCAyMDEzLCAyMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC03Nyw3ICs3Nyw3IEBACiAgIC8qICAgIGFuZCBoaW50aW5nIG9mIHRoZSBnbHlwaCBvdXRsaW5lLCBhcmUgZXh0cmVtZWx5IHNsb3cgYnkgICAgICAgICAgICAqLwogICAvKiAgICBjb21wYXJpc29uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZUX0FEVkFOQ0VfRkxBR19GQVNUX09OTFkgIDB4MjAwMDAwMDBVTAorI2RlZmluZSBGVF9BRFZBTkNFX0ZMQUdfRkFTVF9PTkxZICAweDIwMDAwMDAwTAogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0YXV0b2guaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRhdXRvaC5oCnNpbWlsYXJpdHkgaW5kZXggODglCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRhdXRvaC5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YXV0b2guaAppbmRleCA1OTE5MWFiLi5hYjM5YzIxIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0YXV0b2guaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YXV0b2guaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGNvbnRyb2xsaW5nIHRoZSBhdXRvLWhpbnRlciAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMiwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjQ3LDggKzI0Nyw4IEBACiAgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfUHJvcF9HbHlwaFRvU2NyaXB0TWFwXwogICB7Ci0gICAgRlRfRmFjZSAgIGZhY2U7Ci0gICAgRlRfQnl0ZSogIG1hcDsKKyAgICBGVF9GYWNlICAgICBmYWNlOworICAgIEZUX1VTaG9ydCogIG1hcDsKIAogICB9IEZUX1Byb3BfR2x5cGhUb1NjcmlwdE1hcDsKIApAQCAtMzAwLDcgKzMwMCw3IEBACiAgICAqIEBkZXNjcmlwdGlvbjoKICAgICogICAqRXhwZXJpbWVudGFsKiAqb25seSoKICAgICoKLSAgICogICBJZiBGcmVldHlwZSBnZXRzIGNvbXBpbGVkIHdpdGggRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWlogdG8gbWFrZQorICAgKiAgIElmIEZyZWVUeXBlIGdldHMgY29tcGlsZWQgd2l0aCBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWiB0byBtYWtlCiAgICAqICAgdGhlIEhhcmZCdXp6IGxpYnJhcnkgYWNjZXNzIE9wZW5UeXBlIGZlYXR1cmVzIGZvciBnZXR0aW5nIGJldHRlcgogICAgKiAgIGdseXBoIGNvdmVyYWdlcywgdGhpcyBwcm9wZXJ0eSBzZXRzIHRoZSAoYXV0by1maXR0ZXIpIHNjcmlwdCB0byBiZQogICAgKiAgIHVzZWQgZm9yIHRoZSBkZWZhdWx0IChPcGVuVHlwZSkgc2NyaXB0IGRhdGEgb2YgYSBmb250J3MgR1NVQiB0YWJsZS4KQEAgLTM5MSw2ICszOTEsNTQgQEAKIAogICB9IEZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0OwogCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBwcm9wZXJ0eToKKyAgICogICB3YXJwaW5nCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAqRXhwZXJpbWVudGFsKiAqb25seSoKKyAgICoKKyAgICogICBJZiBGcmVlVHlwZSBnZXRzIGNvbXBpbGVkIHdpdGggb3B0aW9uIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiB0bworICAgKiAgIGFjdGl2YXRlIHRoZSB3YXJwIGhpbnRpbmcgY29kZSBpbiB0aGUgYXV0by1oaW50ZXIsIHRoaXMgcHJvcGVydHkKKyAgICogICBzd2l0Y2hlcyB3YXJwaW5nIG9uIGFuZCBvZmYuCisgICAqCisgICAqICAgV2FycGluZyBvbmx5IHdvcmtzIGluIGBsaWdodCcgYXV0by1oaW50aW5nIG1vZGUuICBUaGUgaWRlYSBvZiB0aGUKKyAgICogICBjb2RlIGlzIHRvIHNsaWdodGx5IHNjYWxlIGFuZCBzaGlmdCBhIGdseXBoIGFsb25nIHRoZSBub24taGludGVkCisgICAqICAgZGltZW5zaW9uICh3aGljaCBpcyB1c3VhbGx5IHRoZSBob3Jpem9udGFsIGF4aXMpIHNvIHRoYXQgYXMgbXVjaCBvZgorICAgKiAgIGl0cyBzZWdtZW50cyBhcmUgYWxpZ25lZCAobW9yZSBvciBsZXNzKSB0byB0aGUgZ3JpZC4gIFRvIGZpbmQgb3V0IGEKKyAgICogICBnbHlwaCdzIG9wdGltYWwgc2NhbGluZyBhbmQgc2hpZnRpbmcgdmFsdWUsIHZhcmlvdXMgcGFyYW1ldGVyCisgICAqICAgY29tYmluYXRpb25zIGFyZSB0cmllZCBhbmQgc2NvcmVkLgorICAgKgorICAgKiAgIEJ5IGRlZmF1bHQsIHdhcnBpbmcgaXMgb2ZmLiAgVGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IHRvIHN3aXRjaCBvbgorICAgKiAgIHdhcnBpbmcgKG9taXR0aW5nIHRoZSBlcnJvciBoYW5kbGluZykuCisgICAqCisgICAqICAgeworICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKKyAgICogICAgIEZUX0Jvb2wgICAgIHdhcnBpbmcgPSAxOworICAgKgorICAgKgorICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKKyAgICoKKyAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FycGluZyIsICZ3YXJwaW5nICk7CisgICAqICAgfQorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgorICAgKgorICAgKiAgIFRoZSB3YXJwaW5nIGNvZGUgY2FuIGFsc28gY2hhbmdlIGFkdmFuY2Ugd2lkdGhzLiAgSGF2ZSBhIGxvb2sgYXQgdGhlCisgICAqICAgYGxzYl9kZWx0YScgYW5kIGByc2JfZGVsdGEnIGZpZWxkcyBpbiB0aGUgQEZUX0dseXBoU2xvdFJlYyBzdHJ1Y3R1cmUKKyAgICogICBmb3IgZGV0YWlscyBvbiBpbXByb3ZpbmcgaW50ZXItZ2x5cGggZGlzdGFuY2VzIHdoaWxlIHJlbmRlcmluZy4KKyAgICoKKyAgICogICBTaW5jZSB3YXJwaW5nIGlzIGEgZ2xvYmFsIHByb3BlcnR5IG9mIHRoZSBhdXRvLWhpbnRlciBpdCBpcyBiZXN0IHRvCisgICAqICAgY2hhbmdlIGl0cyB2YWx1ZSBiZWZvcmUgcmVuZGVyaW5nIGFueSBmYWNlLiAgT3RoZXJ3aXNlLCB5b3Ugc2hvdWxkCisgICAqICAgcmVsb2FkIGFsbCBmYWNlcyB0aGF0IGdldCBhdXRvLWhpbnRlZCBpbiBgbGlnaHQnIGhpbnRpbmcgbW9kZS4KKyAgICoKKyAgICovCisKKwogICAvKiAqLwogCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRiYm94LmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmJveC5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRiYm94LmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRiYm94LmgKaW5kZXggZDY4MDBlMi4uOWQ5ZDA0MCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGJib3guaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmJveC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGV4YWN0IGJib3ggY29tcHV0YXRpb24gKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDEsIDIwMDMsIDIwMDcsIDIwMTEsIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0YmRmLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmRmLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGJkZi5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmRmLmgKaW5kZXggNmQyNjJlNC4uMGJkYWJmNCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGJkZi5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRiZGYuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBCREYtc3BlY2lmaWMgc3RyaW5ncyAoc3BlY2lmaWNhdGlvbikuICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDA0LCAyMDA2LCAyMDA5LCAyMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGJpdG1hcC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGJpdG1hcC5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRiaXRtYXAuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGJpdG1hcC5oCmluZGV4IGVhZTcxNjkuLjQ2Y2M0N2IgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRiaXRtYXAuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Yml0bWFwLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGJpdG1hcHMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAwNiwgMjAwOCwgMjAxMywgMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTU1LDcgKzU1LDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQml0bWFwX05ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0JpdG1hcF9Jbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEluaXRpYWxpemUgYSBwb2ludGVyIHRvIGFuIEBGVF9CaXRtYXAgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAqLwpAQCAtNjMsNiArNjMsMTQgQEAKICAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGFiaXRtYXAgOjogQSBwb2ludGVyIHRvIHRoZSBiaXRtYXAgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZGVwcmVjYXRlZCBuYW1lIGZvciB0aGUgc2FtZSBmdW5jdGlvbiBpcyBgRlRfQml0bWFwX05ldycuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfQml0bWFwX0luaXQoIEZUX0JpdG1hcCAgKmFiaXRtYXAgKTsKKworCisgIC8qIGRlcHJlY2F0ZWQgKi8KICAgRlRfRVhQT1JUKCB2b2lkICkKICAgRlRfQml0bWFwX05ldyggRlRfQml0bWFwICAqYWJpdG1hcCApOwogCkBAIC0yMDIsNyArMjEwLDcgQEAKICAgLyogICAgRlRfQml0bWFwX0RvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRGVzdHJveSBhIGJpdG1hcCBvYmplY3QgY3JlYXRlZCB3aXRoIEBGVF9CaXRtYXBfTmV3LiAgICAgICAgICAgICAgICovCisgIC8qICAgIERlc3Ryb3kgYSBiaXRtYXAgb2JqZWN0IGluaXRpYWxpemVkIHdpdGggQEZUX0JpdG1hcF9Jbml0LiAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGxpYnJhcnkgOjogQSBoYW5kbGUgdG8gYSBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGJ6aXAyLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YnppcDIuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0YnppcDIuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGJ6aXAyLmgKaW5kZXggNGRjZTE2MS4uYzI1Zjk0NiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGJ6aXAyLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGJ6aXAyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQnppcDItY29tcHJlc3NlZCBzdHJlYW0gc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTAgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBKb2VsIEtsaW5naGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRjYWNoZS5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGNhY2hlLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRjYWNoZS5oCmluZGV4IGEzMGU5MjUuLjY4NTI1YmIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRjYWNoZS5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRjYWNoZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIENhY2hlIHN1YnN5c3RlbSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDgsIDIwMTAsIDIwMTMsIDIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC02NjcsOCArNjY3LDggQEAKICAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19JbWFnZVR5cGVSZWNfCiAgIHsKICAgICBGVENfRmFjZUlEICBmYWNlX2lkOwotICAgIEZUX0ludCAgICAgIHdpZHRoOwotICAgIEZUX0ludCAgICAgIGhlaWdodDsKKyAgICBGVF9VSW50ICAgICB3aWR0aDsKKyAgICBGVF9VSW50ICAgICBoZWlnaHQ7CiAgICAgRlRfSW50MzIgICAgZmxhZ3M7CiAKICAgfSBGVENfSW1hZ2VUeXBlUmVjOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGNmZmRydi5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGNmZmRydi5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRjZmZkcnYuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGNmZmRydi5oCmluZGV4IGY3MDMxYmMuLjZjOGU0MTYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRjZmZkcnYuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2ZmZHJ2LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciBjb250cm9sbGluZyB0aGUgQ0ZGIGRyaXZlciAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMsIDIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRjaWQuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRjaWQuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0Y2lkLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRjaWQuaAppbmRleCAxNzU1MGQ4Li4wNTc0MWM4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0Y2lkLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGNpZC5oCkBAIC00LDcgKzQsOCBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIENJRCBmb250IGluZm9ybWF0aW9uIChzcGVjaWZpY2F0aW9uKS4gICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LCAyMDA5IGJ5IERlcmVnIENsZWdnLCBNaWNoYWVsIFRvZnRkYWwuICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGVyZWcgQ2xlZ2cgYW5kIE1pY2hhZWwgVG9mdGRhbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCiAvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGVycmRlZi5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGVycmRlZi5oCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRlcnJkZWYuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGVycmRlZi5oCmluZGV4IDk5YjJmYWQuLmQ4NjVkYTcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRlcnJkZWYuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyZGVmLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDIsIDIwMDQsIDIwMDYsIDIwMDcsIDIwMTAtMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDE4ICsxNiw0MyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0gIC8qKioqKiAgICAgICAgICAgICAgICBMSVNUIE9GIEVSUk9SIENPREVTL01FU1NBR0VTICAgICAgICAgICAgICoqKioqLwotICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGVycm9yX2NvZGVfdmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEVycm9yIENvZGUgVmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEFsbCBwb3NzaWJsZSBlcnJvciBjb2RlcyByZXR1cm5lZCBieSBGcmVlVHlwZSBmdW5jdGlvbnMuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFRoZSBsaXN0IGJlbG93IGlzIHRha2VuIHZlcmJhdGltIGZyb20gdGhlIGZpbGUgYGZ0ZXJyZGVmLmgnICAgICAgICAgKi8KKyAgLyogICAobG9hZGVkIGF1dG9tYXRpY2FsbHkgYnkgaW5jbHVkaW5nIGBGVF9GUkVFVFlQRV9IJykuICBUaGUgZmlyc3QgICAgICovCisgIC8qICAgYXJndW1lbnQgb2YgdGhlIGBGVF9FUlJPUl9ERUZfJyBtYWNybyBpcyB0aGUgZXJyb3IgbGFiZWw7IGJ5ICAgICAgICAqLworICAvKiAgIGRlZmF1bHQsIHRoZSBwcmVmaXggYEZUX0Vycl8nIGdldHMgYWRkZWQgc28gdGhhdCB5b3UgZ2V0IGVycm9yICAgICAgKi8KKyAgLyogICBuYW1lcyBsaWtlIGBGVF9FcnJfQ2Fubm90X09wZW5fUmVzb3VyY2UnLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyAgICovCisgIC8qICAgdGhlIGVycm9yIGNvZGUsIGFuZCB0aGUgbGFzdCBhcmd1bWVudCBhbiBlcnJvciBzdHJpbmcsIHdoaWNoIGlzIG5vdCAqLworICAvKiAgIHVzZWQgYnkgRnJlZVR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgV2l0aGluIHlvdXIgYXBwbGljYXRpb24geW91IHNob3VsZCAqb25seSogdXNlIGVycm9yIG5hbWVzIGFuZCAgICAgICAqLworICAvKiAgICpuZXZlciogaXRzIG51bWVyaWMgdmFsdWVzISAgVGhlIGxhdHRlciBtaWdodCAoYW5kIGFjdHVhbGx5IGRvKSAgICAgKi8KKyAgLyogICBjaGFuZ2UgaW4gZm9ydGhjb21pbmcgRnJlZVR5cGUgdmVyc2lvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIE1hY3JvIGBGVF9OT0VSUk9SREVGXycgZGVmaW5lcyBgRlRfRXJyX09rJywgd2hpY2ggaXMgYWx3YXlzIHplcm8uICAgKi8KKyAgLyogICBTZWUgdGhlIGBFcnJvciBFbnVtZXJhdGlvbnMnIHN1YnNlY3Rpb24gaG93IHRvIGF1dG9tYXRpY2FsbHkgICAgICAgICovCisgIC8qICAgZ2VuZXJhdGUgYSBsaXN0IG9mIGVycm9yIHN0cmluZ3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICAvKiBZb3UgbmVlZCB0byBkZWZpbmUgYm90aCBGVF9FUlJPUkRFRl8gYW5kIEZUX05PRVJST1JERUZfIGJlZm9yZSAqLwotICAvKiBpbmNsdWRpbmcgdGhpcyBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0Vycl9YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICAgLyogZ2VuZXJpYyBlcnJvcnMgKi8KIApAQCAtMjQ1LDUgKzI3MCw3IEBACiAgIEZUX0VSUk9SREVGXyggQ29ycnVwdGVkX0ZvbnRfR2x5cGhzLCAgICAgICAgICAgICAgICAgICAgICAgMHhCQSwKICAgICAgICAgICAgICAgICAiRm9udCBnbHlwaHMgY29ycnVwdGVkIG9yIG1pc3NpbmcgZmllbGRzIiApCiAKKyAgLyogKi8KKwogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRlcnJvcnMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJvcnMuaApzaW1pbGFyaXR5IGluZGV4IDYxJQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0ZXJyb3JzLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJvcnMuaAppbmRleCAwZmEzZTRkLi4wNTA3YjlhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0ZXJyb3JzLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUgaGFuZGxpbmcgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDIsIDIwMDQsIDIwMDcsIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xOCw2OCArMTgsODYgQEAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgc3BlY2lhbCBoZWFkZXIgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgaGFuZGxpbmcgb2YgRlQyICAgICAgICAqLwotICAvKiBlbnVtZXJhdGlvbiBjb25zdGFudHMuICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGdlbmVyYXRlIGVycm9yIG1lc3NhZ2UgKi8KLSAgLyogc3RyaW5ncyB3aXRoIGEgc21hbGwgbWFjcm8gdHJpY2sgZXhwbGFpbmVkIGJlbG93LiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIGVycm9yX2VudW1lcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEkgLSBFcnJvciBGb3JtYXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgRXJyb3IgRW51bWVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgSG93IHRvIGhhbmRsZSBlcnJvcnMgYW5kIGVycm9yIHN0cmluZ3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVGhlIGhlYWRlciBmaWxlIGBmdGVycm9ycy5oJyAod2hpY2ggaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBieSAgICAqLworICAvKiAgIGBmcmVldHlwZS5oJyBkZWZpbmVzIHRoZSBoYW5kbGluZyBvZiBGcmVlVHlwZSdzIGVudW1lcmF0aW9uICAgICAgICAgKi8KKyAgLyogICBjb25zdGFudHMuICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGdlbmVyYXRlIGVycm9yIG1lc3NhZ2Ugc3RyaW5ncyAgICovCisgIC8qICAgd2l0aCBhIHNtYWxsIG1hY3JvIHRyaWNrIGV4cGxhaW5lZCBiZWxvdy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAqRXJyb3IqICpGb3JtYXRzKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIFRoZSBjb25maWd1cmF0aW9uIG1hY3JvIEZUX0NPTkZJR19PUFRJT05fVVNFX01PRFVMRV9FUlJPUlMgY2FuIGJlICAgKi8KLSAgLyogICBkZWZpbmVkIGluIGZ0b3B0aW9uLmggaW4gb3JkZXIgdG8gbWFrZSB0aGUgaGlnaGVyIGJ5dGUgaW5kaWNhdGUgICAgICovCisgIC8qICAgZGVmaW5lZCBpbiBgZnRvcHRpb24uaCcgaW4gb3JkZXIgdG8gbWFrZSB0aGUgaGlnaGVyIGJ5dGUgaW5kaWNhdGUgICAqLwogICAvKiAgIHRoZSBtb2R1bGUgd2hlcmUgdGhlIGVycm9yIGhhcyBoYXBwZW5lZCAodGhpcyBpcyBub3QgY29tcGF0aWJsZSAgICAgKi8KLSAgLyogICB3aXRoIHN0YW5kYXJkIGJ1aWxkcyBvZiBGcmVlVHlwZSAyKS4gIFNlZSB0aGUgZmlsZSBgZnRtb2RlcnIuaCcgZm9yICovCi0gIC8qICAgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIHdpdGggc3RhbmRhcmQgYnVpbGRzIG9mIEZyZWVUeXBlJm5ic3A7MiwgaG93ZXZlcikuICBTZWUgdGhlIGZpbGUgICAgKi8KKyAgLyogICBgZnRtb2RlcnIuaCcgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICpFcnJvciogKk1lc3NhZ2UqICpTdHJpbmdzKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIElJIC0gRXJyb3IgTWVzc2FnZSBzdHJpbmdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgVGhlIGVycm9yIGRlZmluaXRpb25zIGJlbG93IGFyZSBtYWRlIHRocm91Z2ggc3BlY2lhbCBtYWNyb3MgdGhhdCAgICAqLwotICAvKiAgIGFsbG93IGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gYnVpbGQgYSB0YWJsZSBvZiBlcnJvciBtZXNzYWdlIHN0cmluZ3MgKi8KLSAgLyogICBpZiB0aGV5IG5lZWQgaXQuICBUaGUgc3RyaW5ncyBhcmUgbm90IGluY2x1ZGVkIGluIGEgbm9ybWFsIGJ1aWxkIG9mICovCi0gIC8qICAgRnJlZVR5cGUgMiB0byBzYXZlIHNwYWNlIChtb3N0IGNsaWVudCBhcHBsaWNhdGlvbnMgZG8gbm90IHVzZSAgICAgICAqLwotICAvKiAgIHRoZW0pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBFcnJvciBkZWZpbml0aW9ucyBhcmUgc2V0IHVwIHdpdGggc3BlY2lhbCBtYWNyb3MgdGhhdCBhbGxvdyBjbGllbnQgICovCisgIC8qICAgYXBwbGljYXRpb25zIHRvIGJ1aWxkIGEgdGFibGUgb2YgZXJyb3IgbWVzc2FnZSBzdHJpbmdzLiAgVGhlICAgICAgICAqLworICAvKiAgIHN0cmluZ3MgYXJlIG5vdCBpbmNsdWRlZCBpbiBhIG5vcm1hbCBidWlsZCBvZiBGcmVlVHlwZSZuYnNwOzIgdG8gICAgKi8KKyAgLyogICBzYXZlIHNwYWNlIChtb3N0IGNsaWVudCBhcHBsaWNhdGlvbnMgZG8gbm90IHVzZSB0aGVtKS4gICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIFRvIGRvIHNvLCB5b3UgaGF2ZSB0byBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNyb3MgYmVmb3JlIGluY2x1ZGluZyAgKi8KLSAgLyogICB0aGlzIGZpbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZUX0VSUk9SX1NUQVJUX0xJU1QgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIFRoaXMgbWFjcm8gaXMgY2FsbGVkIGJlZm9yZSBhbnl0aGluZyBlbHNlIHRvIGRlZmluZSB0aGUgc3RhcnQgb2YgICovCi0gIC8qICAgICB0aGUgZXJyb3IgbGlzdC4gIEl0IGlzIGZvbGxvd2VkIGJ5IHNldmVyYWwgRlRfRVJST1JfREVGIGNhbGxzICAgICAqLwotICAvKiAgICAgKHNlZSBiZWxvdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRlRfRVJST1JfREVGKCBlLCB2LCBzICkgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgVGhpcyBtYWNybyBpcyBjYWxsZWQgdG8gZGVmaW5lIG9uZSBzaW5nbGUgZXJyb3IuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIGBlJyBpcyB0aGUgZXJyb3IgY29kZSBpZGVudGlmaWVyIChlLmcuIEZUX0Vycl9JbnZhbGlkX0FyZ3VtZW50KS4gICovCi0gIC8qICAgICBgdicgaXMgdGhlIGVycm9yIG51bWVyaWNhbCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgYHMnIGlzIHRoZSBjb3JyZXNwb25kaW5nIGVycm9yIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRlRfRVJST1JfRU5EX0xJU1QgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgVGhpcyBtYWNybyBlbmRzIHRoZSBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgQWRkaXRpb25hbGx5LCB5b3UgaGF2ZSB0byB1bmRlZmluZSBfX0ZURVJST1JTX0hfXyBiZWZvcmUgI2luY2x1ZGluZyAqLwogICAvKiAgIHRoaXMgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgSGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEZUX0VSUk9SX1NUQVJUX0xJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUaGlzIG1hY3JvIGlzIGNhbGxlZCBiZWZvcmUgYW55dGhpbmcgZWxzZSB0byBkZWZpbmUgdGhlIHN0YXJ0IG9mICAgICovCisgIC8qICAgdGhlIGVycm9yIGxpc3QuICBJdCBpcyBmb2xsb3dlZCBieSBzZXZlcmFsIEZUX0VSUk9SX0RFRiBjYWxscy4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBGVF9FUlJPUl9ERUYoIGUsIHYsIHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVGhpcyBtYWNybyBpcyBjYWxsZWQgdG8gZGVmaW5lIG9uZSBzaW5nbGUgZXJyb3IuICBgZScgaXMgdGhlIGVycm9yICAqLworICAvKiAgIGNvZGUgaWRlbnRpZmllciAoZS5nLiwgYEludmFsaWRfQXJndW1lbnQnKSwgYHYnIGlzIHRoZSBlcnJvcidzICAgICAgKi8KKyAgLyogICBudW1lcmljYWwgdmFsdWUsIGFuZCBgcycgaXMgdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3Igc3RyaW5nLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEZUX0VSUk9SX0VORF9MSVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUaGlzIG1hY3JvIGVuZHMgdGhlIGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEFkZGl0aW9uYWxseSwgeW91IGhhdmUgdG8gdW5kZWZpbmUgYF9fRlRFUlJPUlNfSF9fJyBiZWZvcmUgICAgICAgICAgKi8KKyAgLyogICAjaW5jbHVkaW5nIHRoaXMgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEhlcmUgaXMgYSBzaW1wbGUgZXhhbXBsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgI3VuZGVmIF9fRlRFUlJPUlNfSF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICNkZWZpbmUgRlRfRVJST1JERUYoIGUsIHYsIHMgKSAgeyBlLCBzIH0sICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAjZGVmaW5lIEZUX0VSUk9SX1NUQVJUX0xJU1QgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgI2RlZmluZSBGVF9FUlJPUl9FTkRfTElTVCAgICAgICB7IDAsIE5VTEwgfSB9OyAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBjb25zdCBzdHJ1Y3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgI3VuZGVmIF9fRlRFUlJPUlNfSF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICNkZWZpbmUgRlRfRVJST1JERUYoIGUsIHYsIHMgKSAgeyBlLCBzIH0sICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAjZGVmaW5lIEZUX0VSUk9SX1NUQVJUX0xJU1QgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgI2RlZmluZSBGVF9FUlJPUl9FTkRfTElTVCAgICAgICB7IDAsIDAgfSB9OyAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIGludCAgICAgICAgICBlcnJfY29kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICBjb25zdCBjaGFyKiAgZXJyX21zZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIH0gZnRfZXJyb3JzW10gPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICBjb25zdCBzdHJ1Y3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgaW50ICAgICAgICAgIGVycl9jb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgIGNvbnN0IGNoYXIqICBlcnJfbXNnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgfSBmdF9lcnJvcnNbXSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAjaW5jbHVkZSBGVF9FUlJPUlNfSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICNpbmNsdWRlIEZUX0VSUk9SU19IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBOb3RlIHRoYXQgYEZUX0Vycl9PaycgaXMgX25vdF8gZGVmaW5lZCB3aXRoIGBGVF9FUlJPUkRFRicgYnV0IHdpdGggICovCisgIC8qICAgYEZUX05PRVJST1JERUYnOyBpdCBpcyBhbHdheXMgemVyby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyAgLyogKi8KIAogI2lmbmRlZiBfX0ZURVJST1JTX0hfXwogI2RlZmluZSBfX0ZURVJST1JTX0hfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdHhmODYuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRmbnRmbXQuaApzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0eGY4Ni5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Zm50Zm10LmgKaW5kZXggODlkMTk5My4uMWY4ZmYyOCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdHhmODYuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Zm50Zm10LmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0eGY4Ni5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGZudGZtdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgU3VwcG9ydCBmdW5jdGlvbnMgZm9yIFgxMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBmb250IGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMDQsIDIwMDYsIDIwMDcsIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVFhGODZfSF9fCi0jZGVmaW5lIF9fRlRYRjg2X0hfXworI2lmbmRlZiBfX0ZURk5URk1UX0hfXworI2RlZmluZSBfX0ZURk5URk1UX0hfXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKQEAgLTQ5LDIyICs0OSwyMCBAQAogICAvKiAgIGhvd2V2ZXIsIHRoZXJlIGFyZSBzcGVjaWFsIGNhc2VzIChsaWtlIGluIFBERiBkZXZpY2VzKSB3aGVyZSBpdCBpcyAgKi8KICAgLyogICBpbXBvcnRhbnQgdG8gZGlmZmVyZW50aWF0ZSwgaW4gc3BpdGUgb2YgRnJlZVR5cGUncyB1bmlmb3JtIEFQSS4gICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFRoaXMgZnVuY3Rpb24gaXMgaW4gdGhlIFgxMS94Zjg2IG5hbWVzcGFjZSBmb3IgaGlzdG9yaWNhbCByZWFzb25zICAgKi8KLSAgLyogICBhbmQgaW4gbm8gd2F5IGRlcGVuZHMgb24gdGhhdCB3aW5kb3dpbmcgc3lzdGVtLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRlRfR2V0X1gxMV9Gb250X0Zvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEZUX0dldF9Gb250X0Zvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBmb3JtYXQgb2YgYSBnaXZlbiBmYWNlLCB1c2luZyB2YWx1ZXMgKi8KLSAgLyogICB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIFgxMSBGT05UX1BST1BFUlRZLiAgUG9zc2libGUgdmFsdWVzIGFyZSAgICAgICovCi0gIC8qICAgYFRydWVUeXBlJywgYFR5cGV+MScsIGBCREYnLCBgUENGJywgYFR5cGV+NDInLCBgQ0lEflR5cGV+MScsIGBDRkYnLCAqLwotICAvKiAgIGBQRlInLCBhbmQgYFdpbmRvd3N+Rk5UJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBSZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZm9ybWF0IG9mIGEgZ2l2ZW4gZmFjZS4gIFBvc3NpYmxlICAgICovCisgIC8qICAgdmFsdWVzIGFyZSBgVHJ1ZVR5cGUnLCBgVHlwZX4xJywgYEJERicsIGBQQ0YnLCBgVHlwZX40MicsICAgICAgICAgICAqLworICAvKiAgIGBDSUR+VHlwZX4xJywgYENGRicsIGBQRlInLCBhbmQgYFdpbmRvd3N+Rk5UJy4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVGhlIHJldHVybiB2YWx1ZSBpcyBzdWl0YWJsZSB0byBiZSB1c2VkIGFzIGFuIFgxMSBGT05UX1BST1BFUlRZLiAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgZmFjZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNzMsMTIgKzcxLDIyIEBACiAgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIEZvbnQgZm9ybWF0IHN0cmluZy4gIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIEEgZGVwcmVjYXRlZCBuYW1lIGZvciB0aGUgc2FtZSBmdW5jdGlvbiBpcyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBgRlRfR2V0X1gxMV9Gb250X0Zvcm1hdCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIGNvbnN0IGNoYXIqICkKKyAgRlRfR2V0X0ZvbnRfRm9ybWF0KCBGVF9GYWNlICBmYWNlICk7CisKKworICAvKiBkZXByZWNhdGVkICovCiAgIEZUX0VYUE9SVCggY29uc3QgY2hhciogKQogICBGVF9HZXRfWDExX0ZvbnRfRm9ybWF0KCBGVF9GYWNlICBmYWNlICk7CiAKKwogICAvKiAqLwogCiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRYRjg2X0hfXyAqLworI2VuZGlmIC8qIF9fRlRGTlRGTVRfSF9fICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0Z2FzcC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0Z2FzcC5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2FzcC5oCmluZGV4IDNmM2Q3NjUuLjlhOWI2MzIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRnYXNwLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBY2Nlc3Mgb2YgVHJ1ZVR5cGUncyBgZ2FzcCcgdGFibGUgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNywgMjAwOCwgMjAxMSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGdseXBoLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2x5cGguaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0Z2x5cGguaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGdseXBoLmgKaW5kZXggMTVmYTZhOS4uODAzYWQzOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGdseXBoLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGdseXBoLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGhhbmRsZSBnbHlwaHMgKHNwZWNpZmljYXRpb24pLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMywgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMywgMjAxNCBieSAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRneHZhbC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGd4dmFsLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGd4dmFsLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRneHZhbC5oCmluZGV4IDg4YzNkOTMuLjBlOWFjMWQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRneHZhbC5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRneHZhbC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBUcnVlVHlwZUdYL0FBVCB0YWJsZXMgKHNwZWNpZmljYXRpb24pLiAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMDYsIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0Z3ppcC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGd6aXAuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0Z3ppcC5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z3ppcC5oCmluZGV4IGViMzQ2YzYuLmIzYTUzMmQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRnemlwLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGd6aXAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBHemlwLWNvbXByZXNzZWQgc3RyZWFtIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDA0LCAyMDA2LCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGltYWdlLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0aW1hZ2UuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgKaW5kZXggMmY3Y2EyYS4uODJmMjg0YyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGltYWdlLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBGcmVlVHlwZSBnbHlwaCBpbWFnZSBmb3JtYXRzIGFuZCBkZWZhdWx0IHJhc3RlciBpbnRlcmZhY2UgICAgICAgICAgICAqLwogLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxMCwgMjAxMywgMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI1OCwxMSArMjU4LDYgQEAKICAgLyogICAgICAgICAgICAgICAgICAgIGZpZWxkIGlzIGludGVuZGVkIGZvciBwYWxldHRlZCBwaXhlbCBtb2Rlcy4gIE5vdCAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICB1c2VkIGN1cnJlbnRseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRm9yIG5vdywgdGhlIG9ubHkgcGl4ZWwgbW9kZXMgc3VwcG9ydGVkIGJ5IEZyZWVUeXBlIGFyZSBtb25vIGFuZCAgICAqLwotICAvKiAgIGdyYXlzLiAgSG93ZXZlciwgZHJpdmVycyBtaWdodCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlIHRvIHN1cHBvcnQgICAgKi8KLSAgLyogICBtb3JlIGBjb2xvcmZ1bCcgb3B0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfQml0bWFwXwogICB7CiAgICAgdW5zaWduZWQgaW50ICAgIHJvd3M7CkBAIC0xMDc4LDEwICsxMDczLDEwIEBACiAgIC8qICAgIEZUX1Jhc3Rlcl9SZXNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIHByb3ZpZGVzIGFuIGFyZWEgb2YgbWVtb3J5IGNhbGxlZCB0aGUgYHJlbmRlciBwb29sJywgICAgICAqLwotICAvKiAgICBhdmFpbGFibGUgdG8gYWxsIHJlZ2lzdGVyZWQgcmFzdGVycy4gIFRoaXMgcG9vbCBjYW4gYmUgZnJlZWx5IHVzZWQgKi8KLSAgLyogICAgZHVyaW5nIGEgZ2l2ZW4gc2Nhbi1jb252ZXJzaW9uIGJ1dCBpcyBzaGFyZWQgYnkgYWxsIHJhc3RlcnMuICBJdHMgICovCi0gIC8qICAgIGNvbnRlbnQgaXMgdGh1cyB0cmFuc2llbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSB1c2VkIHRvIHByb3ZpZGUgYW4gYXJlYSBvZiBtZW1vcnkgY2FsbGVkIHRoZSBgcmVuZGVyICAgICAgKi8KKyAgLyogICAgcG9vbCcgYXZhaWxhYmxlIHRvIGFsbCByZWdpc3RlcmVkIHJhc3RlcnMuICBUaGlzIHdhcyBub3QgdGhyZWFkICAgICovCisgIC8qICAgIHNhZmUgaG93ZXZlciBhbmQgbm93IEZyZWVUeXBlIG5ldmVyIGFsbG9jYXRlcyB0aGlzIHBvb2wuICBOVUxMICAgICAqLworICAvKiAgICBpcyBhbHdheXMgcGFzc2VkIGluIGFzIHBvb2xfYmFzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGVhY2ggdGltZSB0aGUgcmVuZGVyIHBvb2wgY2hhbmdlcywgb3IganVzdCAqLwogICAvKiAgICBhZnRlciBhIG5ldyByYXN0ZXIgb2JqZWN0IGlzIGNyZWF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEwOTQsMTAgKzEwODksOSBAQAogICAvKiAgICBwb29sX3NpemUgOjogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHJlbmRlciBwb29sLiAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSYXN0ZXJzIGNhbiBpZ25vcmUgdGhlIHJlbmRlciBwb29sIGFuZCByZWx5IG9uIGR5bmFtaWMgbWVtb3J5ICAgICAgKi8KKyAgLyogICAgUmFzdGVycyBzaG91bGQgaWdub3JlIHRoZSByZW5kZXIgcG9vbCBhbmQgcmVseSBvbiBkeW5hbWljIG9yIHN0YWNrICovCiAgIC8qICAgIGFsbG9jYXRpb24gaWYgdGhleSB3YW50IHRvIChhIGhhbmRsZSB0byB0aGUgbWVtb3J5IGFsbG9jYXRvciBpcyAgICAqLwotICAvKiAgICBwYXNzZWQgdG8gdGhlIHJhc3RlciBjb25zdHJ1Y3RvcikuICBIb3dldmVyLCB0aGlzIGlzIG5vdCAgICAgICAgICAgKi8KLSAgLyogICAgcmVjb21tZW5kZWQgZm9yIGVmZmljaWVuY3kgcHVycG9zZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBhc3NlZCB0byB0aGUgcmFzdGVyIGNvbnN0cnVjdG9yKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgdHlwZWRlZiB2b2lkCiAgICgqRlRfUmFzdGVyX1Jlc2V0RnVuYykoIEZUX1Jhc3RlciAgICAgICByYXN0ZXIsCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0aW5jcmVtLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW5jcmVtLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGluY3JlbS5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW5jcmVtLmgKaW5kZXggNGMwMjQ2Yy4uODQwYWYyNSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGluY3JlbS5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRpbmNyZW0uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBpbmNyZW1lbnRhbCBsb2FkaW5nIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMiwgMjAwMywgMjAwNi0yMDA4LCAyMDEwLCAyMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGxjZGZpbC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGxjZGZpbC5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRsY2RmaWwuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGxjZGZpbC5oCmluZGV4IDM5MjA2ZjAuLjRjZDk5OWEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRsY2RmaWwuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGNvbG9yIGZpbHRlcmluZyBvZiBzdWJwaXhlbCBiaXRtYXAgZ2x5cGhzICAgICAgICAgICAqLwogLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAwOCwgMjAxMCwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTU2LDcgKzU2LDcgQEAKICAgICoKICAgICogICBGcmVlVHlwZSBnZW5lcmF0ZXMgYWxwaGEgY292ZXJhZ2UgbWFwcywgd2hpY2ggYXJlIGxpbmVhciBieSBuYXR1cmUuCiAgICAqICAgRm9yIGluc3RhbmNlLCB0aGUgdmFsdWUgMHg4MCBpbiBiaXRtYXAgcmVwcmVzZW50YXRpb24gbWVhbnMgdGhhdAotICAgKiAgICh3aXRoaW4gbnVtZXJpY2FsIHByZWNpc2lvbikgMHg4MC8weGZmIGZyYWN0aW9uIG9mIHRoYXQgcGl4ZWwgaXMKKyAgICogICAod2l0aGluIG51bWVyaWNhbCBwcmVjaXNpb24pIDB4ODAvMHhGRiBmcmFjdGlvbiBvZiB0aGF0IHBpeGVsIGlzCiAgICAqICAgY292ZXJlZCBieSB0aGUgZ2x5cGgncyBvdXRsaW5lLiAgVGhlIGJsZW5kaW5nIGZ1bmN0aW9uIGZvciBwbGFjaW5nCiAgICAqICAgdGV4dCBvdmVyIGEgYmFja2dyb3VuZCBpcwogICAgKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGxpc3QuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRsaXN0LmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdGxpc3QuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGxpc3QuaAppbmRleCA5OTUwYTI3Li4xMmI0OGM3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0bGlzdC5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRsaXN0LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgR2VuZXJpYyBsaXN0IHN1cHBvcnQgZm9yIEZyZWVUeXBlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMywgMjAwNywgMjAxMCwgMjAxMywgMjAxNCBieSAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRsencuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRsencuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0bHp3LmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRsencuaAppbmRleCA4NTdjMGM1Li5kM2VjMjhlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0bHp3LmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdGx6dy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIExaVy1jb21wcmVzc2VkIHN0cmVhbSBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LCAyMDA2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0bWFjLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bWFjLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdG1hYy5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bWFjLmgKaW5kZXggNDI4NzRmZS4uMTRjNTVjZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdG1hYy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRtYWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBZGRpdGlvbmFsIE1hYy1zcGVjaWZpYyBBUEkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDA0LCAyMDA2LCAyMDA3LCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIEp1c3QgdmFuIFJvc3N1bSwgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdG1tLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW0uaApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0bW0uaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdG1tLmgKaW5kZXggMmRjZmQ2Ny4uNmVmNDc5OCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdG1tLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdG1tLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgTXVsdGlwbGUgTWFzdGVyIGZvbnQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMywgMjAwNCwgMjAwNiwgMjAwOSwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTk1LDggKzk1LDggQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIG51bV9kZXNpZ25zIDo6IE51bWJlciBvZiBkZXNpZ25zOyBzaG91bGQgYmUgbm9ybWFsbHkgMl5udW1fYXhpcyAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICBldmVuIHRob3VnaCB0aGUgVHlwZX4xIHNwZWNpZmljYXRpb24gc3RyYW5nZWx5ICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgYWxsb3dzIGZvciBpbnRlcm1lZGlhdGUgZGVzaWducyB0byBiZSBwcmVzZW50LiBUaGlzICovCi0gIC8qICAgICAgICAgICAgICAgICAgIG51bWJlciBjYW5ub3QgZXhjZWVkfjE2LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBhbGxvd3MgZm9yIGludGVybWVkaWF0ZSBkZXNpZ25zIHRvIGJlIHByZXNlbnQuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgVGhpcyBudW1iZXIgY2Fubm90IGV4Y2VlZH4xNi4gICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBheGlzICAgICAgICA6OiBBIHRhYmxlIG9mIGF4aXMgZGVzY3JpcHRvcnMuICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yMDEsMTAgKzIwMSwxMCBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZW0uICBUaGUgZm9udCBjYW4gdGVsbCB0aGUgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgIHVzZXIgdGhhdCwgZm9yIGV4YW1wbGUsIFdlaWdodD0xLjUgaXMgYEJvbGQnLiAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBheGlzICAgICAgICAgICAgOjogQSB0YWJsZSBvZiBheGlzIGRlc2NyaXB0b3JzLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYXhpcyAgICAgICAgICAgIDo6IEFuIGF4aXMgZGVzY3JpcHRvciB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICBHWCBmb250cyBjb250YWluIHNsaWdodGx5IG1vcmUgZGF0YSB0aGFuIE1NLiAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbmFtZWRzdHlsZXMgICAgIDo6IEEgdGFibGUgb2YgbmFtZWQgc3R5bGVzLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5hbWVkc3R5bGUgICAgICA6OiBBIG5hbWVkIHN0eWxlIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgT25seSBtZWFuaW5nZnVsIHdpdGggR1guICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9NTV9WYXJfCkBAIC0yODAsOCArMjgwLDEwIEBACiAgIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9jb29yZHMgOjogVGhlIG51bWJlciBvZiBkZXNpZ24gY29vcmRpbmF0ZXMgKG11c3QgYmUgZXF1YWwgdG8gICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYXhlcyBpbiB0aGUgZm9udCkuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX2Nvb3JkcyA6OiBUaGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBkZXNpZ24gY29vcmRpbmF0ZXMuICBJZiBpdCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgaXMgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCBpZ25vcmUgdGhlIGV4Y2VzcyAqLworICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlcy4gIElmIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICB1c2UgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZW1haW5pbmcgYXhlcy4gICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBjb29yZHMgICAgIDo6IEFuIGFycmF5IG9mIGRlc2lnbiBjb29yZGluYXRlcy4gICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zMDcsOCArMzA5LDEwIEBACiAgIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9jb29yZHMgOjogVGhlIG51bWJlciBvZiBkZXNpZ24gY29vcmRpbmF0ZXMgKG11c3QgYmUgZXF1YWwgdG8gICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYXhlcyBpbiB0aGUgZm9udCkuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX2Nvb3JkcyA6OiBUaGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBkZXNpZ24gY29vcmRpbmF0ZXMuICBJZiBpdCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgaXMgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCBpZ25vcmUgdGhlIGV4Y2VzcyAqLworICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlcy4gIElmIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICB1c2UgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZW1haW5pbmcgYXhlcy4gICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBjb29yZHMgICAgIDo6IEFuIGFycmF5IG9mIGRlc2lnbiBjb29yZGluYXRlcy4gICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zMzQsOCArMzM4LDEwIEBACiAgIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9jb29yZHMgOjogVGhlIG51bWJlciBvZiBkZXNpZ24gY29vcmRpbmF0ZXMgKG11c3QgYmUgZXF1YWwgdG8gICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYXhlcyBpbiB0aGUgZm9udCkuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX2Nvb3JkcyA6OiBUaGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBkZXNpZ24gY29vcmRpbmF0ZXMuICBJZiBpdCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgaXMgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCBpZ25vcmUgdGhlIGV4Y2VzcyAqLworICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlcy4gIElmIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICB1c2UgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZW1haW5pbmcgYXhlcy4gICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBjb29yZHMgICAgIDo6IFRoZSBkZXNpZ24gY29vcmRpbmF0ZXMgYXJyYXkgKGVhY2ggZWxlbWVudCBtdXN0IGJlICAgKi8KICAgLyogICAgICAgICAgICAgICAgICBiZXR3ZWVuIDAgYW5kIDEuMCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0bW9kYXBpLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kYXBpLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdG1vZGFwaS5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kYXBpLmgKaW5kZXggOTgwZjE1ZC4uNTQ0Mjc5YSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdG1vZGFwaS5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RhcGkuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBtb2R1bGVzIHB1YmxpYyBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAzLCAyMDA2LCAyMDA4LTIwMTAsIDIwMTIsIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNjMsNyArNjMsNyBAQAogICAvKiAgICAgIHBzYXV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICBwc2hpbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgcHNuYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIHJhc3RlcjEsIHJhc3RlcjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICByYXN0ZXIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgc2ZudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIHNtb290aCwgc21vb3RoLWxjZCwgc21vb3RoLWxjZHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICB0cnVldHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00NjksNyArNDY5LDkgQEAKICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjcmVhdGUgYSBuZXcgRnJlZVR5cGUgbGlicmFyeSBpbnN0YW5jZSAgICAqLwogICAvKiAgICBmcm9tIGEgZ2l2ZW4gbWVtb3J5IG9iamVjdC4gIEl0IGlzIHRodXMgcG9zc2libGUgdG8gdXNlIGxpYnJhcmllcyAgKi8KLSAgLyogICAgd2l0aCBkaXN0aW5jdCBtZW1vcnkgYWxsb2NhdG9ycyB3aXRoaW4gdGhlIHNhbWUgcHJvZ3JhbS4gICAgICAgICAgICovCisgIC8qICAgIHdpdGggZGlzdGluY3QgbWVtb3J5IGFsbG9jYXRvcnMgd2l0aGluIHRoZSBzYW1lIHByb2dyYW0uICBOb3RlLCAgICAqLworICAvKiAgICBob3dldmVyLCB0aGF0IHRoZSB1c2VkIEBGVF9NZW1vcnkgc3RydWN0dXJlIGlzIGV4cGVjdGVkIHRvIHJlbWFpbiAgKi8KKyAgLyogICAgdmFsaWQgZm9yIHRoZSBsaWZlIG9mIHRoZSBARlRfTGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBOb3JtYWxseSwgeW91IHdvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiAoZm9sbG93ZWQgYnkgYSBjYWxsIHRvICAgICAgKi8KICAgLyogICAgQEZUX0FkZF9EZWZhdWx0X01vZHVsZXMgb3IgYSBzZXJpZXMgb2YgY2FsbHMgdG8gQEZUX0FkZF9Nb2R1bGUpICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0bW9kZXJyLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kZXJyLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdG1vZGVyci5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kZXJyLmgKaW5kZXggNWEyN2RiMS4uOWQ3Zjk4MSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdG1vZGVyci5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RlcnIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBtb2R1bGUgZXJyb3Igb2Zmc2V0cyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDA1LCAyMDEwLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdG90dmFsLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3R2YWwuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0b3R2YWwuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdG90dmFsLmgKaW5kZXggNzViYTAzZS4uZTc0NGI3MSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdG90dmFsLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdG90dmFsLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciB2YWxpZGF0aW5nIE9wZW5UeXBlIHRhYmxlcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAwNywgMjAxMywgMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRvdXRsbi5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdG91dGxuLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdG91dGxuLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRvdXRsbi5oCmluZGV4IGQzYjhmYmQuLmI2ZWM3MGQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRvdXRsbi5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRvdXRsbi5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgU3VwcG9ydCBmb3IgdGhlIEZUX091dGxpbmUgdHlwZSB1c2VkIHRvIHN0b3JlIGdseXBoIHNoYXBlcyBvZiAgICAgICAgKi8KIC8qICAgIG1vc3Qgc2NhbGFibGUgZm9udCBmb3JtYXRzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDMsIDIwMDUtMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zNTQsOCArMzU0LDggQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIEZUX0xvYWRfR2x5cGgoIGZhY2UsIGluZGV4LCBGVF9MT0FEX0RFRkFVTFQgKTsgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBpZiAoIGZhY2UtPnNsb3QtPmZvcm1hdCA9PSBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSApICAgICAgICAgICAgICovCi0gIC8qICAgICAgICBGVF9PdXRsaW5lX0VtYm9sZGVuKCAmZmFjZS0+c2xvdC0+b3V0bGluZSwgc3RyZW5ndGggKTsgICAgICAgICAqLworICAvKiAgICAgIGlmICggZmFjZS0+Z2x5cGgtPmZvcm1hdCA9PSBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSApICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIEZUX091dGxpbmVfRW1ib2xkZW4oICZmYWNlLT5nbHlwaC0+b3V0bGluZSwgc3RyZW5ndGggKTsgICAgICAgICovCiAgIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVG8gZ2V0IG1lYW5pbmdmdWwgcmVzdWx0cywgZm9udCBzY2FsaW5nIHZhbHVlcyBtdXN0IGJlIHNldCB3aXRoICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0cGZyLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGZyLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdHBmci5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGZyLmgKaW5kZXggN2Q1MDM1My4uYTFjMDJhMiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdHBmci5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRwZnIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBQRlItc3BlY2lmaWMgZGF0YSAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMiwgMjAwMywgMjAwNCwgMjAwNiwgMjAwOCwgMjAwOSBieSAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdHJlbmRlci5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHJlbmRlci5oCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRyZW5kZXIuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHJlbmRlci5oCmluZGV4IGU4ZDM2MzYuLmVjOGRhNzAgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRyZW5kZXIuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0cmVuZGVyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgcmVuZGVyZXIgbW9kdWxlcyBwdWJsaWMgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwNSwgMjAwNiwgMjAxMCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIxMiwxMyArMjEyLDggQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFRoaXMgZG9lc24ndCBjaGFuZ2UgdGhlIGN1cnJlbnQgcmVuZGVyZXIgZm9yIG90aGVyIGZvcm1hdHMuICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ3VycmVudGx5LCBvbmx5IHRoZSBCL1cgcmVuZGVyZXIsIGlmIGNvbXBpbGVkIHdpdGggICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JBU1RFUl9PUFRJT05fQU5USV9BTElBU0lORyAocHJvdmlkaW5nIGEgNS1sZXZlbHMgICAgICAgICAgICAgICAqLwotICAvKiAgICBhbnRpLWFsaWFzaW5nIG1vZGU7IHRoaXMgb3B0aW9uIG11c3QgYmUgc2V0IGRpcmVjdGx5IGluICAgICAgICAgICAgKi8KLSAgLyogICAgYGZ0cmFzdGVyLmMnIGFuZCBpcyB1bmRlZmluZWQgYnkgZGVmYXVsdCkgYWNjZXB0cyBhIHNpbmdsZSB0YWcgICAgICovCi0gIC8qICAgIGBwYWw1JyB0byBzZXQgaXRzIGdyYXkgcGFsZXR0ZSBhcyBhIGNoYXJhY3RlciBzdHJpbmcgd2l0aCAgICAgICAgICAqLwotICAvKiAgICA1fmVsZW1lbnRzLiAgQ29uc2VxdWVudGx5LCB0aGUgdGhpcmQgYW5kIGZvdXJ0aCBhcmd1bWVudCBhcmUgemVybyAgKi8KLSAgLyogICAgbm9ybWFsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEN1cnJlbnRseSwgbm8gRnJlZVR5cGUgcmVuZGVyZXIgbW9kdWxlIHVzZXMgYHBhcmFtZXRlcnMnOyB5b3UgICAgICAqLworICAvKiAgICBzaG91bGQgdGh1cyBhbHdheXMgcGFzcyBOVUxMIGFzIHRoZSB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9TZXRfUmVuZGVyZXIoIEZUX0xpYnJhcnkgICAgIGxpYnJhcnksCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0c2l6ZXMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRzaXplcy5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRzaXplcy5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c2l6ZXMuaAppbmRleCA0MTY3MDQ1Li5iZWY4NDI0IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0c2l6ZXMuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c2l6ZXMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBzaXplIG9iamVjdHMgbWFuYWdlbWVudCAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDAzLCAyMDA0LCAyMDA2LCAyMDA5LCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdHNuYW1lcy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHNuYW1lcy5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRzbmFtZXMuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHNuYW1lcy5oCmluZGV4IDg4YWY0NDAuLjBmN2ZiZTEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRzbmFtZXMuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c25hbWVzLmgKQEAgLTcsNyArNyw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhpcyBpcyBfbm90XyB1c2VkIHRvIHJldHJpZXZlIGdseXBoIG5hbWVzISAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMywgMjAwNiwgMjAwOSwgMjAxMCwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRzdHJva2UuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRzdHJva2UuaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0c3Ryb2tlLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRzdHJva2UuaAppbmRleCBiZDMxMTcwLi43ZWJiMWU3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0c3Ryb2tlLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHN0cm9rZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHBhdGggc3Ryb2tlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMDYsIDIwMDgsIDIwMDksIDIwMTEtMjAxMiwgMjAxNCBieSAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0c3ludGguaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRzeW50aC5oCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRzeW50aC5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaAppbmRleCBkMGVhNzMwLi5mYmNiYWQ4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0c3ludGguaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEZyZWVUeXBlIHN5bnRoZXNpemluZyBjb2RlIGZvciBlbWJvbGRlbmluZyBhbmQgc2xhbnRpbmcgICAgICAgICAgICAgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDAxLCAyMDAzLCAyMDA2LCAyMDA4LCAyMDEyLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNjIsOCArNjIsMTAgQEAKICAgLyogYSB3cmFwcGVyIGZvciBARlRfT3V0bGluZV9FbWJvbGRlbiBhbmQgQEZUX0JpdG1hcF9FbWJvbGRlbi4gICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBGb3IgZW1ib2xkZW5lZCBvdXRsaW5lcyB0aGUgaGVpZ2h0LCB3aWR0aCwgYW5kIGFkdmFuY2UgbWV0cmljcyBhcmUgICAgKi8KLSAgLyogaW5jcmVhc2VkIGJ5IHRoZSBzdHJlbmd0aCBvZiB0aGUgZW1ib2xkZW5pbmcuICBZb3UgY2FuIGFsc28gY2FsbCAgICAgICovCi0gIC8qIEBGVF9PdXRsaW5lX0dldF9DQm94IHRvIGdldCBwcmVjaXNlIHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBpbmNyZWFzZWQgYnkgdGhlIHN0cmVuZ3RoIG9mIHRoZSBlbWJvbGRlbmluZyAtLSB0aGlzIGV2ZW4gYWZmZWN0cyAgICAgKi8KKyAgLyogbW9uby13aWR0aCBmb250cyEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBZb3UgY2FuIGFsc28gY2FsbCBARlRfT3V0bGluZV9HZXRfQ0JveCB0byBnZXQgcHJlY2lzZSB2YWx1ZXMuICAgICAgICAgKi8KICAgRlRfRVhQT1JUKCB2b2lkICkKICAgRlRfR2x5cGhTbG90X0VtYm9sZGVuKCBGVF9HbHlwaFNsb3QgIHNsb3QgKTsKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdHN5c3RlbS5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHN5c3RlbS5oCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRzeXN0ZW0uaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHN5c3RlbS5oCmluZGV4IDJjOTVjYmIuLjJiYzk5OTkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnRzeXN0ZW0uaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3lzdGVtLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgbG93LWxldmVsIHN5c3RlbSBpbnRlcmZhY2UgZGVmaW5pdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMiwgMjAwNSwgMjAxMCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE5Miw2ICsxOTIsMTAgQEAKICAgICogQGRlc2NyaXB0aW9uOgogICAgKiAgIEEgaGFuZGxlIHRvIGFuIGlucHV0IHN0cmVhbS4KICAgICoKKyAgICogQGFsc286CisgICAqICAgU2VlIEBGVF9TdHJlYW1SZWMgZm9yIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZpZWxkcyBvZiBhIGdpdmVuCisgICAqICAgc3RyZWFtIG9iamVjdC4KKyAgICoKICAgICovCiAgIHR5cGVkZWYgc3RydWN0IEZUX1N0cmVhbVJlY18qICBGVF9TdHJlYW07CiAKQEAgLTI4NSw2ICsyODksMTEgQEAKICAgICogICBzaXplIDo6CiAgICAqICAgICBUaGUgc3RyZWFtIHNpemUgaW4gYnl0ZXMuCiAgICAqCisgICAqICAgICBJbiBjYXNlIG9mIGNvbXByZXNzZWQgc3RyZWFtcyB3aGVyZSB0aGUgc2l6ZSBpcyB1bmtub3duIGJlZm9yZQorICAgKiAgICAgYWN0dWFsbHkgZG9pbmcgdGhlIGRlY29tcHJlc3Npb24sIHRoZSB2YWx1ZSBpcyBzZXQgdG8gMHg3RkZGRkZGRi4gCisgICAqICAgICAoTm90ZSB0aGF0IHRoaXMgc2l6ZSB2YWx1ZSBjYW4gb2NjdXIgZm9yIG5vcm1hbCBzdHJlYW1zIGFsc287IGl0IGlzCisgICAqICAgICB0aHVzIGp1c3QgYSBoaW50LikKKyAgICoKICAgICogICBwb3MgOjoKICAgICogICAgIFRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhpbiB0aGUgc3RyZWFtLgogICAgKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdHRyaWdvbi5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnR0cmlnb24uaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oCmluZGV4IDljN2I1NDMuLjQ4NWVjNTEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnR0cmlnb24uaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHJpZ29uLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgdHJpZ29ub21ldHJpYyBmdW5jdGlvbnMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEsIDIwMDMsIDIwMDUsIDIwMDcsIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIyNSw4ICsyMjUsOCBAQAogICAgKgogICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgUmV0dXJuIHRoZSB1bml0IHZlY3RvciBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gYW5nbGUuICBBZnRlciB0aGUKLSAgICogICBjYWxsLCB0aGUgdmFsdWUgb2YgYHZlYy54JyB3aWxsIGJlIGBzaW4oYW5nbGUpJywgYW5kIHRoZSB2YWx1ZSBvZgotICAgKiAgIGB2ZWMueScgd2lsbCBiZSBgY29zKGFuZ2xlKScuCisgICAqICAgY2FsbCwgdGhlIHZhbHVlIG9mIGB2ZWMueCcgd2lsbCBiZSBgY29zKGFuZ2xlKScsIGFuZCB0aGUgdmFsdWUgb2YKKyAgICogICBgdmVjLnknIHdpbGwgYmUgYHNpbihhbmdsZSknLgogICAgKgogICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHRvIHJldHJpZXZlIGJvdGggdGhlIHNpbnVzIGFuZCBjb3NpbnVzIG9mIGEKICAgICogICBnaXZlbiBhbmdsZSBxdWlja2x5LgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHR0ZHJ2LmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHRkcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzAwODFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHR0ZHJ2LmgKQEAgLTAsMCArMSwzMTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0dHRkcnYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGNvbnRyb2xsaW5nIHRoZSBUcnVlVHlwZSBkcml2ZXIgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX19GVFRURFJWX0hfXworI2RlZmluZSBfX0ZUVFREUlZfSF9fCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaWZkZWYgRlJFRVRZUEVfSAorI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKKyNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgorI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICB0dF9kcml2ZXIKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIFRoZSBUcnVlVHlwZSBkcml2ZXIKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIENvbnRyb2xsaW5nIHRoZSBUcnVlVHlwZSBkcml2ZXIgbW9kdWxlLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgV2hpbGUgRnJlZVR5cGUncyBUcnVlVHlwZSBkcml2ZXIgZG9lc24ndCBleHBvc2UgQVBJIGZ1bmN0aW9ucyBieQorICAgKiAgIGl0c2VsZiwgaXQgaXMgcG9zc2libGUgdG8gY29udHJvbCBpdHMgYmVoYXZpb3VyIHdpdGggQEZUX1Byb3BlcnR5X1NldAorICAgKiAgIGFuZCBARlRfUHJvcGVydHlfR2V0LiAgVGhlIGZvbGxvd2luZyBsaXN0cyB0aGUgYXZhaWxhYmxlIHByb3BlcnRpZXMKKyAgICogICB0b2dldGhlciB3aXRoIHRoZSBuZWNlc3NhcnkgbWFjcm9zIGFuZCBzdHJ1Y3R1cmVzLgorICAgKgorICAgKiAgIFRoZSBUcnVlVHlwZSBkcml2ZXIncyBtb2R1bGUgbmFtZSBpcyBgdHJ1ZXR5cGUnLgorICAgKgorICAgKiAgIFdlIHN0YXJ0IHdpdGggYSBsaXN0IG9mIGRlZmluaXRpb25zLCBraW5kbHkgcHJvdmlkZWQgYnkgR3JlZworICAgKiAgIEhpdGNoY29jay4KKyAgICoKKyAgICogICBfQmktTGV2ZWxfIF9SZW5kZXJpbmdfCisgICAqCisgICAqICAgTW9ub2Nocm9tYXRpYyByZW5kZXJpbmcsIGV4Y2x1c2l2ZWx5IHVzZWQgaW4gdGhlIGVhcmx5IGRheXMgb2YKKyAgICogICBUcnVlVHlwZSBieSBib3RoIEFwcGxlIGFuZCBNaWNyb3NvZnQuICBNaWNyb3NvZnQncyBHREkgaW50ZXJmYWNlCisgICAqICAgc3VwcG9ydGVkIGhpbnRpbmcgb2YgdGhlIHJpZ2h0LXNpZGUgYmVhcmluZyBwb2ludCwgc3VjaCB0aGF0IHRoZQorICAgKiAgIGFkdmFuY2Ugd2lkdGggY291bGQgYmUgbm9uLWxpbmVhci4gIE1vc3Qgb2Z0ZW4gdGhpcyB3YXMgZG9uZSB0bworICAgKiAgIGFjaGlldmUgc29tZSBsZXZlbCBvZiBnbHlwaCBzeW1tZXRyeS4gIFRvIGVuYWJsZSByZWFzb25hYmxlCisgICAqICAgcGVyZm9ybWFuY2UgKGUuZy4sIG5vdCBoYXZpbmcgdG8gcnVuIGhpbnRpbmcgb24gYWxsIGdseXBocyBqdXN0IHRvCisgICAqICAgZ2V0IHRoZSB3aWR0aHMpIHRoZXJlIHdhcyBhIGJpdCBpbiB0aGUgaGVhZCB0YWJsZSBpbmRpY2F0aW5nIGlmIHRoZQorICAgKiAgIHNpZGUgYmVhcmluZyB3YXMgaGludGVkLCBhbmQgYWRkaXRpb25hbCB0YWJsZXMsIGBoZG14JyBhbmQgYExUU0gnLCB0bworICAgKiAgIGNhY2hlIGhpbnRpbmcgd2lkdGhzIGFjcm9zcyBtdWx0aXBsZSBzaXplcyBhbmQgZGV2aWNlIGFzcGVjdCByYXRpb3MuCisgICAqCisgICAqICAgX0ZvbnRfIF9TbW9vdGhpbmdfCisgICAqCisgICAqICAgTWljcm9zb2Z0J3MgR0RJIGltcGxlbWVudGF0aW9uIG9mIGFudGktYWxpYXNpbmcuICBOb3QgdHJhZGl0aW9uYWwKKyAgICogICBhbnRpLWFsaWFzaW5nIGFzIHRoZSBvdXRsaW5lcyB3ZXJlIGhpbnRlZCBiZWZvcmUgdGhlIHNhbXBsaW5nLiAgVGhlCisgICAqICAgd2lkdGhzIG1hdGNoZWQgdGhlIGJpLWxldmVsIHJlbmRlcmluZy4KKyAgICoKKyAgICogICBfQ2xlYXJUeXBlXyBfUmVuZGVyaW5nXworICAgKgorICAgKiAgIFRlY2huaXF1ZSB0aGF0IHVzZXMgcGh5c2ljYWwgc3VicGl4ZWxzIHRvIGltcHJvdmUgcmVuZGVyaW5nIG9uIExDRAorICAgKiAgIChhbmQgb3RoZXIpIGRpc3BsYXlzLiAgQmVjYXVzZSBvZiB0aGUgaGlnaGVyIHJlc29sdXRpb24sIG1hbnkgbWV0aG9kcworICAgKiAgIG9mIGltcHJvdmluZyBzeW1tZXRyeSBpbiBnbHlwaHMgdGhyb3VnaCBoaW50aW5nIHRoZSByaWdodC1zaWRlCisgICAqICAgYmVhcmluZyB3ZXJlIG5vIGxvbmdlciBuZWNlc3NhcnkuICBUaGlzIGxlYWQgdG8gd2hhdCBHREkgY2FsbHMKKyAgICogICBgbmF0dXJhbCB3aWR0aHMnIENsZWFyVHlwZSwgc2VlCisgICAqICAgaHR0cDovL3d3dy5iZWF0c3RhbW0uY29tL3R5cG9ncmFwaHkvUlRSQ2g0Lmh0bSNTZWMyMS4gIFNpbmNlIGhpbnRpbmcKKyAgICogICBoYXMgZXh0cmEgcmVzb2x1dGlvbiwgbW9zdCBub24tbGluZWFyaXR5IHdlbnQgYXdheSwgYnV0IGl0IGlzIHN0aWxsCisgICAqICAgcG9zc2libGUgZm9yIGhpbnRzIHRvIGNoYW5nZSB0aGUgYWR2YW5jZSB3aWR0aHMgaW4gdGhpcyBtb2RlLgorICAgKgorICAgKiAgIF9DbGVhclR5cGVfIF9Db21wYXRpYmxlXyBfV2lkdGhzXworICAgKgorICAgKiAgIE9uZSBvZiB0aGUgZWFybGllc3QgY2hhbGxlbmdlcyB3aXRoIENsZWFyVHlwZSB3YXMgYWxsb3dpbmcgdGhlCisgICAqICAgaW1wbGVtZW50YXRpb24gaW4gR0RJIHRvIGJlIHNlbGVjdGVkIHdpdGhvdXQgcmVxdWlyaW5nIGFsbCBVSSBhbmQKKyAgICogICBkb2N1bWVudHMgdG8gcmVmbG93LiAgVG8gYWRkcmVzcyB0aGlzLCBhIGNvbXBhdGlibGUgbWV0aG9kIG9mCisgICAqICAgcmVuZGVyaW5nIENsZWFyVHlwZSB3YXMgYWRkZWQgd2hlcmUgdGhlIGZvbnQgaGludHMgYXJlIGV4ZWN1dGVkIG9uY2UKKyAgICogICB0byBkZXRlcm1pbmUgdGhlIHdpZHRoIGluIGJpLWxldmVsIHJlbmRlcmluZywgYW5kIHRoZW4gcmUtcnVuIGluCisgICAqICAgQ2xlYXJUeXBlLCB3aXRoIHRoZSBkaWZmZXJlbmNlIGluIHdpZHRocyBiZWluZyBhYnNvcmJlZCBpbiB0aGUgZm9udAorICAgKiAgIGhpbnRzIGZvciBDbGVhclR5cGUgKG1vc3RseSBpbiB0aGUgd2hpdGUgc3BhY2Ugb2YgaGludHMpOyBzZWUKKyAgICogICBodHRwOi8vd3d3LmJlYXRzdGFtbS5jb20vdHlwb2dyYXBoeS9SVFJDaDQuaHRtI1NlYzIwLiAgU29tZXdoYXQgYnkKKyAgICogICBkZWZpbml0aW9uLCBjb21wYXRpYmxlIHdpZHRoIENsZWFyVHlwZSBhbGxvd3MgZm9yIG5vbi1saW5lYXIgd2lkdGhzLAorICAgKiAgIGJ1dCBvbmx5IHdoZW4gdGhlIGJpLWxldmVsIHZlcnNpb24gaGFzIG5vbi1saW5lYXIgd2lkdGhzLgorICAgKgorICAgKiAgIF9DbGVhclR5cGVfIF9TdWJwaXhlbF8gX1Bvc2l0aW9uaW5nXworICAgKgorICAgKiAgIE9uZSBvZiB0aGUgbmljZSBiZW5lZml0cyBvZiBDbGVhclR5cGUgaXMgdGhlIGFiaWxpdHkgdG8gbW9yZSBjcmlzcGx5CisgICAqICAgZGlzcGxheSBmcmFjdGlvbmFsIHdpZHRoczsgdW5mb3J0dW5hdGVseSwgdGhlIEdESSBtb2RlbCBvZiBpbnRlZ2VyCisgICAqICAgYml0bWFwcyBkaWQgbm90IHN1cHBvcnQgdGhpcy4gIEhvd2V2ZXIsIHRoZSBXUEYgYW5kIERpcmVjdCBXcml0ZQorICAgKiAgIGZyYW1ld29ya3MgZG8gc3VwcG9ydCBmcmFjdGlvbmFsIHdpZHRocy4gIERXcml0ZSBjYWxscyB0aGlzIGBuYXR1cmFsCisgICAqICAgbW9kZScsIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIEdESSdzIGBuYXR1cmFsIHdpZHRocycuICBTdWJwaXhlbAorICAgKiAgIHBvc2l0aW9uaW5nLCBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBEaXJlY3QgV3JpdGUsCisgICAqICAgdW5mb3J0dW5hdGVseSBkb2VzIG5vdCBzdXBwb3J0IGhpbnRlZCBhZHZhbmNlIHdpZHRocywgc2VlCisgICAqICAgaHR0cDovL3d3dy5iZWF0c3RhbW0uY29tL3R5cG9ncmFwaHkvUlRSQ2g0Lmh0bSNTZWMyMi4gIE5vdGUgdGhhdCB0aGUKKyAgICogICBUcnVlVHlwZSBpbnRlcnByZXRlciBmdWxseSBhbGxvd3MgdGhlIGFkdmFuY2Ugd2lkdGggdG8gYmUgYWRqdXN0ZWQgaW4KKyAgICogICB0aGlzIG1vZGUsIGp1c3QgdGhlIERXcml0ZSBjbGllbnQgd2lsbCBpZ25vcmUgdGhvc2UgY2hhbmdlcy4KKyAgICoKKyAgICogICBfQ2xlYXJUeXBlXyBfQmFja3dhcmRzXyBfQ29tcGF0aWJpbGl0eV8KKyAgICoKKyAgICogICBUaGlzIGlzIGEgc2V0IG9mIGV4Y2VwdGlvbnMgbWFkZSBpbiB0aGUgVHJ1ZVR5cGUgaW50ZXJwcmV0ZXIgdG8KKyAgICogICBtaW5pbWl6ZSBoaW50aW5nIHRlY2huaXF1ZXMgdGhhdCB3ZXJlIHByb2JsZW1hdGljIHdpdGggdGhlIGV4dHJhCisgICAqICAgcmVzb2x1dGlvbiBvZiBDbGVhclR5cGU7IHNlZQorICAgKiAgIGh0dHA6Ly93d3cuYmVhdHN0YW1tLmNvbS90eXBvZ3JhcGh5L1JUUkNoNC5odG0jU2VjMSBhbmQKKyAgICogICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9jbGVhcnR5cGUvdHJ1ZXR5cGVjbGVhcnR5cGUuYXNweC4KKyAgICogICBUaGlzIHRlY2huaXF1ZSBpcyBub3QgdG8gYmUgY29uZnVzZWQgd2l0aCBDbGVhclR5cGUgY29tcGF0aWJsZQorICAgKiAgIHdpZHRocy4gIENsZWFyVHlwZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBoYXMgbm8gZGlyZWN0IGltcGFjdCBvbgorICAgKiAgIGNoYW5naW5nIGFkdmFuY2Ugd2lkdGhzLCBidXQgdGhlcmUgbWlnaHQgYmUgYW4gaW5kaXJlY3QgaW1wYWN0IG9uCisgICAqICAgZGlzYWJsaW5nIHNvbWUgZGVsdGFzLiAgVGhpcyBjb3VsZCBiZSB3b3JrZWQgYXJvdW5kIGluIGJhY2t3YXJkcworICAgKiAgIGNvbXBhdGliaWxpdHkgbW9kZS4KKyAgICoKKyAgICogICBfTmF0aXZlXyBfQ2xlYXJUeXBlXyBfTW9kZV8KKyAgICoKKyAgICogICAoTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggYG5hdHVyYWwgd2lkdGhzJy4pICBUaGlzIG1vZGUgcmVtb3ZlcyBhbGwKKyAgICogICB0aGUgZXhjZXB0aW9ucyBpbiB0aGUgVHJ1ZVR5cGUgaW50ZXJwcmV0ZXIgd2hlbiBydW5uaW5nIHdpdGgKKyAgICogICBDbGVhclR5cGUuICBBbnkgaXNzdWVzIG9uIHdpZHRocyB3b3VsZCBzdGlsbCBhcHBseSwgdGhvdWdoLgorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAcHJvcGVydHk6CisgICAqICAgaW50ZXJwcmV0ZXItdmVyc2lvbgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQ3VycmVudGx5LCB0d28gdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSwgcmVwcmVzZW50aW5nIHRoZSBieXRlY29kZQorICAgKiAgIGludGVycHJldGVyIHdpdGggYW5kIHdpdGhvdXQgc3VicGl4ZWwgaGludGluZyBzdXBwb3J0LAorICAgKiAgIHJlc3BlY3RpdmVseS4gIFRoZSBkZWZhdWx0IGlzIHN1YnBpeGVsIHN1cHBvcnQgaWYKKyAgICogICBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgaXMgZGVmaW5lZCwgYW5kIG5vIHN1YnBpeGVsCisgICAqICAgc3VwcG9ydCBvdGhlcndpc2UgKHNpbmNlIGl0IGlzbid0IGF2YWlsYWJsZSB0aGVuKS4KKyAgICoKKyAgICogICBJZiBzdWJwaXhlbCBoaW50aW5nIGlzIG9uLCBtYW55IFRydWVUeXBlIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBiZWhhdmUKKyAgICogICBkaWZmZXJlbnRseSBjb21wYXJlZCB0byBCL1cgb3IgZ3JheXNjYWxlIHJlbmRlcmluZyAoZXhjZXB0IGlmIGBuYXRpdmUKKyAgICogICBDbGVhclR5cGUnIGlzIHNlbGVjdGVkIGJ5IHRoZSBmb250KS4gIFRoZSBtYWluIGlkZWEgaXMgdG8gcmVuZGVyIGF0IGEKKyAgICogICBtdWNoIGluY3JlYXNlZCBob3Jpem9udGFsIHJlc29sdXRpb24sIHRoZW4gc2FtcGxpbmcgZG93biB0aGUgY3JlYXRlZAorICAgKiAgIG91dHB1dCB0byBzdWJwaXhlbCBwcmVjaXNpb24uICBIb3dldmVyLCBtYW55IG9sZGVyIGZvbnRzIGFyZSBub3QKKyAgICogICBzdWl0ZWQgdG8gdGhpcyBhbmQgbXVzdCBiZSBzcGVjaWFsbHkgdGFrZW4gY2FyZSBvZiBieSBhcHBseWluZworICAgKiAgIChoYXJkY29kZWQpIGZvbnQtc3BlY2lmaWMgdHdlYWtzLgorICAgKgorICAgKiAgIERldGFpbHMgb24gc3VicGl4ZWwgaGludGluZyBhbmQgc29tZSBvZiB0aGUgbmVjZXNzYXJ5IHR3ZWFrcyBjYW4gYmUKKyAgICogICBmb3VuZCBpbiBHcmVnIEhpdGNoY29jaydzIHdoaXRlcGFwZXIgYXQKKyAgICogICBgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHgnLgorICAgKgorICAgKiAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlIGRlbW9uc3RyYXRlcyBob3cgdG8gYWN0aXZhdGUgc3VicGl4ZWwKKyAgICogICBoaW50aW5nIChvbWl0dGluZyB0aGUgZXJyb3IgaGFuZGxpbmcpLgorICAgKgorICAgKiAgIHsKKyAgICogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgICAqICAgICBGVF9GYWNlICAgICBmYWNlOworICAgKiAgICAgRlRfVUludCAgICAgaW50ZXJwcmV0ZXJfdmVyc2lvbiA9IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzg7CisgICAqCisgICAqCisgICAqICAgICBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOworICAgKgorICAgKiAgICAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LCAidHJ1ZXR5cGUiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJwcmV0ZXItdmVyc2lvbiIsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcnByZXRlcl92ZXJzaW9uICk7CisgICAqICAgfQorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIGZvciB0aGUgQGludGVycHJldGVyLXZlcnNpb24gcHJvcGVydHkgdG8KKyAgICogICBzZWxlY3QgdGhlIGhpbnRpbmcgZW5naW5lIGZvciBUcnVldHlwZSBmb250cy4KKyAgICoKKyAgICogICBUaGUgbnVtZXJpYyB2YWx1ZSBpbiB0aGUgY29uc3RhbnQgbmFtZXMgcmVwcmVzZW50cyB0aGUgdmVyc2lvbgorICAgKiAgIG51bWJlciBhcyByZXR1cm5lZCBieSB0aGUgYEdFVElORk8nIGJ5dGVjb2RlIGluc3RydWN0aW9uLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUgOjoKKyAgICogICAgIFZlcnNpb25+MzUgY29ycmVzcG9uZHMgdG8gTVMgcmFzdGVyaXplciB2LjEuNyBhcyB1c2VkIGUuZy4gaW4KKyAgICogICAgIFdpbmRvd3N+OTg7IG9ubHkgZ3JheXNjYWxlIGFuZCBCL1cgcmFzdGVyaXppbmcgaXMgc3VwcG9ydGVkLgorICAgKgorICAgKiAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggOjoKKyAgICogICAgIFZlcnNpb25+MzggY29ycmVzcG9uZHMgdG8gTVMgcmFzdGVyaXplciB2LjEuOTsgaXQgaXMgcm91Z2hseQorICAgKiAgICAgZXF1aXZhbGVudCB0byB0aGUgaGludGluZyBwcm92aWRlZCBieSBEaXJlY3RXcml0ZSBDbGVhclR5cGUgKGFzCisgICAqICAgICBjYW4gYmUgZm91bmQsIGZvciBleGFtcGxlLCBpbiB0aGUgSW50ZXJuZXQgRXhwbG9yZXJ+OSBydW5uaW5nIG9uCisgICAqICAgICBXaW5kb3dzfjcpLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNvbnRyb2xzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyCisgICAqICAgYW5kIHRodXMgaG93IG91dGxpbmVzIGdldCBoaW50ZWQuICBJdCBkb2VzICpub3QqIGNvbnRyb2wgaG93IGdseXBoCisgICAqICAgZ2V0IHJhc3Rlcml6ZWQhICBJbiBwYXJ0aWN1bGFyLCBpdCBkb2VzIG5vdCBjb250cm9sIHN1YnBpeGVsIGNvbG9yCisgICAqICAgZmlsdGVyaW5nLgorICAgKgorICAgKiAgIElmIEZyZWVUeXBlIGhhcyBub3QgYmVlbiBjb21waWxlZCB3aXRoIGNvbmZpZ3VyYXRpb24gb3B0aW9uCisgICAqICAgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HLCBzZWxlY3RpbmcgdmVyc2lvbn4zOCBjYXVzZXMgYW4KKyAgICogICBgRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZScgZXJyb3IuCisgICAqCisgICAqICAgRGVwZW5kaW5nIG9uIHRoZSBncmFwaGljcyBmcmFtZXdvcmssIE1pY3Jvc29mdCB1c2VzIGRpZmZlcmVudAorICAgKiAgIGJ5dGVjb2RlIGFuZCByZW5kZXJpbmcgZW5naW5lcy4gIEFzIGEgY29uc2VxdWVuY2UsIHRoZSB2ZXJzaW9uCisgICAqICAgbnVtYmVycyByZXR1cm5lZCBieSBhIGNhbGwgdG8gdGhlIGBHRVRJTkZPJyBieXRlY29kZSBpbnN0cnVjdGlvbiBhcmUKKyAgICogICBtb3JlIGNvbnZvbHV0ZWQgdGhhbiBkZXNpcmVkLgorICAgKgorICAgKiAgIEhlcmUgYXJlIHR3byB0YWJsZXMgdGhhdCB0cnkgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBwb3NzaWJsZQorICAgKiAgIHZhbHVlcyBmb3IgdGhlIE1TIHJhc3Rlcml6ZXIgZW5naW5lLCB0b2dldGhlciB3aXRoIHRoZSBhZGRpdGlvbmFsCisgICAqICAgZmVhdHVyZXMgaW50cm9kdWNlZCBieSBpdC4KKyAgICoKKyAgICogICB7CisgICAqICAgICBHRVRJTkZPIGZyYW1ld29yayAgICAgICAgICAgICAgIHZlcnNpb24gZmVhdHVyZQorICAgKiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiAgICAgICAgIDMgICBHREkgKFdpbiAzLjEpLCAgICAgICAgICAgIHYxLjAgIDE2LWJpdCwgZmlyc3QgdmVyc2lvbgorICAgKiAgICAgICAgICAgICBUcnVlSW1hZ2UKKyAgICogICAgICAgIDMzICAgR0RJIChXaW4gTlQgMy4xKSwgICAgICAgICB2MS41ICAzMi1iaXQKKyAgICogICAgICAgICAgICAgSFAgTGFzZXJqZXQKKyAgICogICAgICAgIDM0ICAgR0RJIChXaW4gOTUpICAgICAgICAgICAgICB2MS42ICBmb250IHNtb290aGluZywKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU0NBTlRZUEUgb3Bjb2RlCisgICAqICAgICAgICAzNSAgIEdESSAoV2luIDk4LzIwMDApICAgICAgICAgdjEuNyAgKFVOKVNDQUxFRF9DT01QT05FTlRfT0ZGU0VUCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzIGluIGNvbXBvc2l0ZSBnbHlwaHMKKyAgICogICAgICAgIDM2ICAgTUdESSAoV2luIENFIDIpICAgICAgICAgICB2MS42KyBjbGFzc2ljIENsZWFyVHlwZQorICAgKiAgICAgICAgMzcgICBHREkgKFhQIGFuZCBsYXRlciksICAgICAgIHYxLjggIENsZWFyVHlwZQorICAgKiAgICAgICAgICAgICBHREkrIG9sZCAoYmVmb3JlIFZpc3RhKQorICAgKiAgICAgICAgMzggICBHREkrIG9sZCAoVmlzdGEsIFdpbiA3KSwgIHYxLjkgIHN1YnBpeGVsIENsZWFyVHlwZSwKKyAgICogICAgICAgICAgICAgV1BGICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZLWRpcmVjdGlvbiBDbGVhclR5cGUsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBlcnJvciBjaGVja2luZworICAgKiAgICAgICAgMzkgICBEV3JpdGUgKGJlZm9yZSBXaW4gOCkgICAgIHYyLjAgIHN1YnBpeGVsIENsZWFyVHlwZSBmbGFncworICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gR0VUSU5GTyBvcGNvZGUsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnIGZpeGVzCisgICAqICAgICAgICA0MCAgIEdESSsgKGFmdGVyIFdpbiA3KSwgICAgICAgdjIuMSAgWS1kaXJlY3Rpb24gQ2xlYXJUeXBlIGZsYWcKKyAgICogICAgICAgICAgICAgRFdyaXRlIChXaW4gOCkgICAgICAgICAgICAgICAgICAgIGluIEdFVElORk8gb3Bjb2RlLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXkgQ2xlYXJUeXBlCisgICAqICAgfQorICAgKgorICAgKiAgIFRoZSBgdmVyc2lvbicgZmllbGQgZ2l2ZXMgYSByb3VnaCBvcmllbnRhdGlvbiBvbmx5LCBzaW5jZSBzb21lCisgICAqICAgYXBwbGljYXRpb25zIHByb3ZpZGVkIGNlcnRhaW4gZmVhdHVyZXMgbXVjaCBlYXJsaWVyIChhcyBhbiBleGFtcGxlLAorICAgKiAgIE1pY3Jvc29mdCBSZWFkZXIgdXNlZCBzdWJwaXhlbCBhbmQgWS1kaXJlY3Rpb24gQ2xlYXJUeXBlIGFscmVhZHkgaW4KKyAgICogICBXaW5kb3dzIDIwMDApLiAgU2ltaWxhcmx5LCB1cGRhdGVzIHRvIGEgZ2l2ZW4gZnJhbWV3b3JrIG1pZ2h0IGluY2x1ZGUKKyAgICogICBpbXByb3ZlZCBoaW50aW5nIHN1cHBvcnQuCisgICAqCisgICAqICAgeworICAgKiAgICAgIHZlcnNpb24gICBzYW1wbGluZyAgICAgICAgICByZW5kZXJpbmcgICAgICAgIGNvbW1lbnQKKyAgICogICAgICAgICAgICAgICB4ICAgICAgICB5ICAgICAgIHggICAgICAgICAgIHkKKyAgICogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAqICAgICAgIHYxLjAgICBub3JtYWwgIG5vcm1hbCAgQi9XICAgICAgICAgICBCL1cgICAgYmktbGV2ZWwKKyAgICogICAgICAgdjEuNiAgIGhpZ2ggICAgaGlnaCAgICBncmF5ICAgICAgICAgIGdyYXkgICBncmF5c2NhbGUKKyAgICogICAgICAgdjEuOCAgIGhpZ2ggICAgbm9ybWFsICBjb2xvci1maWx0ZXIgIEIvVyAgICAoR0RJKSBDbGVhclR5cGUKKyAgICogICAgICAgdjEuOSAgIGhpZ2ggICAgaGlnaCAgICBjb2xvci1maWx0ZXIgIGdyYXkgICBDb2xvciBDbGVhclR5cGUKKyAgICogICAgICAgdjIuMSAgIGhpZ2ggICAgbm9ybWFsICBncmF5ICAgICAgICAgIEIvVyAgICBHcmF5IENsZWFyVHlwZQorICAgKiAgICAgICB2Mi4xICAgaGlnaCAgICBoaWdoICAgIGdyYXkgICAgICAgICAgZ3JheSAgIEdyYXkgQ2xlYXJUeXBlCisgICAqICAgfQorICAgKgorICAgKiAgIENvbG9yIGFuZCBHcmF5IENsZWFyVHlwZSBhcmUgdGhlIHR3byBhdmFpbGFibGUgdmFyaWFudHMgb2YKKyAgICogICBgWS1kaXJlY3Rpb24gQ2xlYXJUeXBlJywgbWVhbmluZyBncmF5c2NhbGUgcmFzdGVyaXphdGlvbiBhbG9uZyB0aGUKKyAgICogICBZLWRpcmVjdGlvbjsgdGhlIG5hbWUgdXNlZCBpbiB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhpcworICAgKiAgIGZlYXR1cmUgaXMgYHN5bW1ldHJpYyBzbW9vdGhpbmcnLiAgYENsYXNzaWMgQ2xlYXJUeXBlJyBpcyB0aGUKKyAgICogICBvcmlnaW5hbCBhbGdvcml0aG0gdXNlZCBiZWZvcmUgaW50cm9kdWNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIGluCisgICAqICAgV2luflhQLiAgQW5vdGhlciBuYW1lIGZvciB2MS42J3MgZ3JheXNjYWxlIHJlbmRlcmluZyBpcyBgZm9udAorICAgKiAgIHNtb290aGluZycsIGFuZCBgQ29sb3IgQ2xlYXJUeXBlJyBpcyBzb21ldGltZXMgYWxzbyBjYWxsZWQgYERXcml0ZQorICAgKiAgIENsZWFyVHlwZScuICBUbyBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdG9kYXkncyBDb2xvciBDbGVhclR5cGUgYW5kIHRoZQorICAgKiAgIGVhcmxpZXIgQ2xlYXJUeXBlIHZhcmlhbnQgd2l0aCBCL1cgcmVuZGVyaW5nIGFsb25nIHRoZSB2ZXJ0aWNhbCBheGlzLAorICAgKiAgIHRoZSBsYXR0ZXIgaXMgc29tZXRpbWVzIGNhbGxlZCBgR0RJIENsZWFyVHlwZScuCisgICAqCisgICAqICAgYE5vcm1hbCcgYW5kIGBoaWdoJyBzYW1wbGluZyBkZXNjcmliZSB0aGUgKHZpcnR1YWwpIHJlc29sdXRpb24gdG8KKyAgICogICBhY2Nlc3MgdGhlIHJhc3Rlcml6ZWQgb3V0bGluZSBhZnRlciB0aGUgaGludGluZyBwcm9jZXNzLiAgYE5vcm1hbCcKKyAgICogICBtZWFucyAxIHNhbXBsZSBwZXIgZ3JpZCBsaW5lIChpLmUuLCBCL1cpLiAgSW4gdGhlIGN1cnJlbnQgTWljcm9zb2Z0CisgICAqICAgaW1wbGVtZW50YXRpb24sIGBoaWdoJyBtZWFucyBhbiBleHRyYSB2aXJ0dWFsIHJlc29sdXRpb24gb2YgMTZ4MTYgKG9yCisgICAqICAgMTZ4MSkgZ3JpZCBsaW5lcyBwZXIgcGl4ZWwgZm9yIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBsaWtlIGBNSVJQJy4KKyAgICogICBBZnRlciBoaW50aW5nLCB0aGVzZSAxNiBncmlkIGxpbmVzIGFyZSBtYXBwZWQgdG8gNng1IChvciA2eDEpIGdyaWQKKyAgICogICBsaW5lcyBmb3IgY29sb3IgZmlsdGVyaW5nIGlmIENvbG9yIENsZWFyVHlwZSBpcyBhY3RpdmF0ZWQuCisgICAqCisgICAqICAgTm90ZSB0aGF0IGBHcmF5IENsZWFyVHlwZScgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgdjEuNidzCisgICAqICAgZ3JheXNjYWxlIHJlbmRlcmluZy4gIEhvd2V2ZXIsIHRoZSBHRVRJTkZPIGluc3RydWN0aW9uIGhhbmRsZXMgaXQKKyAgICogICBkaWZmZXJlbnRseTogdjEuNiByZXR1cm5zIGJpdH4xMiAoaGludGluZyBmb3IgZ3JheXNjYWxlKSwgd2hpbGUgdjIuMQorICAgKiAgIHJldHVybnMgYml0c34xMyAoaGludGluZyBmb3IgQ2xlYXJUeXBlKSwgMTggKHN5bW1ldHJpY2FsIHNtb290aGluZyksCisgICAqICAgYW5kfjE5IChHcmF5IENsZWFyVHlwZSkuICBBbHNvLCB0aGlzIG1vZGUgcmVzcGVjdHMgYml0cyAyIGFuZH4zIGZvcgorICAgKiAgIHRoZSB2ZXJzaW9ufjEgZ2FzcCB0YWJsZSBleGNsdXNpdmVseSAobGlrZSBDb2xvciBDbGVhclR5cGUpLCB3aGlsZQorICAgKiAgIHYxLjYgb25seSByZXNwZWN0cyB0aGUgdmFsdWVzIG9mIHZlcnNpb25+MCAoYml0cyAwIGFuZH4xKS4KKyAgICoKKyAgICogICBGcmVlVHlwZSBkb2Vzbid0IHByb3ZpZGUgYWxsIGNhcGFiaWxpdGllcyBvZiB0aGUgbW9zdCByZWNlbnQKKyAgICogICBDbGVhclR5cGUgaW5jYXJuYXRpb24sIHRodXMgd2UgaWRlbnRpZnkgb3VyIHN1YnBpeGVsIHN1cHBvcnQgYXMKKyAgICogICB2ZXJzaW9ufjM4LgorICAgKgorICAgKi8KKyNkZWZpbmUgVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zNSAgMzUKKyNkZWZpbmUgVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCAgMzgKKworIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBfX0ZUVFREUlZfSF9fICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0dHlwZXMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnR0eXBlcy5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnR0eXBlcy5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHlwZXMuaAppbmRleCAyYzAxZTg3Li43MDZhMWJlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0dHlwZXMuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHlwZXMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBzaW1wbGUgdHlwZXMgZGVmaW5pdGlvbnMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAyLCAyMDA0LCAyMDA2LTIwMDksIDIwMTItMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdHdpbmZudC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHdpbmZudC5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnR3aW5mbnQuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHdpbmZudC5oCmluZGV4IDUwMjYxNTguLmNhZWRhYTFjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0d2luZm50LmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mdHdpbmZudC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFdpbmRvd3MgZm50LXNwZWNpZmljIGRhdGEuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLCAyMDA0LCAyMDA4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC01OSw3ICs1OSw3IEBACiAgICAqICAgQSBsaXN0IG9mIHZhbGlkIHZhbHVlcyBmb3IgdGhlIGBjaGFyc2V0JyBieXRlIGluCiAgICAqICAgQEZUX1dpbkZOVF9IZWFkZXJSZWMuICBFeGFjdCBtYXBwaW5nIHRhYmxlcyBmb3IgdGhlIHZhcmlvdXMgY3BYWFhYCiAgICAqICAgZW5jb2RpbmdzIChleGNlcHQgZm9yIGNwMTM2MSkgY2FuIGJlIGZvdW5kIGF0Ci0gICAqICAgZnRwOi8vZnRwLnVuaWNvZGUub3JnL3B1YmxpYyBpbiB0aGUgTUFQUElOR1MvVkVORE9SUy9NSUNTRlQvV0lORE9XUworICAgKiAgIGZ0cDovL2Z0cC51bmljb2RlLm9yZy9QdWJsaWMgaW4gdGhlIE1BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZUL1dJTkRPV1MKICAgICogICBzdWJkaXJlY3RvcnkuICBjcDEzNjEgaXMgcm91Z2hseSBhIHN1cGVyc2V0IG9mCiAgICAqICAgTUFQUElOR1MvT0JTT0xFVEUvRUFTVEFTSUEvS1NDL0pPSEFCLlRYVC4KICAgICoKQEAgLTk1LDcgKzk1LDcgQEAKICAgICogICAgICAgc2Vjb25kIGRlZmF1bHQgY29kZXBhZ2UgdGhhdCBtb3N0IGludGVybmF0aW9uYWwgdmVyc2lvbnMgb2YKICAgICogICAgICAgV2luZG93cyBoYXZlLiAgSXQgaXMgb25lIG9mIHRoZSBPRU0gY29kZXBhZ2VzIGZyb20KICAgICoKLSAgICogICAgICAgICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZ2xvYmFsZGV2L3JlZmVyZW5jZS9jcGhvbWUubXNweCwKKyAgICogICAgICAgICBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9nb2dsb2JhbC9iYjk2NDY1NSwKICAgICoKICAgICogICAgICAgYW5kIGlzIHVzZWQgZm9yIHRoZSBgRE9TIGJveGVzJywgdG8gc3VwcG9ydCBsZWdhY3kgYXBwbGljYXRpb25zLgogICAgKiAgICAgICBBIEdlcm1hbiBXaW5kb3dzIHZlcnNpb24gZm9yIGV4YW1wbGUgdXN1YWxseSB1c2VzIEFOU0kgY29kZXBhZ2UKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvYXV0b2hpbnQuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvYXV0b2hpbnQuaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2F1dG9oaW50LmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvYXV0b2hpbnQuaAppbmRleCA1NDVkZTkzLi44ZDVhOTc3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2F1dG9oaW50LmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9hdXRvaGludC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgYGF1dG9oaW50JyBtb2R1bGUtc3BlY2lmaWMgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDIsIDIwMDcsIDIwMDksIDIwMTIgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2Z0Y2FsYy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2Z0Y2FsYy5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oCmluZGV4IDE0ZWMzN2IuLjY3YWRlN2UgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnRjYWxjLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBcml0aG1ldGljIGNvbXB1dGF0aW9ucyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA2LCAyMDA4LCAyMDA5LCAyMDEyLTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzAwLDYgKzMwMCwxOCBAQAogCiAKICAgLyoKKyAgICogIFRoaXMgZnVuY3Rpb24gbm9ybWFsaXplcyBhIHZlY3RvciBhbmQgcmV0dXJucyBpdHMgb3JpZ2luYWwgbGVuZ3RoLgorICAgKiAgVGhlIG5vcm1hbGl6ZWQgdmVjdG9yIGlzIGEgMTYuMTYgZml4ZWQtcG9pbnQgdW5pdCB2ZWN0b3Igd2l0aCBsZW5ndGgKKyAgICogIGNsb3NlIHRvIDB4MTAwMDAuICBUaGUgYWNjdXJhY3kgb2YgdGhlIHJldHVybmVkIGxlbmd0aCBpcyBsaW1pdGVkIHRvCisgICAqICAxNiBiaXRzIGFsc28uICBUaGUgZnVuY3Rpb24gdXRpbGl6ZXMgcXVpY2sgaW52ZXJzZSBzcXVhcmUgcm9vdAorICAgKiAgYXBwcm94aW1hdGlvbiB3aXRob3V0IGRpdmlzaW9ucyBhbmQgc3F1YXJlIHJvb3RzIHJlbHlpbmcgb24gTmV3dG9uJ3MKKyAgICogIGl0ZXJhdGlvbnMgaW5zdGVhZC4KKyAgICovCisgIEZUX0JBU0UoIEZUX1VJbnQzMiApCisgIEZUX1ZlY3Rvcl9Ob3JtTGVuKCBGVF9WZWN0b3IqICB2ZWN0b3IgKTsKKworCisgIC8qCiAgICAqICBSZXR1cm4gLTEsIDAsIG9yICsxLCBkZXBlbmRpbmcgb24gdGhlIG9yaWVudGF0aW9uIG9mIGEgZ2l2ZW4gY29ybmVyLgogICAgKiAgV2UgdXNlIHRoZSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW0sIHdpdGggcG9zaXRpdmUgdmVydGljYWwgdmFsdWVzCiAgICAqICBnb2luZyB1cHdhcmRzLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgKzEgaWYgdGhlIGNvcm5lciB0dXJucyB0byB0aGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnRkZWJ1Zy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdGRlYnVnLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oCmluZGV4IDU4YTM5MTYuLjIxNmM3MzAgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnRkZWJ1Zy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIERlYnVnZ2luZyBhbmQgbG9nZ2luZyBjb21wb25lbnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDIsIDIwMDQsIDIwMDYtMjAwOSwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNDAsNyArMTQwLDcgQEAKICAgLyogICAgVGhpcyBmdW5jdGlvbiBtYXkgYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNvbnRyb2wgRnJlZVR5cGUgMidzICAgICovCiAgIC8qICAgIGRlYnVnIGxldmVsIGluIHlvdXIgYXBwbGljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfQkFTRSggY29uc3QgY2hhciAqICkKKyAgRlRfQkFTRSggY29uc3QgY2hhciogKQogICBGVF9UcmFjZV9HZXRfTmFtZSggRlRfSW50ICBpZHggKTsKIAogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2Z0ZHJpdmVyLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZHJpdmVyLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdGRyaXZlci5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZHJpdmVyLmgKaW5kZXggOTQwMjE4ZS4uMTY4NTZkMyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdGRyaXZlci5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBmb250IGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAzLCAyMDA2LCAyMDA4LCAyMDExLTIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdGdsb2Fkci5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGdsb2Fkci5oCnNpbWlsYXJpdHkgaW5kZXggODYlCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnRnbG9hZHIuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGdsb2Fkci5oCmluZGV4IGY3MDc3NGYuLjk3MGRkNzAgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnRnbG9hZHIuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Z2xvYWRyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGdseXBoIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEyMSwyMyArMTIxLDI1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgbl9jb250b3VycyApOwogCiAKLSNkZWZpbmUgRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUCggX2xvYWRlciwgX2NvdW50ICkgICAgICAgICAgIFwKLSAgKCAoX2NvdW50KSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKLSAgICAoIChfbG9hZGVyKS0+YmFzZS5vdXRsaW5lLm5fcG9pbnRzICAgICsgICAgICAgICAgICAgICAgIFwKLSAgICAgIChfbG9hZGVyKS0+Y3VycmVudC5vdXRsaW5lLm5fcG9pbnRzICsgICAgICAgICAgICAgICAgIFwKLSAgICAgICh1bnNpZ25lZCBsb25nKShfY291bnQpICkgPD0gKF9sb2FkZXIpLT5tYXhfcG9pbnRzICkKKyNkZWZpbmUgRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUCggX2xvYWRlciwgX2NvdW50ICkgICAgICAgXAorICAoIChfY291bnQpID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgKCAoRlRfVUludCkoX2xvYWRlciktPmJhc2Uub3V0bGluZS5uX3BvaW50cyAgICArICAgIFwKKyAgICAgIChGVF9VSW50KShfbG9hZGVyKS0+Y3VycmVudC5vdXRsaW5lLm5fcG9pbnRzICsgICAgXAorICAgICAgKEZUX1VJbnQpKF9jb3VudCkgKSA8PSAoX2xvYWRlciktPm1heF9wb2ludHMgICApCiAKLSNkZWZpbmUgRlRfR0xZUEhMT0FERVJfQ0hFQ0tfQyggX2xvYWRlciwgX2NvdW50ICkgICAgICAgICAgICBcCi0gICggKF9jb3VudCkgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAotICAgICggKF9sb2FkZXIpLT5iYXNlLm91dGxpbmUubl9jb250b3VycyAgICArICAgICAgICAgICAgICAgIFwKLSAgICAgIChfbG9hZGVyKS0+Y3VycmVudC5vdXRsaW5lLm5fY29udG91cnMgKyAgICAgICAgICAgICAgICBcCi0gICAgICAodW5zaWduZWQgbG9uZykoX2NvdW50KSkgPD0gKF9sb2FkZXIpLT5tYXhfY29udG91cnMgKQorI2RlZmluZSBGVF9HTFlQSExPQURFUl9DSEVDS19DKCBfbG9hZGVyLCBfY291bnQgKSAgICAgICAgIFwKKyAgKCAoX2NvdW50KSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgKCAoRlRfVUludCkoX2xvYWRlciktPmJhc2Uub3V0bGluZS5uX2NvbnRvdXJzICAgICsgICAgXAorICAgICAgKEZUX1VJbnQpKF9sb2FkZXIpLT5jdXJyZW50Lm91dGxpbmUubl9jb250b3VycyArICAgIFwKKyAgICAgIChGVF9VSW50KShfY291bnQpICkgPD0gKF9sb2FkZXIpLT5tYXhfY29udG91cnMgICApCiAKLSNkZWZpbmUgRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUE9JTlRTKCBfbG9hZGVyLCBfcG9pbnRzLCBfY29udG91cnMgKSAgICAgIFwKLSAgKCAoIEZUX0dMWVBITE9BREVSX0NIRUNLX1AoIF9sb2FkZXIsIF9wb2ludHMgKSAgICYmICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIEZUX0dMWVBITE9BREVSX0NIRUNLX0MoIF9sb2FkZXIsIF9jb250b3VycyApICkgICAgICAgICAgICAgICAgICAgIFwKLSAgICA/IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICA6IEZUX0dseXBoTG9hZGVyX0NoZWNrUG9pbnRzKCAoX2xvYWRlciksIChfcG9pbnRzKSwgKF9jb250b3VycykgKSApCisjZGVmaW5lIEZUX0dMWVBITE9BREVSX0NIRUNLX1BPSU5UUyggX2xvYWRlciwgX3BvaW50cywgX2NvbnRvdXJzICkgXAorICAoICggRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUCggX2xvYWRlciwgX3BvaW50cyApICAgJiYgICAgICAgICAgICAgIFwKKyAgICAgIEZUX0dMWVBITE9BREVSX0NIRUNLX0MoIF9sb2FkZXIsIF9jb250b3VycyApICkgICAgICAgICAgICAgICBcCisgICAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIDogRlRfR2x5cGhMb2FkZXJfQ2hlY2tQb2ludHMoIChfbG9hZGVyKSwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludCkoX3BvaW50cyksICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpKF9jb250b3VycykgKSApCiAKIAogICAvKiBjaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCBzcGFjZSB0byBhZGQgYG5fc3Vicycgc3ViLWdseXBocyB0byAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdG1lbW9yeS5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnRtZW1vcnkuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oCmluZGV4IDNkNTFhZWUuLmMwYzU1M2IgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnRtZW1vcnkuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIG1lbW9yeSBtYW5hZ2VtZW50IG1hY3JvcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMiwgMjAwNC0yMDA3LCAyMDEwLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIxNSwxMSArMjE1LDE0IEBACiAjZGVmaW5lIEZUX01FTV9TRVRfRVJST1IoIGNvbmQgKSAgKCAoY29uZCksIGVycm9yICE9IDAgKQogCiAKLSNkZWZpbmUgRlRfTUVNX1NFVCggZGVzdCwgYnl0ZSwgY291bnQgKSAgICAgZnRfbWVtc2V0KCBkZXN0LCBieXRlLCBjb3VudCApCisjZGVmaW5lIEZUX01FTV9TRVQoIGRlc3QsIGJ5dGUsIGNvdW50ICkgICAgICAgICAgICAgICBcCisgICAgICAgICAgZnRfbWVtc2V0KCBkZXN0LCBieXRlLCAoRlRfT2Zmc2V0KShjb3VudCkgKQogCi0jZGVmaW5lIEZUX01FTV9DT1BZKCBkZXN0LCBzb3VyY2UsIGNvdW50ICkgIGZ0X21lbWNweSggZGVzdCwgc291cmNlLCBjb3VudCApCisjZGVmaW5lIEZUX01FTV9DT1BZKCBkZXN0LCBzb3VyY2UsIGNvdW50ICkgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmdF9tZW1jcHkoIGRlc3QsIHNvdXJjZSwgKEZUX09mZnNldCkoY291bnQpICkKIAotI2RlZmluZSBGVF9NRU1fTU9WRSggZGVzdCwgc291cmNlLCBjb3VudCApICBmdF9tZW1tb3ZlKCBkZXN0LCBzb3VyY2UsIGNvdW50ICkKKyNkZWZpbmUgRlRfTUVNX01PVkUoIGRlc3QsIHNvdXJjZSwgY291bnQgKSAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmdF9tZW1tb3ZlKCBkZXN0LCBzb3VyY2UsIChGVF9PZmZzZXQpKGNvdW50KSApCiAKIAogI2RlZmluZSBGVF9NRU1fWkVSTyggZGVzdCwgY291bnQgKSAgRlRfTUVNX1NFVCggZGVzdCwgMCwgY291bnQgKQpAQCAtMjI3LDE0ICsyMzAsMTkgQEAKICNkZWZpbmUgRlRfWkVSTyggcCApICAgICAgICAgICAgICAgIEZUX01FTV9aRVJPKCBwLCBzaXplb2YgKCAqKHApICkgKQogCiAKLSNkZWZpbmUgRlRfQVJSQVlfWkVSTyggZGVzdCwgY291bnQgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBGVF9NRU1fWkVSTyggZGVzdCwgKGNvdW50KSAqIHNpemVvZiAoICooZGVzdCkgKSApCisjZGVmaW5lIEZUX0FSUkFZX1pFUk8oIGRlc3QsIGNvdW50ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9NRU1fWkVSTyggZGVzdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAoRlRfT2Zmc2V0KShjb3VudCkgKiBzaXplb2YgKCAqKGRlc3QpICkgKQogCi0jZGVmaW5lIEZUX0FSUkFZX0NPUFkoIGRlc3QsIHNvdXJjZSwgY291bnQgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBGVF9NRU1fQ09QWSggZGVzdCwgc291cmNlLCAoY291bnQpICogc2l6ZW9mICggKihkZXN0KSApICkKKyNkZWZpbmUgRlRfQVJSQVlfQ09QWSggZGVzdCwgc291cmNlLCBjb3VudCApICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX01FTV9DT1BZKCBkZXN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgKEZUX09mZnNldCkoY291bnQpICogc2l6ZW9mICggKihkZXN0KSApICkKIAotI2RlZmluZSBGVF9BUlJBWV9NT1ZFKCBkZXN0LCBzb3VyY2UsIGNvdW50ICkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgRlRfTUVNX01PVkUoIGRlc3QsIHNvdXJjZSwgKGNvdW50KSAqIHNpemVvZiAoICooZGVzdCkgKSApCisjZGVmaW5lIEZUX0FSUkFZX01PVkUoIGRlc3QsIHNvdXJjZSwgY291bnQgKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9NRU1fTU9WRSggZGVzdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIChGVF9PZmZzZXQpKGNvdW50KSAqIHNpemVvZiAoICooZGVzdCkgKSApCiAKIAogICAvKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdG9ianMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdG9ianMuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaAppbmRleCBiNDVhNWVkLi5kYTU1ODJkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2Z0b2Jqcy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHByaXZhdGUgYmFzZSBjbGFzc2VzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwNiwgMjAwOCwgMjAxMCwgMjAxMi0yMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTgzLDExICs4MywxMiBAQAogICAgICAgICAgICAgeCA+IHkgPyB4ICsgKCAzICogeSA+PiAzICkgICBcCiAgICAgICAgICAgICAgICAgICA6IHkgKyAoIDMgKiB4ID4+IDMgKSApCiAKLSNkZWZpbmUgRlRfUEFEX0ZMT09SKCB4LCBuICkgICggKHgpICYgfigobiktMSkgKQorICAvKiB3ZSB1c2UgRlRfVFlQRU9GIHRvIHN1cHByZXNzIHNpZ25lZG5lc3MgY29tcGlsYXRpb24gd2FybmluZ3MgKi8KKyNkZWZpbmUgRlRfUEFEX0ZMT09SKCB4LCBuICkgICggKHgpICYgfkZUX1RZUEVPRiggeCApKCAobiktMSApICkKICNkZWZpbmUgRlRfUEFEX1JPVU5EKCB4LCBuICkgIEZUX1BBRF9GTE9PUiggKHgpICsgKChuKS8yKSwgbiApCiAjZGVmaW5lIEZUX1BBRF9DRUlMKCB4LCBuICkgICBGVF9QQURfRkxPT1IoICh4KSArICgobiktMSksIG4gKQogCi0jZGVmaW5lIEZUX1BJWF9GTE9PUiggeCApICAgICAoICh4KSAmIH42MyApCisjZGVmaW5lIEZUX1BJWF9GTE9PUiggeCApICAgICAoICh4KSAmIH5GVF9UWVBFT0YoIHggKTYzICkKICNkZWZpbmUgRlRfUElYX1JPVU5EKCB4ICkgICAgIEZUX1BJWF9GTE9PUiggKHgpICsgMzIgKQogI2RlZmluZSBGVF9QSVhfQ0VJTCggeCApICAgICAgRlRfUElYX0ZMT09SKCAoeCkgKyA2MyApCiAKQEAgLTQwNCw3ICs0MDUsNyBAQAogICAvKiAgICBnbHlwaF9oaW50cyAgICAgICA6OiBGb3JtYXQtc3BlY2lmaWMgZ2x5cGggaGludHMgbWFuYWdlbWVudC4gICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSNkZWZpbmUgRlRfR0xZUEhfT1dOX0JJVE1BUCAgMHgxCisjZGVmaW5lIEZUX0dMWVBIX09XTl9CSVRNQVAgIDB4MVUKIAogICB0eXBlZGVmIHN0cnVjdCAgRlRfU2xvdF9JbnRlcm5hbFJlY18KICAgewpAQCAtNjEzLDEyICs2MTQsMTIgQEAKIAogI2RlZmluZSBGVF9SRVFVRVNUX1dJRFRIKCByZXEgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggKHJlcSktPmhvcmlSZXNvbHV0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICA/IChGVF9Qb3MpKCAocmVxKS0+d2lkdGggKiAocmVxKS0+aG9yaVJlc29sdXRpb24gKyAzNiApIC8gNzIgXAorICAgICAgICAgICAgICA/ICggKHJlcSktPndpZHRoICogKEZUX1BvcykocmVxKS0+aG9yaVJlc29sdXRpb24gKyAzNiApIC8gNzIgXAogICAgICAgICAgICAgICA6IChyZXEpLT53aWR0aCApCiAKICNkZWZpbmUgRlRfUkVRVUVTVF9IRUlHSFQoIHJlcSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKCAocmVxKS0+dmVydFJlc29sdXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICA/IChGVF9Qb3MpKCAocmVxKS0+aGVpZ2h0ICogKHJlcSktPnZlcnRSZXNvbHV0aW9uICsgMzYgKSAvIDcyIFwKKyAgICAgICAgICAgICAgPyAoIChyZXEpLT5oZWlnaHQgKiAoRlRfUG9zKShyZXEpLT52ZXJ0UmVzb2x1dGlvbiArIDM2ICkgLyA3MiBcCiAgICAgICAgICAgICAgIDogKHJlcSktPmhlaWdodCApCiAKIApAQCAtNzQwLDkgKzc0MSw4IEBACiAgIC8qICAgICBmYWNlc19saXN0ICAgOjogVGhlIGxpc3Qgb2YgZmFjZXMgY3VycmVudGx5IG9wZW5lZCBieSB0aGlzICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgIGRyaXZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBnbHlwaF9sb2FkZXIgOjogVGhlIGdseXBoIGxvYWRlciBmb3IgYWxsIGZhY2VzIG1hbmFnZWQgYnkgdGhpcyAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgIGRyaXZlci4gIFRoaXMgb2JqZWN0IGlzbid0IGRlZmluZWQgZm9yIHVuc2NhbGFibGUgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBnbHlwaF9sb2FkZXIgOjogVW51c2VkLiAgVXNlZCB0byBiZSBnbHlwaCBsb2FkZXIgZm9yIGFsbCBmYWNlcyAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgIG1hbmFnZWQgYnkgdGhpcyBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9Ecml2ZXJSZWNfCiAgIHsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnRwaWMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRwaWMuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2Z0cGljLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRwaWMuaAppbmRleCA0ODVjZTdhLi43ZjkxNTRmIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2Z0cGljLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHBpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIChkZWNsYXJhdGlvbikuICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LCAyMDEyIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2Z0cmZvcmsuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRyZm9yay5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnRyZm9yay5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cmZvcmsuaAppbmRleCBkNzUwY2JlLi5kYTYxY2E3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2Z0cmZvcmsuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cmZvcmsuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBFbWJlZGRlZCByZXNvdXJjZSBmb3JrcyBhY2Nlc3NvciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNCwgMjAwNiwgMjAwNywgMjAxMiwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE1hc2F0YWtlIFlBTUFUTyBhbmQgUmVkaGF0IEsuSy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNDQsNyArNDQsNyBAQAogICB0eXBlZGVmIHN0cnVjdCAgRlRfUkZvcmtfUmVmXwogICB7CiAgICAgRlRfVVNob3J0ICByZXNfaWQ7Ci0gICAgRlRfVUxvbmcgICBvZmZzZXQ7CisgICAgRlRfTG9uZyAgICBvZmZzZXQ7CiAKICAgfSBGVF9SRm9ya19SZWY7CiAKQEAgLTgzLDcgKzgzLDcgQEAKIAogICAvKiB0aGlzIGFycmF5IGlzIGEgc3RvcmFnZSBpbiBub24tUElDIG1vZGUsIHNvIDsgaXMgbmVlZGVkIGluIEVORCAqLwogI2RlZmluZSBDT05TVF9GVF9SRk9SS19SVUxFX0FSUkFZX0JFR0lOKCBuYW1lLCB0eXBlICkgIFwKLSAgICAgICAgICBjb25zdCB0eXBlIG5hbWVbXSA9IHsKKyAgICAgICAgICBzdGF0aWMgY29uc3QgdHlwZSBuYW1lW10gPSB7CiAjZGVmaW5lIENPTlNUX0ZUX1JGT1JLX1JVTEVfQVJSQVlfRU5UUlkoIGZ1bmNfc3VmZml4LCB0eXBlX3N1ZmZpeCApICBcCiAgICAgICAgICAgeyByYWNjZXNzX2d1ZXNzXyAjIyBmdW5jX3N1ZmZpeCwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBGVF9SRm9ya19SdWxlXyAjIyB0eXBlX3N1ZmZpeCB9LApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdHNlcnYuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdHNlcnYuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaAppbmRleCAxMjAzZWM4Li4xMWEwYzdmIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2Z0c2Vydi5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAwNywgMjAwOSwgMjAxMiwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTczNCwyNCArNzM0LDI0IEBACiAgICAqICBUaGUgaGVhZGVyIGZpbGVzIGNvbnRhaW5pbmcgdGhlIHNlcnZpY2VzLgogICAgKi8KIAotI2RlZmluZSBGVF9TRVJWSUNFX0JERl9IICAgICAgICAgICAgICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oPgotI2RlZmluZSBGVF9TRVJWSUNFX0NJRF9IICAgICAgICAgICAgICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oPgotI2RlZmluZSBGVF9TRVJWSUNFX0dMWVBIX0RJQ1RfSCAgICAgICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdmdsZGljdC5oPgotI2RlZmluZSBGVF9TRVJWSUNFX0dYX1ZBTElEQVRFX0ggICAgICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfS0VSTklOR19IICAgICAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2a2Vybi5oPgotI2RlZmluZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSCAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfT1BFTlRZUEVfVkFMSURBVEVfSCAgPGludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QRlJfSCAgICAgICAgICAgICAgICA8aW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0ggICA8aW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSCAgICA8aW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVfSCAgICA8aW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0ggICAgICAgICA8aW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfU0ZOVF9IICAgICAgICAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oPgotI2RlZmluZSBGVF9TRVJWSUNFX1RSVUVUWVBFX0VOR0lORV9IICAgIDxpbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfVFRfQ01BUF9IICAgICAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfV0lORk5UX0ggICAgICAgICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2d2luZm50Lmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfWEZSRUU4Nl9OQU1FX0ggICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2eGY4Nm5tLmg+Ci0jZGVmaW5lIEZUX1NFUlZJQ0VfVFJVRVRZUEVfR0xZRl9IICAgICAgPGludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfQkRGX0ggICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfQ0lEX0ggICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9IICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0Lmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfR1hfVkFMSURBVEVfSCAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9LRVJOSU5HX0ggICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19IICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9PUEVOVFlQRV9WQUxJREFURV9IICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZvdHZhbC5oPgorI2RlZmluZSBGVF9TRVJWSUNFX1BGUl9IICAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oPgorI2RlZmluZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSCAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oPgorI2RlZmluZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfSU5GT19IICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzaW5mby5oPgorI2RlZmluZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRV9IICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBvc3RubS5oPgorI2RlZmluZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSCAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9TRk5UX0ggICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZzZm50Lmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfVFJVRVRZUEVfRU5HSU5FX0ggICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9UVF9DTUFQX0ggICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9XSU5GTlRfSCAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z3aW5mbnQuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9IICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9UUlVFVFlQRV9HTFlGX0ggICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGdseWYuaD4KIAogIC8qICovCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnRzdHJlYW0uaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2Z0c3RyZWFtLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaAppbmRleCAyNjYxODU4Li4zODRlNWRmIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2Z0c3RyZWFtLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFN0cmVhbSBoYW5kbGluZyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDIsIDIwMDQtMjAwNiwgMjAxMSwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zNjEsNyArMzYxLDcgQEAKICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgZGlzdGFuY2UgKTsKIAogICAvKiByZXR1cm4gY3VycmVudCBzdHJlYW0gcG9zaXRpb24gKi8KLSAgRlRfQkFTRSggRlRfTG9uZyApCisgIEZUX0JBU0UoIEZUX1VMb25nICkKICAgRlRfU3RyZWFtX1BvcyggRlRfU3RyZWFtICBzdHJlYW0gKTsKIAogICAvKiByZWFkIGJ5dGVzIGZyb20gYSBzdHJlYW0gaW50byBhIHVzZXItYWxsb2NhdGVkIGJ1ZmZlciwgcmV0dXJucyBhbiAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdHRyYWNlLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2Z0dHJhY2UuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmgKaW5kZXggZDUyNTNkYi4uOWQyOGQyMSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdHRyYWNlLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJhY2luZyBoYW5kbGluZyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDIsIDIwMDQtMjAwNywgMjAwOSwgMjAxMS0yMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnR2YWxpZC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHZhbGlkLmgKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdHZhbGlkLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oCmluZGV4IDEyYWQwMzYuLjljZGE2ZWUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnR2YWxpZC5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHZhbGlkYXRpb24gc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC04NywxMyArODcsMTMgQEAKICAgLyogdmFsaWRhdG9yIHN0cnVjdHVyZSAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfVmFsaWRhdG9yUmVjXwogICB7CisgICAgZnRfam1wX2J1ZiAgICAgICAgICBqdW1wX2J1ZmZlcjsgLyogdXNlZCBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nICAgICAgKi8KKwogICAgIGNvbnN0IEZUX0J5dGUqICAgICAgYmFzZTsgICAgICAgIC8qIGFkZHJlc3Mgb2YgdGFibGUgaW4gbWVtb3J5ICAgICAgICovCiAgICAgY29uc3QgRlRfQnl0ZSogICAgICBsaW1pdDsgICAgICAgLyogYGJhc2UnICsgc2l6ZW9mKHRhYmxlKSBpbiBtZW1vcnkgKi8KICAgICBGVF9WYWxpZGF0aW9uTGV2ZWwgIGxldmVsOyAgICAgICAvKiB2YWxpZGF0aW9uIGxldmVsICAgICAgICAgICAgICAgICAqLwogICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7ICAgICAgIC8qIGVycm9yIHJldHVybmVkLiAwIG1lYW5zIHN1Y2Nlc3MgICovCiAKLSAgICBmdF9qbXBfYnVmICAgICAgICAgIGp1bXBfYnVmZmVyOyAvKiB1c2VkIGZvciBleGNlcHRpb24gaGFuZGxpbmcgICAgICAqLwotCiAgIH0gRlRfVmFsaWRhdG9yUmVjOwogCiAjaWYgZGVmaW5lZCggX01TQ19WRVIgKQpAQCAtMTI2LDMxICsxMjYsMjkgQEAKICAgLyogQ2FsbHMgZnRfdmFsaWRhdGVfZXJyb3IuICBBc3N1bWVzIHRoYXQgdGhlIGB2YWxpZCcgbG9jYWwgdmFyaWFibGUgKi8KICAgLyogaG9sZHMgYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IHZhbGlkYXRvciBvYmplY3QuICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVXNlIHByZXByb2Nlc3NvciBwcmVzY2FuIHRvIHBhc3MgRlRfRVJSX1BSRUZJWC4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRlRfSU5WQUxJRCggX3ByZWZpeCwgX2Vycm9yICkgIEZUX0lOVkFMSURfKCBfcHJlZml4LCBfZXJyb3IgKQotI2RlZmluZSBGVF9JTlZBTElEXyggX3ByZWZpeCwgX2Vycm9yICkgXAotICAgICAgICAgIGZ0X3ZhbGlkYXRvcl9lcnJvciggdmFsaWQsIF9wcmVmaXggIyMgX2Vycm9yICkKKyNkZWZpbmUgRlRfSU5WQUxJRCggX2Vycm9yICkgIEZUX0lOVkFMSURfKCBfZXJyb3IgKQorI2RlZmluZSBGVF9JTlZBTElEXyggX2Vycm9yICkgXAorICAgICAgICAgIGZ0X3ZhbGlkYXRvcl9lcnJvciggdmFsaWQsIEZUX1RIUk9XKCBfZXJyb3IgKSApCiAKICAgLyogY2FsbGVkIHdoZW4gYSBicm9rZW4gdGFibGUgaXMgZGV0ZWN0ZWQgKi8KICNkZWZpbmUgRlRfSU5WQUxJRF9UT09fU0hPUlQgXAotICAgICAgICAgIEZUX0lOVkFMSUQoIEZUX0VSUl9QUkVGSVgsIEludmFsaWRfVGFibGUgKQorICAgICAgICAgIEZUX0lOVkFMSUQoIEludmFsaWRfVGFibGUgKQogCiAgIC8qIGNhbGxlZCB3aGVuIGFuIGludmFsaWQgb2Zmc2V0IGlzIGRldGVjdGVkICovCiAjZGVmaW5lIEZUX0lOVkFMSURfT0ZGU0VUIFwKLSAgICAgICAgICBGVF9JTlZBTElEKCBGVF9FUlJfUFJFRklYLCBJbnZhbGlkX09mZnNldCApCisgICAgICAgICAgRlRfSU5WQUxJRCggSW52YWxpZF9PZmZzZXQgKQogCiAgIC8qIGNhbGxlZCB3aGVuIGFuIGludmFsaWQgZm9ybWF0L3ZhbHVlIGlzIGRldGVjdGVkICovCiAjZGVmaW5lIEZUX0lOVkFMSURfRk9STUFUIFwKLSAgICAgICAgICBGVF9JTlZBTElEKCBGVF9FUlJfUFJFRklYLCBJbnZhbGlkX1RhYmxlICkKKyAgICAgICAgICBGVF9JTlZBTElEKCBJbnZhbGlkX1RhYmxlICkKIAogICAvKiBjYWxsZWQgd2hlbiBhbiBpbnZhbGlkIGdseXBoIGluZGV4IGlzIGRldGVjdGVkICovCiAjZGVmaW5lIEZUX0lOVkFMSURfR0xZUEhfSUQgXAotICAgICAgICAgIEZUX0lOVkFMSUQoIEZUX0VSUl9QUkVGSVgsIEludmFsaWRfR2x5cGhfSW5kZXggKQorICAgICAgICAgIEZUX0lOVkFMSUQoIEludmFsaWRfR2x5cGhfSW5kZXggKQogCiAgIC8qIGNhbGxlZCB3aGVuIGFuIGludmFsaWQgZmllbGQgdmFsdWUgaXMgZGV0ZWN0ZWQgKi8KICNkZWZpbmUgRlRfSU5WQUxJRF9EQVRBIFwKLSAgICAgICAgICBGVF9JTlZBTElEKCBGVF9FUlJfUFJFRklYLCBJbnZhbGlkX1RhYmxlICkKKyAgICAgICAgICBGVF9JTlZBTElEKCBJbnZhbGlkX1RhYmxlICkKIAogCiBGVF9FTkRfSEVBREVSCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL2ludGVybmFsLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2ludGVybmFsLmgKc2ltaWxhcml0eSBpbmRleCA2MCUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9pbnRlcm5hbC5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2ludGVybmFsLmgKaW5kZXggZTBkZGIwNi4uODA5Y2U1OSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9pbnRlcm5hbC5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBJbnRlcm5hbCBoZWFkZXIgZmlsZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA0LCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjQsMjggKzI0LDI4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNkZWZpbmUgRlRfSU5URVJOQUxfT0JKRUNUU19IICAgICAgICAgICAgIDxpbnRlcm5hbC9mdG9ianMuaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfUElDX0ggICAgICAgICAgICAgICAgIDxpbnRlcm5hbC9mdHBpYy5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9TVFJFQU1fSCAgICAgICAgICAgICAgPGludGVybmFsL2Z0c3RyZWFtLmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX01FTU9SWV9IICAgICAgICAgICAgICA8aW50ZXJuYWwvZnRtZW1vcnkuaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfREVCVUdfSCAgICAgICAgICAgICAgIDxpbnRlcm5hbC9mdGRlYnVnLmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX0NBTENfSCAgICAgICAgICAgICAgICA8aW50ZXJuYWwvZnRjYWxjLmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX0RSSVZFUl9IICAgICAgICAgICAgICA8aW50ZXJuYWwvZnRkcml2ZXIuaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfVFJBQ0VfSCAgICAgICAgICAgICAgIDxpbnRlcm5hbC9mdHRyYWNlLmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX0dMWVBIX0xPQURFUl9IICAgICAgICA8aW50ZXJuYWwvZnRnbG9hZHIuaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfU0ZOVF9IICAgICAgICAgICAgICAgIDxpbnRlcm5hbC9zZm50Lmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSCAgICAgICAgICAgICA8aW50ZXJuYWwvZnRzZXJ2Lmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX1JGT1JLX0ggICAgICAgICAgICAgICA8aW50ZXJuYWwvZnRyZm9yay5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9WQUxJREFURV9IICAgICAgICAgICAgPGludGVybmFsL2Z0dmFsaWQuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfT0JKRUNUU19IICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfUElDX0ggICAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdHBpYy5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9TVFJFQU1fSCAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX01FTU9SWV9IICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfREVCVUdfSCAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX0NBTENfSCAgICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX0RSSVZFUl9IICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfVFJBQ0VfSCAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX0dMWVBIX0xPQURFUl9IICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfU0ZOVF9IICAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZm50Lmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSCAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2Lmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX1JGT1JLX0ggICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRyZm9yay5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9WQUxJREFURV9IICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0dmFsaWQuaD4KIAotI2RlZmluZSBGVF9JTlRFUk5BTF9UUlVFVFlQRV9UWVBFU19IICAgICAgPGludGVybmFsL3R0dHlwZXMuaD4KLSNkZWZpbmUgRlRfSU5URVJOQUxfVFlQRTFfVFlQRVNfSCAgICAgICAgIDxpbnRlcm5hbC90MXR5cGVzLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX1RSVUVUWVBFX1RZUEVTX0ggICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oPgorI2RlZmluZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19IICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaD4KIAotI2RlZmluZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9IICAgICAgPGludGVybmFsL3BzYXV4Lmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSCAgICA8aW50ZXJuYWwvcHNoaW50cy5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0dMT0JBTFNfSCAgPGludGVybmFsL3BzZ2xvYmFsLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0ggICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19IICAgIDxmcmVldHlwZS9pbnRlcm5hbC9wc2hpbnRzLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfR0xPQkFMU19IICA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNnbG9iYWwuaD4KIAotI2RlZmluZSBGVF9JTlRFUk5BTF9BVVRPSElOVF9IICAgICAgICAgICAgPGludGVybmFsL2F1dG9oaW50Lmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX0FVVE9ISU5UX0ggICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvYXV0b2hpbnQuaD4KIAogCiAjaWYgZGVmaW5lZCggX01TQ19WRVIgKSAgICAgIC8qIFZpc3VhbCBDKysgKGFuZCBJbnRlbCBDKyspICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3BzYXV4LmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9wc2F1eC5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmgKaW5kZXggZTkwMzExNC4uMWM1Zjc4NCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9wc2F1eC5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEF1eGlsaWFyeSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIFBvc3RTY3JpcHQgZm9udHMgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA0LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEyIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgKCpkb25lKSggUFNfVGFibGUgIHRhYmxlICk7CiAKICAgICBGVF9FcnJvcgotICAgICgqYWRkKSggUFNfVGFibGUgICAgdGFibGUsCi0gICAgICAgICAgICBGVF9JbnQgICAgICBpZHgsCi0gICAgICAgICAgICB2b2lkKiAgICAgICBvYmplY3QsCi0gICAgICAgICAgICBGVF9QdHJEaXN0ICBsZW5ndGggKTsKKyAgICAoKmFkZCkoIFBTX1RhYmxlICB0YWJsZSwKKyAgICAgICAgICAgIEZUX0ludCAgICBpZHgsCisgICAgICAgICAgICB2b2lkKiAgICAgb2JqZWN0LAorICAgICAgICAgICAgRlRfVUludCAgIGxlbmd0aCApOwogCiAgICAgdm9pZAogICAgICgqcmVsZWFzZSkoIFBTX1RhYmxlICB0YWJsZSApOwpAQCAtMTIyLDEyICsxMjIsMTIgQEAKICAgICBGVF9CeXRlKiAgICAgICAgICAgYmxvY2s7ICAgICAgICAgIC8qIGN1cnJlbnQgbWVtb3J5IGJsb2NrICAgICAgICAgICAqLwogICAgIEZUX09mZnNldCAgICAgICAgICBjdXJzb3I7ICAgICAgICAgLyogY3VycmVudCBjdXJzb3IgaW4gbWVtb3J5IGJsb2NrICovCiAgICAgRlRfT2Zmc2V0ICAgICAgICAgIGNhcGFjaXR5OyAgICAgICAvKiBjdXJyZW50IHNpemUgb2YgbWVtb3J5IGJsb2NrICAgKi8KLSAgICBGVF9Mb25nICAgICAgICAgICAgaW5pdDsKKyAgICBGVF9VTG9uZyAgICAgICAgICAgaW5pdDsKIAogICAgIEZUX0ludCAgICAgICAgICAgICBtYXhfZWxlbXM7CiAgICAgRlRfSW50ICAgICAgICAgICAgIG51bV9lbGVtczsKICAgICBGVF9CeXRlKiogICAgICAgICAgZWxlbWVudHM7ICAgICAgIC8qIGFkZHJlc3NlcyBvZiB0YWJsZSBlbGVtZW50cyAqLwotICAgIEZUX1B0ckRpc3QqICAgICAgICBsZW5ndGhzOyAgICAgICAgLyogbGVuZ3RocyBvZiB0YWJsZSBlbGVtZW50cyAgICovCisgICAgRlRfVUludCogICAgICAgICAgIGxlbmd0aHM7ICAgICAgICAvKiBsZW5ndGhzIG9mIHRhYmxlIGVsZW1lbnRzICAgKi8KIAogICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnk7CiAgICAgUFNfVGFibGVfRnVuY3NSZWMgIGZ1bmNzOwpAQCAtMzY1LDcgKzM2NSw3IEBACiAgICAgKCp0b19ieXRlcykoIFBTX1BhcnNlciAgcGFyc2VyLAogICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJ5dGVzLAogICAgICAgICAgICAgICAgICBGVF9PZmZzZXQgIG1heF9ieXRlcywKLSAgICAgICAgICAgICAgICAgRlRfTG9uZyogICBwbnVtX2J5dGVzLAorICAgICAgICAgICAgICAgICBGVF9VTG9uZyogIHBudW1fYnl0ZXMsCiAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgZGVsaW1pdGVycyApOwogCiAgICAgRlRfSW50CkBAIC02NzUsOSArNjc1LDkgQEAKICAgICBGVF9CeXRlKiogICAgICAgICAgICBnbHlwaF9uYW1lczsKIAogICAgIEZUX0ludCAgICAgICAgICAgICAgIGxlbklWOyAgICAgICAgLyogaW50ZXJuYWwgZm9yIHN1YiByb3V0aW5lIGNhbGxzICovCi0gICAgRlRfVUludCAgICAgICAgICAgICAgbnVtX3N1YnJzOworICAgIEZUX0ludCAgICAgICAgICAgICAgIG51bV9zdWJyczsKICAgICBGVF9CeXRlKiogICAgICAgICAgICBzdWJyczsKLSAgICBGVF9QdHJEaXN0KiAgICAgICAgICBzdWJyc19sZW47ICAgIC8qIGFycmF5IG9mIHN1YnJzIGxlbmd0aCAob3B0aW9uYWwpICovCisgICAgRlRfVUludCogICAgICAgICAgICAgc3VicnNfbGVuOyAgICAvKiBhcnJheSBvZiBzdWJycyBsZW5ndGggKG9wdGlvbmFsKSAqLwogCiAgICAgRlRfTWF0cml4ICAgICAgICAgICAgZm9udF9tYXRyaXg7CiAgICAgRlRfVmVjdG9yICAgICAgICAgICAgZm9udF9vZmZzZXQ7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3BzaGludHMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNoaW50cy5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvcHNoaW50cy5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaAppbmRleCBmMDVlYTY4Li4xMmFhYWJhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3BzaGludHMuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaApAQCAtNiw3ICs2LDcgQEAKIC8qICAgIHJlY29yZGVycyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gIFRoZXNlIGFyZSB1c2VkIHRvIHN1cHBvcnQgbmF0aXZlICAgICovCiAvKiAgICBUMS9UMiBoaW50cyBpbiB0aGUgYHR5cGUxJywgYGNpZCcsIGFuZCBgY2ZmJyBmb250IGRyaXZlcnMuICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDAzLCAyMDA1LTIwMDcsIDIwMDksIDIwMTIsIDIwMTQgYnkgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNDY1LDcgKzQ2NSw3IEBACiAgIHR5cGVkZWYgdm9pZAogICAoKlQyX0hpbnRzX1N0ZW1zRnVuYykoIFQyX0hpbnRzICAgaGludHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBkaW1lbnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRpbmF0ZXMgKTsKIAogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmgKaW5kZXggMDk3NDc1Mi4uODY1YjUzNiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZiZGYuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgQkRGIHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMywgMjAwOSwgMjAxMiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjaWQuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oCmluZGV4IDZiZTNmOTMuLjRhNTM1YTYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjaWQuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmgKQEAgLTQsNyArNCw4IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIENJRCBmb250IHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDcsIDIwMDksIDIwMTIgYnkgRGVyZWsgQ2xlZ2csIE1pY2hhZWwgVG9mdGRhbC4gICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEZXJlayBDbGVnZyBhbmQgTWljaGFlbCBUb2Z0ZGFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KIC8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2eGY4Nm5tLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10LmgKc2ltaWxhcml0eSBpbmRleCA2NSUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnhmODZubS5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10LmgKaW5kZXggY2E1ZDg4NC4uZjhiMzYxNyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnhmODZubS5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaApAQCAtMSwxMCArMSwxMCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3Z4Zjg2bm0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHN2Zm50Zm10LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgWEZyZWU4NiBzZXJ2aWNlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAqLworLyogICAgVGhlIEZyZWVUeXBlIGZvbnQgZm9ybWF0IHNlcnZpY2UgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NWWEY4Nk5NX0hfXwotI2RlZmluZSBfX1NWWEY4Nk5NX0hfXworI2lmbmRlZiBfX1NWRk5URk1UX0hfXworI2RlZmluZSBfX1NWRk5URk1UX0hfXwogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKIApAQCAtMzEsMTcgKzMxLDE3IEBACiAgICAqICBpcyBhIHNpbXBsZSBjb25zdGFudCBzdHJpbmcgcG9pbnRlci4KICAgICovCiAKLSNkZWZpbmUgRlRfU0VSVklDRV9JRF9YRjg2X05BTUUgICJ4Zjg2LWRyaXZlci1uYW1lIgorI2RlZmluZSBGVF9TRVJWSUNFX0lEX0ZPTlRfRk9STUFUICAiZm9udC1mb3JtYXQiCiAKLSNkZWZpbmUgRlRfWEY4Nl9GT1JNQVRfVFJVRVRZUEUgICJUcnVlVHlwZSIKLSNkZWZpbmUgRlRfWEY4Nl9GT1JNQVRfVFlQRV8xICAgICJUeXBlIDEiCi0jZGVmaW5lIEZUX1hGODZfRk9STUFUX0JERiAgICAgICAiQkRGIgotI2RlZmluZSBGVF9YRjg2X0ZPUk1BVF9QQ0YgICAgICAgIlBDRiIKLSNkZWZpbmUgRlRfWEY4Nl9GT1JNQVRfVFlQRV80MiAgICJUeXBlIDQyIgotI2RlZmluZSBGVF9YRjg2X0ZPUk1BVF9DSUQgICAgICAgIkNJRCBUeXBlIDEiCi0jZGVmaW5lIEZUX1hGODZfRk9STUFUX0NGRiAgICAgICAiQ0ZGIgotI2RlZmluZSBGVF9YRjg2X0ZPUk1BVF9QRlIgICAgICAgIlBGUiIKLSNkZWZpbmUgRlRfWEY4Nl9GT1JNQVRfV0lORk5UICAgICJXaW5kb3dzIEZOVCIKKyNkZWZpbmUgRlRfRk9OVF9GT1JNQVRfVFJVRVRZUEUgICJUcnVlVHlwZSIKKyNkZWZpbmUgRlRfRk9OVF9GT1JNQVRfVFlQRV8xICAgICJUeXBlIDEiCisjZGVmaW5lIEZUX0ZPTlRfRk9STUFUX0JERiAgICAgICAiQkRGIgorI2RlZmluZSBGVF9GT05UX0ZPUk1BVF9QQ0YgICAgICAgIlBDRiIKKyNkZWZpbmUgRlRfRk9OVF9GT1JNQVRfVFlQRV80MiAgICJUeXBlIDQyIgorI2RlZmluZSBGVF9GT05UX0ZPUk1BVF9DSUQgICAgICAgIkNJRCBUeXBlIDEiCisjZGVmaW5lIEZUX0ZPTlRfRk9STUFUX0NGRiAgICAgICAiQ0ZGIgorI2RlZmluZSBGVF9GT05UX0ZPUk1BVF9QRlIgICAgICAgIlBGUiIKKyNkZWZpbmUgRlRfRk9OVF9GT1JNQVRfV0lORk5UICAgICJXaW5kb3dzIEZOVCIKIAogICAvKiAqLwogCkBAIC00OSw3ICs0OSw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fU1ZYRjg2Tk1fSF9fICovCisjZW5kaWYgLyogX19TVkZOVEZNVF9IX18gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0LmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaAppbmRleCAxZDEyNTM0Li5mNzhiY2E1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0LmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmdsZGljdC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBnbHlwaCBkaWN0aW9uYXJ5IHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLCAyMDA5LCAyMDEyIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZneHZhbC5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZneHZhbC5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaAppbmRleCAyY2RhYjUwLi41OWNjM2I3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIHZhbGlkYXRpbmcgVHJ1ZVR5cGVHWC9BQVQgdGFibGVzIChzcGVjaWZpY2F0aW9uKS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNCwgMjAwNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaAppbmRleCAxNDg4YWRmLi5iYzI2ZjE1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2a2Vybi5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIEtlcm5pbmcgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oCmluZGV4IGIwOGE2NjMuLmYyY2VjZmIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBNdWx0aXBsZSBNYXN0ZXJzIGFuZCBHWCB2YXIgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLCAyMDA0LCAyMDA5LCAyMDEyIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZvdHZhbC5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZvdHZhbC5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaAppbmRleCA5NzBiYmQ1Li5hODJhNjQyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgT3BlblR5cGUgdmFsaWRhdGlvbiBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNCwgMjAwNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oCmluZGV4IDQ2Mjc4NmYuLmQ0ZWIxNjkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cGZyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSW50ZXJuYWwgUEZSIHNlcnZpY2UgZnVuY3Rpb25zIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMsIDIwMDYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaAppbmRleCBhNzZiNGZlLi5hODlmNzllIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBvc3RubS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBQb3N0U2NyaXB0IG5hbWUgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLCAyMDA3LCAyMDA5LCAyMDEyIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cHJvcC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cHJvcC5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHJvcC5oCmluZGV4IDIyZGEwYmIuLmM5ZjA3Y2UgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcHJvcGVydHkgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oCmluZGV4IDAzMDk0OGUuLjY2ZGE2ZTEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIFBvc3RTY3JpcHQgY2hhcm1hcCBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMsIDIwMDYsIDIwMDksIDIwMTIgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaAppbmRleCA0YmZiNTA2Li43NTJhMjY2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzaW5mby5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBQb3N0U2NyaXB0IGluZm8gc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLCAyMDA0LCAyMDA5LCAyMDExLCAyMDEyIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oCmluZGV4IGQzODM1YWEuLjI1MmFlMWMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3ZzZm50LmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgU0ZOVCB0YWJsZSBsb2FkaW5nIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMywgMjAwNCwgMjAwOSwgMjAxMiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Y21hcC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Y21hcC5oCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Y21hcC5oCmluZGV4IDQzNzBmNGMuLmNkOTViOWEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmgKQEAgLTQsMTAgKzQsOCBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBUcnVlVHlwZS9zZm50IGNtYXAgZXh0cmEgaW5mb3JtYXRpb24gc2VydmljZS4gICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBNYXNhdGFrZSBZQU1BVE8sIFJlZGhhdCBLLksuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNTAsMTEgKzQ4LDEyIEBACiAgIC8qICAgICAgYHR0bmFtZWlkLmgnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgZm9ybWF0IDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIGNtYXAgZm9ybWF0LiAgT3BlblR5cGUgMS41IGRlZmluZXMgdGhlIGZvcm1hdHMgMCAoYnl0ZSAgICAgICAqLworICAvKiAgICAgIFRoZSBjbWFwIGZvcm1hdC4gIE9wZW5UeXBlIDEuNiBkZWZpbmVzIHRoZSBmb3JtYXRzIDAgKGJ5dGUgICAgICAgKi8KICAgLyogICAgICBlbmNvZGluZyB0YWJsZSksIDJ+KGhpZ2gtYnl0ZSBtYXBwaW5nIHRocm91Z2ggdGFibGUpLCA0fihzZWdtZW50ICovCiAgIC8qICAgICAgbWFwcGluZyB0byBkZWx0YSB2YWx1ZXMpLCA2fih0cmltbWVkIHRhYmxlIG1hcHBpbmcpLCA4fihtaXhlZCAgICAqLwogICAvKiAgICAgIDE2LWJpdCBhbmQgMzItYml0IGNvdmVyYWdlKSwgMTB+KHRyaW1tZWQgYXJyYXkpLCAxMn4oc2VnbWVudGVkICAgKi8KLSAgLyogICAgICBjb3ZlcmFnZSksIGFuZCAxNCAoVW5pY29kZSBWYXJpYXRpb24gU2VxdWVuY2VzKS4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgY292ZXJhZ2UpLCAxM34obGFzdCByZXNvcnQgZm9udCksIGFuZCAxNCAoVW5pY29kZSBWYXJpYXRpb24gICAgICAqLworICAvKiAgICAgIFNlcXVlbmNlcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9DTWFwSW5mb18KICAgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmgKaW5kZXggNThlMDJhNi4uMjcyZWU4YyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIFRydWVUeXBlIGVuZ2luZSBxdWVyeSBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGdseWYuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGdseWYuaApzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGdseWYuaAppbmRleCAzNjllYjg0Li5mNWNiNzZhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Z2x5Zi5oCkBAIC00LDcgKzQsOCBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBUcnVlVHlwZSBnbHlwaCBzZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LCAyMDA5LCAyMDEyIGJ5IERhdmlkIFR1cm5lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCiAvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdndpbmZudC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdndpbmZudC5oCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Z3aW5mbnQuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdndpbmZudC5oCmluZGV4IDU3Zjc3NjUuLjAwMzY5MjkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2VydmljZXMvc3Z3aW5mbnQuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2d2luZm50LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIFdpbmRvd3MgRk5UL0ZPTlQgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2ZudC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmgKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9zZm50LmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oCmluZGV4IGQ1NThlODYuLjMwZjUzYmYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvc2ZudC5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgYHNmbnQnIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDYsIDIwMDksIDIwMTItMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC00NCw3ICs0NCw5IEBACiAgIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgZmFjZV9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIFRydWVUeXBlIGZvbnQsIGlmIHdlIGFyZSBvcGVuaW5nIGEgICovCi0gIC8qICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24sIGluIGJpdHMgMC0xNS4gIFRoZSBudW1iZXJlZCBpbnN0YW5jZSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBpbmRleH4rfjEgb2YgYSBHWCAoc3ViKWZvbnQsIGlmIGFwcGxpY2FibGUsIGluIGJpdHMgICovCisgIC8qICAgICAgICAgICAgICAgICAgMTYtMzAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgbnVtX3BhcmFtcyA6OiBUaGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtODcsNyArODksOSBAQAogICAvKiAgICBmYWNlICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGZhY2VfaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSBUcnVlVHlwZSBmb250LCBpZiB3ZSBhcmUgb3BlbmluZyBhICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLCBpbiBiaXRzIDAtMTUuICBUaGUgbnVtYmVyZWQgaW5zdGFuY2UgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgaW5kZXh+K34xIG9mIGEgR1ggKHN1Yilmb250LCBpZiBhcHBsaWNhYmxlLCBpbiBiaXRzICAqLworICAvKiAgICAgICAgICAgICAgICAgIDE2LTMwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIG51bV9wYXJhbXMgOjogVGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQyNyw2ICs0MzEsMzMgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVFRfR2V0X05hbWVfRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJvbSB0aGUgYG5hbWUnIHRhYmxlLCByZXR1cm4gYSBnaXZlbiBFTkdMSVNIIG5hbWUgcmVjb3JkIGluICAgICAgICovCisgIC8qICAgIEFTQ0lJLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbmFtZWlkICAgOjogVGhlIG5hbWUgaWQgb2YgdGhlIG5hbWUgcmVjb3JkIHRvIHJldHVybi4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbmFtZSAgICAgOjogVGhlIGFkZHJlc3Mgb2YgYW4gYWxsb2NhdGVkIHN0cmluZyBwb2ludGVyLiAgTlVMTCBpZiAgICovCisgIC8qICAgICAgICAgICAgICAgIG5vIG5hbWUgaXMgcHJlc2VudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKlRUX0dldF9OYW1lX0Z1bmMpKCBUVF9GYWNlICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgIG5hbWVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyaW5nKiogIG5hbWUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC01NTYsNiArNTg3LDggQEAKIAogICAgIFRUX0dldF9NZXRyaWNzX0Z1bmMgICAgICAgICAgZ2V0X21ldHJpY3M7CiAKKyAgICBUVF9HZXRfTmFtZV9GdW5jICAgICAgICAgICAgIGdldF9uYW1lOworCiAgIH0gU0ZOVF9JbnRlcmZhY2U7CiAKIApAQCAtNTk0LDcgKzYyNyw4IEBACiAgICAgICAgICAgZnJlZV9lYmxjXywgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBzZXRfc2JpdF9zdHJpa2VfLCAgICAgICAgICAgICAgXAogICAgICAgICAgIGxvYWRfc3RyaWtlX21ldHJpY3NfLCAgICAgICAgICBcCi0gICAgICAgICAgZ2V0X21ldHJpY3NfICkgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBnZXRfbWV0cmljc18sICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9uYW1lXyApICAgICAgICAgICAgICAgICAgICBcCiAgIHN0YXRpYyBjb25zdCBTRk5UX0ludGVyZmFjZSAgY2xhc3NfID0gIFwKICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGdvdG9fdGFibGVfLCAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC02MjYsNiArNjYwLDcgQEAKICAgICBzZXRfc2JpdF9zdHJpa2VfLCAgICAgICAgICAgICAgICAgICAgXAogICAgIGxvYWRfc3RyaWtlX21ldHJpY3NfLCAgICAgICAgICAgICAgICBcCiAgICAgZ2V0X21ldHJpY3NfLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfbmFtZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9OwogCiAjZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwpAQCAtNjYzLDcgKzY5OCw4IEBACiAgICAgICAgICAgZnJlZV9lYmxjXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBzZXRfc2JpdF9zdHJpa2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIGxvYWRfc3RyaWtlX21ldHJpY3NfLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZ2V0X21ldHJpY3NfICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBnZXRfbWV0cmljc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9uYW1lXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgIGxpYnJhcnksICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNGTlRfSW50ZXJmYWNlKiAgY2xhenogKSAgICBcCkBAIC02OTksNiArNzM1LDcgQEAKICAgICBjbGF6ei0+c2V0X3NiaXRfc3RyaWtlICAgICA9IHNldF9zYml0X3N0cmlrZV87ICAgICAgXAogICAgIGNsYXp6LT5sb2FkX3N0cmlrZV9tZXRyaWNzID0gbG9hZF9zdHJpa2VfbWV0cmljc187ICBcCiAgICAgY2xhenotPmdldF9tZXRyaWNzICAgICAgICAgPSBnZXRfbWV0cmljc187ICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2V0X25hbWUgICAgICAgICAgICA9IGdldF9uYW1lXzsgICAgICAgICAgICAgXAogICB9CiAKICNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC90MXR5cGVzLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3QxdHlwZXMuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmgKaW5kZXggZTIwMjM3Yy4uMDI5YWNjNCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC90MXR5cGVzLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBCYXNpYyBUeXBlMS9UeXBlMiB0eXBlIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24gICAgICAqLwogLyogICAgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwNCwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEwNiwxMiArMTA2LDEyIEBACiAKICAgICBGVF9JbnQgICAgICAgICAgIG51bV9zdWJyczsKICAgICBGVF9CeXRlKiogICAgICAgIHN1YnJzOwotICAgIEZUX1B0ckRpc3QqICAgICAgc3VicnNfbGVuOworICAgIEZUX1VJbnQqICAgICAgICAgc3VicnNfbGVuOwogCiAgICAgRlRfSW50ICAgICAgICAgICBudW1fZ2x5cGhzOwogICAgIEZUX1N0cmluZyoqICAgICAgZ2x5cGhfbmFtZXM7ICAgICAgIC8qIGFycmF5IG9mIGdseXBoIG5hbWVzICAgICAgICovCiAgICAgRlRfQnl0ZSoqICAgICAgICBjaGFyc3RyaW5nczsgICAgICAgLyogYXJyYXkgb2YgZ2x5cGggY2hhcnN0cmluZ3MgKi8KLSAgICBGVF9QdHJEaXN0KiAgICAgIGNoYXJzdHJpbmdzX2xlbjsKKyAgICBGVF9VSW50KiAgICAgICAgIGNoYXJzdHJpbmdzX2xlbjsKIAogICAgIEZUX0J5dGUgICAgICAgICAgcGFpbnRfdHlwZTsKICAgICBGVF9CeXRlICAgICAgICAgIGZvbnRfdHlwZTsKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiAgIHR5cGVkZWYgc3RydWN0ICBDSURfU3VicnNSZWNfCiAgIHsKLSAgICBGVF9VSW50ICAgIG51bV9zdWJyczsKKyAgICBGVF9JbnQgICAgIG51bV9zdWJyczsKICAgICBGVF9CeXRlKiogIGNvZGU7CiAKICAgfSBDSURfU3VicnNSZWMsICpDSURfU3VicnM7CkBAIC0xNTcsMTAgKzE1NywxMCBAQAogCiAgIHR5cGVkZWYgc3RydWN0ICBBRk1fS2VyblBhaXJSZWNfCiAgIHsKLSAgICBGVF9JbnQgIGluZGV4MTsKLSAgICBGVF9JbnQgIGluZGV4MjsKLSAgICBGVF9JbnQgIHg7Ci0gICAgRlRfSW50ICB5OworICAgIEZUX1VJbnQgIGluZGV4MTsKKyAgICBGVF9VSW50ICBpbmRleDI7CisgICAgRlRfSW50ICAgeDsKKyAgICBGVF9JbnQgICB5OwogCiAgIH0gQUZNX0tlcm5QYWlyUmVjLCAqQUZNX0tlcm5QYWlyOwogCkBAIC0xNzEsOSArMTcxLDkgQEAKICAgICBGVF9GaXhlZCAgICAgICBBc2NlbmRlcjsKICAgICBGVF9GaXhlZCAgICAgICBEZXNjZW5kZXI7CiAgICAgQUZNX1RyYWNrS2VybiAgVHJhY2tLZXJuczsgICAvKiBmcmVlIGlmIG5vbi1OVUxMICovCi0gICAgRlRfSW50ICAgICAgICAgTnVtVHJhY2tLZXJuOworICAgIEZUX1VJbnQgICAgICAgIE51bVRyYWNrS2VybjsKICAgICBBRk1fS2VyblBhaXIgICBLZXJuUGFpcnM7ICAgIC8qIGZyZWUgaWYgbm9uLU5VTEwgKi8KLSAgICBGVF9JbnQgICAgICAgICBOdW1LZXJuUGFpcjsKKyAgICBGVF9VSW50ICAgICAgICBOdW1LZXJuUGFpcjsKIAogICB9IEFGTV9Gb250SW5mb1JlYywgKkFGTV9Gb250SW5mbzsKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC90dHR5cGVzLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ludGVybmFsL3R0dHlwZXMuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmgKaW5kZXggYWQzMDJiOC4uMTUwN2E3YyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC90dHR5cGVzLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBCYXNpYyBTRk5UL1RydWVUeXBlIHR5cGUgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbiAgICAqLwogLyogICAgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMiwgMjAwNC0yMDA4LCAyMDEyLTIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTYxNCw4ICs2MTQsNyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgaW4gdXNlIGJ5IG90aGVyIHBsYXRmb3JtcyAoZS5nLiBOZXd0b24pLiAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgIEZvciBkZXRhaWxzLCBwbGVhc2Ugc2VlICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vZm9udHMuYXBwbGUuY29tLyAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUUmVmTWFuL1JNMDYvQ2hhcDZibG9jLmh0bWwgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDYvQ2hhcDZibG9jLmh0bWwgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgaG9yaSAgICAgICAgICAgICA6OiBUaGUgbGluZSBtZXRyaWNzIGZvciBob3Jpem9udGFsIGxheW91dHMuICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTYzNSw4ICs2MzQsNyBAQAogICAvKiAgIGZsYWdzICAgICAgICAgICAgOjogSXMgdGhpcyBhIHZlcnRpY2FsIG9yIGhvcml6b250YWwgc3RyaWtlPyAgRm9yICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMsIHBsZWFzZSBzZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vZm9udHMuYXBwbGUuY29tLyAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUUmVmTWFuL1JNMDYvQ2hhcDZibG9jLmh0bWwgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDYvQ2hhcDZibG9jLmh0bWwgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9TQml0X1N0cmlrZVJlY18KICAgewpAQCAtMTExMyw3ICsxMTExLDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBhbHNvIGNvbnRhaW5zIHRoZSBhc3NvY2lhdGVkICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsIG1ldHJpY3MgdGFibGUgKGB2bXR4JyksIGlmIGZvdW5kLiAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRBTlQ6IFRoZSBjb250ZW50cyBvZiB0aGlzIGZpZWxkIGlzICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIGlmIHRoZSBgdmVydGljYWxJbmZvJyBmaWVsZCBpcyAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCBpZiB0aGUgYHZlcnRpY2FsX2luZm8nIGZpZWxkIGlzICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIG51bV9uYW1lcyAgICAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgbmFtZSByZWNvcmRzIHdpdGhpbiB0aGlzICAgICAqLwpAQCAtMTQ0MCw3ICsxNDM4LDcgQEAKICAgewogICAgIEZUX01lbW9yeSAgIG1lbW9yeTsKICAgICBGVF9VU2hvcnQgICBtYXhfcG9pbnRzOwotICAgIEZUX1VTaG9ydCAgIG1heF9jb250b3VyczsKKyAgICBGVF9TaG9ydCAgICBtYXhfY29udG91cnM7CiAgICAgRlRfVVNob3J0ICAgbl9wb2ludHM7ICAgIC8qIG51bWJlciBvZiBwb2ludHMgaW4gem9uZSAgICAqLwogICAgIEZUX1Nob3J0ICAgIG5fY29udG91cnM7ICAvKiBudW1iZXIgb2YgY29udG91cnMgICAgICAgICAgKi8KIApAQCAtMTQ1OSwxMSArMTQ1NywyMyBAQAogICAvKiBoYW5kbGUgdG8gZXhlY3V0aW9uIGNvbnRleHQgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgVFRfRXhlY0NvbnRleHRSZWNfKiAgVFRfRXhlY0NvbnRleHQ7CiAKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGhhbmRsZSB0byBhIFRydWVUeXBlIHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IFRUX1NpemVSZWNfKiAgVFRfU2l6ZTsKKworCiAgIC8qIGdseXBoIGxvYWRlciBzdHJ1Y3R1cmUgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIFRUX0xvYWRlclJlY18KICAgewotICAgIEZUX0ZhY2UgICAgICAgICAgZmFjZTsKLSAgICBGVF9TaXplICAgICAgICAgIHNpemU7CisgICAgVFRfRmFjZSAgICAgICAgICBmYWNlOworICAgIFRUX1NpemUgICAgICAgICAgc2l6ZTsKICAgICBGVF9HbHlwaFNsb3QgICAgIGdseXBoOwogICAgIEZUX0dseXBoTG9hZGVyICAgZ2xvYWRlcjsKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS90MXRhYmxlcy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvdDF0YWJsZXMuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oCmluZGV4IDYxYWVmZGQuLmE2ZWE0MTUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvdDF0YWJsZXMuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL3QxdGFibGVzLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBCYXNpYyBUeXBlIDEvVHlwZSAyIHRhYmxlcyBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uICAqLwogLyogICAgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwNCwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMSwgMjAxNCBieSAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTQ5Miw4ICs0OTIsOSBAQAogICAgKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgogICAgKgogICAgKiBAbm90ZToKLSAgICogICAgVGhlIHN0cmluZyBwb2ludGVycyB3aXRoaW4gdGhlIGZvbnQgaW5mbyBzdHJ1Y3R1cmUgYXJlIG93bmVkIGJ5Ci0gICAqICAgIHRoZSBmYWNlIGFuZCBkb24ndCBuZWVkIHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCisgICAqICAgIFN0cmluZyBwb2ludGVycyB3aXRoaW4gdGhlIEBQU19Gb250SW5mb1JlYyBzdHJ1Y3R1cmUgYXJlIG93bmVkIGJ5CisgICAqICAgIHRoZSBmYWNlIGFuZCBkb24ndCBuZWVkIHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICBNaXNzaW5nIGVudHJpZXMKKyAgICogICAgaW4gdGhlIGZvbnQncyBGb250SW5mbyBkaWN0aW9uYXJ5IGFyZSByZXByZXNlbnRlZCBieSBOVUxMIHBvaW50ZXJzLgogICAgKgogICAgKiAgICBJZiB0aGUgZm9udCdzIGZvcm1hdCBpcyBub3QgUG9zdFNjcmlwdC1iYXNlZCwgdGhpcyBmdW5jdGlvbiB3aWxsCiAgICAqICAgIHJldHVybiB0aGUgYEZUX0Vycl9JbnZhbGlkX0FyZ3VtZW50JyBlcnJvciBjb2RlLgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS90dG5hbWVpZC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oCnNpbWlsYXJpdHkgaW5kZXggODglCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvdHRuYW1laWQuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oCmluZGV4IDk3MTFkMWQuLmM5NTg1ZjIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvdHRuYW1laWQuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgbmFtZSBJRCBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwNCwgMjAwNi0yMDA4LCAyMDEyLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTMyMSw3ICszMjEsNyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogVGhlIGNhbm9uaWNhbCBzb3VyY2UgZm9yIHRoZSBBcHBsZSBhc3NpZ25lZCBMYW5ndWFnZSBJRCdzIGlzIGF0ICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UVFJlZk1hbi9STTA2L0NoYXA2bmFtZS5odG1sICAgICAgKi8KKyAgLyogICBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZm9udHMvVHJ1ZVR5cGUtUmVmZXJlbmNlLU1hbnVhbC9STTA2L0NoYXA2bmFtZS5odG1sICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUVF9NQUNfTEFOR0lEX0VOR0xJU0ggICAgICAgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgVFRfTUFDX0xBTkdJRF9GUkVOQ0ggICAgICAgICAgICAgICAgICAgICAgICAxCkBAIC00NzAsMjYgKzQ3MCwyNiBAQAogI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX0dFTkVSQUwgICAgICAgICAgICAgICAgICAgIDB4MDAwMQogI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX1NBVURJX0FSQUJJQSAgICAgICAgICAgICAgIDB4MDQwMQogI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX0lSQVEgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMQotI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX0VHWVBUICAgICAgICAgICAgICAgICAgICAgIDB4MGMwMQorI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX0VHWVBUICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMQogI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX0xJQllBICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMQogI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX0FMR0VSSUEgICAgICAgICAgICAgICAgICAgIDB4MTQwMQogI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX01PUk9DQ08gICAgICAgICAgICAgICAgICAgIDB4MTgwMQotI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX1RVTklTSUEgICAgICAgICAgICAgICAgICAgIDB4MWMwMQorI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX1RVTklTSUEgICAgICAgICAgICAgICAgICAgIDB4MUMwMQogI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX09NQU4gICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMQogI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX1lFTUVOICAgICAgICAgICAgICAgICAgICAgIDB4MjQwMQogI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX1NZUklBICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMQotI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX0pPUkRBTiAgICAgICAgICAgICAgICAgICAgIDB4MmMwMQorI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX0pPUkRBTiAgICAgICAgICAgICAgICAgICAgIDB4MkMwMQogI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX0xFQkFOT04gICAgICAgICAgICAgICAgICAgIDB4MzAwMQogI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX0tVV0FJVCAgICAgICAgICAgICAgICAgICAgIDB4MzQwMQogI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX1VBRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MzgwMQotI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX0JBSFJBSU4gICAgICAgICAgICAgICAgICAgIDB4M2MwMQorI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX0JBSFJBSU4gICAgICAgICAgICAgICAgICAgIDB4M0MwMQogI2RlZmluZSBUVF9NU19MQU5HSURfQVJBQklDX1FBVEFSICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMQogI2RlZmluZSBUVF9NU19MQU5HSURfQlVMR0FSSUFOX0JVTEdBUklBICAgICAgICAgICAgICAgIDB4MDQwMgogI2RlZmluZSBUVF9NU19MQU5HSURfQ0FUQUxBTl9TUEFJTiAgICAgICAgICAgICAgICAgICAgIDB4MDQwMwogI2RlZmluZSBUVF9NU19MQU5HSURfQ0hJTkVTRV9HRU5FUkFMICAgICAgICAgICAgICAgICAgIDB4MDAwNAogI2RlZmluZSBUVF9NU19MQU5HSURfQ0hJTkVTRV9UQUlXQU4gICAgICAgICAgICAgICAgICAgIDB4MDQwNAogI2RlZmluZSBUVF9NU19MQU5HSURfQ0hJTkVTRV9QUkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwNAotI2RlZmluZSBUVF9NU19MQU5HSURfQ0hJTkVTRV9IT05HX0tPTkcgICAgICAgICAgICAgICAgIDB4MGMwNAorI2RlZmluZSBUVF9NU19MQU5HSURfQ0hJTkVTRV9IT05HX0tPTkcgICAgICAgICAgICAgICAgIDB4MEMwNAogI2RlZmluZSBUVF9NU19MQU5HSURfQ0hJTkVTRV9TSU5HQVBPUkUgICAgICAgICAgICAgICAgIDB4MTAwNAogCiAjaWYgMSAgLyogdGhpcyBsb29rcyBsaWtlIHRoZSBjb3JyZWN0IHZhbHVlICovCkBAIC01MDcsNyArNTA3LDcgQEAKICNkZWZpbmUgVFRfTVNfTEFOR0lEX0RBTklTSF9ERU5NQVJLICAgICAgICAgICAgICAgICAgICAweDA0MDYKICNkZWZpbmUgVFRfTVNfTEFOR0lEX0dFUk1BTl9HRVJNQU5ZICAgICAgICAgICAgICAgICAgICAweDA0MDcKICNkZWZpbmUgVFRfTVNfTEFOR0lEX0dFUk1BTl9TV0lUWkVSTEFORCAgICAgICAgICAgICAgICAweDA4MDcKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0dFUk1BTl9BVVNUUklBICAgICAgICAgICAgICAgICAgICAweDBjMDcKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0dFUk1BTl9BVVNUUklBICAgICAgICAgICAgICAgICAgICAweDBDMDcKICNkZWZpbmUgVFRfTVNfTEFOR0lEX0dFUk1BTl9MVVhFTUJPVVJHICAgICAgICAgICAgICAgICAweDEwMDcKICNkZWZpbmUgVFRfTVNfTEFOR0lEX0dFUk1BTl9MSUVDSFRFTlNURUkgICAgICAgICAgICAgICAweDE0MDcKICNkZWZpbmUgVFRfTVNfTEFOR0lEX0dSRUVLX0dSRUVDRSAgICAgICAgICAgICAgICAgICAgICAweDA0MDgKQEAgLTUyMCw2OSArNTIwLDY5IEBACiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX0dFTkVSQUwgICAgICAgICAgICAgICAgICAgMHgwMDA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX1VOSVRFRF9TVEFURVMgICAgICAgICAgICAgMHgwNDA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX1VOSVRFRF9LSU5HRE9NICAgICAgICAgICAgMHgwODA5Ci0jZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX0FVU1RSQUxJQSAgICAgICAgICAgICAgICAgMHgwYzA5CisjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX0FVU1RSQUxJQSAgICAgICAgICAgICAgICAgMHgwQzA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX0NBTkFEQSAgICAgICAgICAgICAgICAgICAgMHgxMDA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX05FV19aRUFMQU5EICAgICAgICAgICAgICAgMHgxNDA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX0lSRUxBTkQgICAgICAgICAgICAgICAgICAgMHgxODA5Ci0jZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX1NPVVRIX0FGUklDQSAgICAgICAgICAgICAgMHgxYzA5CisjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX1NPVVRIX0FGUklDQSAgICAgICAgICAgICAgMHgxQzA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX0pBTUFJQ0EgICAgICAgICAgICAgICAgICAgMHgyMDA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX0NBUklCQkVBTiAgICAgICAgICAgICAgICAgMHgyNDA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX0JFTElaRSAgICAgICAgICAgICAgICAgICAgMHgyODA5Ci0jZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX1RSSU5JREFEICAgICAgICAgICAgICAgICAgMHgyYzA5CisjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX1RSSU5JREFEICAgICAgICAgICAgICAgICAgMHgyQzA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX1pJTUJBQldFICAgICAgICAgICAgICAgICAgMHgzMDA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX1BISUxJUFBJTkVTICAgICAgICAgICAgICAgMHgzNDA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX0lORE9ORVNJQSAgICAgICAgICAgICAgICAgMHgzODA5Ci0jZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX0hPTkdfS09ORyAgICAgICAgICAgICAgICAgMHgzYzA5CisjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX0hPTkdfS09ORyAgICAgICAgICAgICAgICAgMHgzQzA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX0lORElBICAgICAgICAgICAgICAgICAgICAgMHg0MDA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX01BTEFZU0lBICAgICAgICAgICAgICAgICAgMHg0NDA5CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9FTkdMSVNIX1NJTkdBUE9SRSAgICAgICAgICAgICAgICAgMHg0ODA5Ci0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1NQQUlOX1RSQURJVElPTkFMX1NPUlQgICAgMHgwNDBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX01FWElDTyAgICAgICAgICAgICAgICAgICAgMHgwODBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1NQQUlOX0lOVEVSTkFUSU9OQUxfU09SVCAgMHgwYzBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0dVQVRFTUFMQSAgICAgICAgICAgICAgICAgMHgxMDBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0NPU1RBX1JJQ0EgICAgICAgICAgICAgICAgMHgxNDBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1BBTkFNQSAgICAgICAgICAgICAgICAgICAgMHgxODBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0RPTUlOSUNBTl9SRVBVQkxJQyAgICAgICAgMHgxYzBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1ZFTkVaVUVMQSAgICAgICAgICAgICAgICAgMHgyMDBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0NPTE9NQklBICAgICAgICAgICAgICAgICAgMHgyNDBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1BFUlUgICAgICAgICAgICAgICAgICAgICAgMHgyODBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0FSR0VOVElOQSAgICAgICAgICAgICAgICAgMHgyYzBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0VDVUFET1IgICAgICAgICAgICAgICAgICAgMHgzMDBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0NISUxFICAgICAgICAgICAgICAgICAgICAgMHgzNDBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1VSVUdVQVkgICAgICAgICAgICAgICAgICAgMHgzODBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1BBUkFHVUFZICAgICAgICAgICAgICAgICAgMHgzYzBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0JPTElWSUEgICAgICAgICAgICAgICAgICAgMHg0MDBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0VMX1NBTFZBRE9SICAgICAgICAgICAgICAgMHg0NDBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0hPTkRVUkFTICAgICAgICAgICAgICAgICAgMHg0ODBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX05JQ0FSQUdVQSAgICAgICAgICAgICAgICAgMHg0YzBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1BVRVJUT19SSUNPICAgICAgICAgICAgICAgMHg1MDBhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1VOSVRFRF9TVEFURVMgICAgICAgICAgICAgMHg1NDBhCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1NQQUlOX1RSQURJVElPTkFMX1NPUlQgICAgMHgwNDBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX01FWElDTyAgICAgICAgICAgICAgICAgICAgMHgwODBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1NQQUlOX0lOVEVSTkFUSU9OQUxfU09SVCAgMHgwQzBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0dVQVRFTUFMQSAgICAgICAgICAgICAgICAgMHgxMDBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0NPU1RBX1JJQ0EgICAgICAgICAgICAgICAgMHgxNDBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1BBTkFNQSAgICAgICAgICAgICAgICAgICAgMHgxODBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0RPTUlOSUNBTl9SRVBVQkxJQyAgICAgICAgMHgxQzBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1ZFTkVaVUVMQSAgICAgICAgICAgICAgICAgMHgyMDBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0NPTE9NQklBICAgICAgICAgICAgICAgICAgMHgyNDBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1BFUlUgICAgICAgICAgICAgICAgICAgICAgMHgyODBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0FSR0VOVElOQSAgICAgICAgICAgICAgICAgMHgyQzBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0VDVUFET1IgICAgICAgICAgICAgICAgICAgMHgzMDBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0NISUxFICAgICAgICAgICAgICAgICAgICAgMHgzNDBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1VSVUdVQVkgICAgICAgICAgICAgICAgICAgMHgzODBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1BBUkFHVUFZICAgICAgICAgICAgICAgICAgMHgzQzBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0JPTElWSUEgICAgICAgICAgICAgICAgICAgMHg0MDBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0VMX1NBTFZBRE9SICAgICAgICAgICAgICAgMHg0NDBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0hPTkRVUkFTICAgICAgICAgICAgICAgICAgMHg0ODBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX05JQ0FSQUdVQSAgICAgICAgICAgICAgICAgMHg0QzBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1BVRVJUT19SSUNPICAgICAgICAgICAgICAgMHg1MDBBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX1VOSVRFRF9TVEFURVMgICAgICAgICAgICAgMHg1NDBBCiAgIC8qIFRoZSBmb2xsb3dpbmcgSUQgYmxhdGFudGx5IHZpb2xhdGUgTVMgc3BlY3MgYnkgdXNpbmcgYSAqLwogICAvKiBzdWJsYW5ndWFnZSA+IDB4MUYuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NQQU5JU0hfTEFUSU5fQU1FUklDQSAgICAgICAgICAgICAweEU0MGFVCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9GSU5OSVNIX0ZJTkxBTkQgICAgICAgICAgICAgICAgICAgMHgwNDBiCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfRlJBTkNFICAgICAgICAgICAgICAgICAgICAgMHgwNDBjCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfQkVMR0lVTSAgICAgICAgICAgICAgICAgICAgMHgwODBjCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfQ0FOQURBICAgICAgICAgICAgICAgICAgICAgMHgwYzBjCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfU1dJVFpFUkxBTkQgICAgICAgICAgICAgICAgMHgxMDBjCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfTFVYRU1CT1VSRyAgICAgICAgICAgICAgICAgMHgxNDBjCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfTU9OQUNPICAgICAgICAgICAgICAgICAgICAgMHgxODBjCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfV0VTVF9JTkRJRVMgICAgICAgICAgICAgICAgMHgxYzBjCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfUkVVTklPTiAgICAgICAgICAgICAgICAgICAgMHgyMDBjCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfQ09OR08gICAgICAgICAgICAgICAgICAgICAgMHgyNDBjCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TUEFOSVNIX0xBVElOX0FNRVJJQ0EgICAgICAgICAgICAgMHhFNDBBVQorI2RlZmluZSBUVF9NU19MQU5HSURfRklOTklTSF9GSU5MQU5EICAgICAgICAgICAgICAgICAgIDB4MDQwQgorI2RlZmluZSBUVF9NU19MQU5HSURfRlJFTkNIX0ZSQU5DRSAgICAgICAgICAgICAgICAgICAgIDB4MDQwQworI2RlZmluZSBUVF9NU19MQU5HSURfRlJFTkNIX0JFTEdJVU0gICAgICAgICAgICAgICAgICAgIDB4MDgwQworI2RlZmluZSBUVF9NU19MQU5HSURfRlJFTkNIX0NBTkFEQSAgICAgICAgICAgICAgICAgICAgIDB4MEMwQworI2RlZmluZSBUVF9NU19MQU5HSURfRlJFTkNIX1NXSVRaRVJMQU5EICAgICAgICAgICAgICAgIDB4MTAwQworI2RlZmluZSBUVF9NU19MQU5HSURfRlJFTkNIX0xVWEVNQk9VUkcgICAgICAgICAgICAgICAgIDB4MTQwQworI2RlZmluZSBUVF9NU19MQU5HSURfRlJFTkNIX01PTkFDTyAgICAgICAgICAgICAgICAgICAgIDB4MTgwQworI2RlZmluZSBUVF9NU19MQU5HSURfRlJFTkNIX1dFU1RfSU5ESUVTICAgICAgICAgICAgICAgIDB4MUMwQworI2RlZmluZSBUVF9NU19MQU5HSURfRlJFTkNIX1JFVU5JT04gICAgICAgICAgICAgICAgICAgIDB4MjAwQworI2RlZmluZSBUVF9NU19MQU5HSURfRlJFTkNIX0NPTkdPICAgICAgICAgICAgICAgICAgICAgIDB4MjQwQwogICAvKiB3aGljaCB3YXMgZm9ybWVybHk6ICovCiAjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfWkFJUkUgIFRUX01TX0xBTkdJRF9GUkVOQ0hfQ09OR08KLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9TRU5FR0FMICAgICAgICAgICAgICAgICAgICAweDI4MGMKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9DQU1FUk9PTiAgICAgICAgICAgICAgICAgICAweDJjMGMKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9DT1RFX0RfSVZPSVJFICAgICAgICAgICAgICAweDMwMGMKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9NQUxJICAgICAgICAgICAgICAgICAgICAgICAweDM0MGMKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9NT1JPQ0NPICAgICAgICAgICAgICAgICAgICAweDM4MGMKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9IQUlUSSAgICAgICAgICAgICAgICAgICAgICAweDNjMGMKLSAgLyogYW5kIGFub3RoZXIgdmlvbGF0aW9uIG9mIHRoZSBzcGVjIChzZWUgMHhFNDBhVSkgKi8KLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZSRU5DSF9OT1JUSF9BRlJJQ0EgICAgICAgICAgICAgICAweEU0MGNVCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9IRUJSRVdfSVNSQUVMICAgICAgICAgICAgICAgICAgICAgMHgwNDBkCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9IVU5HQVJJQU5fSFVOR0FSWSAgICAgICAgICAgICAgICAgMHgwNDBlCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9JQ0VMQU5ESUNfSUNFTEFORCAgICAgICAgICAgICAgICAgMHgwNDBmCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfU0VORUdBTCAgICAgICAgICAgICAgICAgICAgMHgyODBDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfQ0FNRVJPT04gICAgICAgICAgICAgICAgICAgMHgyQzBDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfQ09URV9EX0lWT0lSRSAgICAgICAgICAgICAgMHgzMDBDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfTUFMSSAgICAgICAgICAgICAgICAgICAgICAgMHgzNDBDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfTU9ST0NDTyAgICAgICAgICAgICAgICAgICAgMHgzODBDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfSEFJVEkgICAgICAgICAgICAgICAgICAgICAgMHgzQzBDCisgIC8qIGFuZCBhbm90aGVyIHZpb2xhdGlvbiBvZiB0aGUgc3BlYyAoc2VlIDB4RTQwQVUpICovCisjZGVmaW5lIFRUX01TX0xBTkdJRF9GUkVOQ0hfTk9SVEhfQUZSSUNBICAgICAgICAgICAgICAgMHhFNDBDVQorI2RlZmluZSBUVF9NU19MQU5HSURfSEVCUkVXX0lTUkFFTCAgICAgICAgICAgICAgICAgICAgIDB4MDQwRAorI2RlZmluZSBUVF9NU19MQU5HSURfSFVOR0FSSUFOX0hVTkdBUlkgICAgICAgICAgICAgICAgIDB4MDQwRQorI2RlZmluZSBUVF9NU19MQU5HSURfSUNFTEFORElDX0lDRUxBTkQgICAgICAgICAgICAgICAgIDB4MDQwRgogI2RlZmluZSBUVF9NU19MQU5HSURfSVRBTElBTl9JVEFMWSAgICAgICAgICAgICAgICAgICAgIDB4MDQxMAogI2RlZmluZSBUVF9NU19MQU5HSURfSVRBTElBTl9TV0lUWkVSTEFORCAgICAgICAgICAgICAgIDB4MDgxMAogI2RlZmluZSBUVF9NU19MQU5HSURfSkFQQU5FU0VfSkFQQU4gICAgICAgICAgICAgICAgICAgIDB4MDQxMQpAQCAtNjAwLDI3ICs2MDAsMjcgQEAKICNkZWZpbmUgVFRfTVNfTEFOR0lEX01PTERBVklBTl9NT0xEQVZJQSAgICAgICAgICAgICAgICAweDA4MTgKICNkZWZpbmUgVFRfTVNfTEFOR0lEX1JVU1NJQU5fUlVTU0lBICAgICAgICAgICAgICAgICAgICAweDA0MTkKICNkZWZpbmUgVFRfTVNfTEFOR0lEX1JVU1NJQU5fTU9MREFWSUEgICAgICAgICAgICAgICAgICAweDA4MTkKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0NST0FUSUFOX0NST0FUSUEgICAgICAgICAgICAgICAgICAweDA0MWEKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NFUkJJQU5fU0VSQklBX0xBVElOICAgICAgICAgICAgICAweDA4MWEKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NFUkJJQU5fU0VSQklBX0NZUklMTElDICAgICAgICAgICAweDBjMWEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0NST0FUSUFOX0NST0FUSUEgICAgICAgICAgICAgICAgICAweDA0MUEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NFUkJJQU5fU0VSQklBX0xBVElOICAgICAgICAgICAgICAweDA4MUEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NFUkJJQU5fU0VSQklBX0NZUklMTElDICAgICAgICAgICAweDBDMUEKIAogI2lmIDAgIC8qIHRoaXMgdXNlZCB0byBiZSB0aGlzIHZhbHVlLCBidXQgaXQgbG9va3MgbGlrZSB3ZSB3ZXJlIHdyb25nICovCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9CT1NOSUFOX0JPU05JQV9IRVJaRUdPVklOQSAgICAgICAgMHgxMDFhCisjZGVmaW5lIFRUX01TX0xBTkdJRF9CT1NOSUFOX0JPU05JQV9IRVJaRUdPVklOQSAgICAgICAgMHgxMDFBCiAjZWxzZSAgLyogY3VycmVudCBzb3VyY2VzIHNheSAqLwotI2RlZmluZSBUVF9NU19MQU5HSURfQ1JPQVRJQU5fQk9TTklBX0hFUlpFR09WSU5BICAgICAgIDB4MTAxYQotI2RlZmluZSBUVF9NU19MQU5HSURfQk9TTklBTl9CT1NOSUFfSEVSWkVHT1ZJTkEgICAgICAgIDB4MTQxYQorI2RlZmluZSBUVF9NU19MQU5HSURfQ1JPQVRJQU5fQk9TTklBX0hFUlpFR09WSU5BICAgICAgIDB4MTAxQQorI2RlZmluZSBUVF9NU19MQU5HSURfQk9TTklBTl9CT1NOSUFfSEVSWkVHT1ZJTkEgICAgICAgIDB4MTQxQQogICAgICAgIC8qIGFuZCBYUHNwMiBQbGF0Zm9ybSBTREsgYWRkZWQgKDIwMDQtMDctMjYpICovCiAgICAgICAgLyogTmFtZXMgYXJlIHNob3J0ZW5lZCB0byBiZSBzaWduaWZpY2FudCB3aXRoaW4gNDAgY2hhcnMuICovCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TRVJCSUFOX0JPU05JQV9IRVJaX0xBVElOICAgICAgICAgMHgxODFhCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TRVJCSUFOX0JPU05JQV9IRVJaX0NZUklMTElDICAgICAgMHgxODFhCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TRVJCSUFOX0JPU05JQV9IRVJaX0xBVElOICAgICAgICAgMHgxODFBCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TRVJCSUFOX0JPU05JQV9IRVJaX0NZUklMTElDICAgICAgMHgxODFBCiAjZW5kaWYKIAotI2RlZmluZSBUVF9NU19MQU5HSURfU0xPVkFLX1NMT1ZBS0lBICAgICAgICAgICAgICAgICAgIDB4MDQxYgotI2RlZmluZSBUVF9NU19MQU5HSURfQUxCQU5JQU5fQUxCQU5JQSAgICAgICAgICAgICAgICAgIDB4MDQxYwotI2RlZmluZSBUVF9NU19MQU5HSURfU1dFRElTSF9TV0VERU4gICAgICAgICAgICAgICAgICAgIDB4MDQxZAotI2RlZmluZSBUVF9NU19MQU5HSURfU1dFRElTSF9GSU5MQU5EICAgICAgICAgICAgICAgICAgIDB4MDgxZAotI2RlZmluZSBUVF9NU19MQU5HSURfVEhBSV9USEFJTEFORCAgICAgICAgICAgICAgICAgICAgIDB4MDQxZQotI2RlZmluZSBUVF9NU19MQU5HSURfVFVSS0lTSF9UVVJLRVkgICAgICAgICAgICAgICAgICAgIDB4MDQxZgorI2RlZmluZSBUVF9NU19MQU5HSURfU0xPVkFLX1NMT1ZBS0lBICAgICAgICAgICAgICAgICAgIDB4MDQxQgorI2RlZmluZSBUVF9NU19MQU5HSURfQUxCQU5JQU5fQUxCQU5JQSAgICAgICAgICAgICAgICAgIDB4MDQxQworI2RlZmluZSBUVF9NU19MQU5HSURfU1dFRElTSF9TV0VERU4gICAgICAgICAgICAgICAgICAgIDB4MDQxRAorI2RlZmluZSBUVF9NU19MQU5HSURfU1dFRElTSF9GSU5MQU5EICAgICAgICAgICAgICAgICAgIDB4MDgxRAorI2RlZmluZSBUVF9NU19MQU5HSURfVEhBSV9USEFJTEFORCAgICAgICAgICAgICAgICAgICAgIDB4MDQxRQorI2RlZmluZSBUVF9NU19MQU5HSURfVFVSS0lTSF9UVVJLRVkgICAgICAgICAgICAgICAgICAgIDB4MDQxRgogI2RlZmluZSBUVF9NU19MQU5HSURfVVJEVV9QQUtJU1RBTiAgICAgICAgICAgICAgICAgICAgIDB4MDQyMAogI2RlZmluZSBUVF9NU19MQU5HSURfVVJEVV9JTkRJQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgyMAogI2RlZmluZSBUVF9NU19MQU5HSURfSU5ET05FU0lBTl9JTkRPTkVTSUEgICAgICAgICAgICAgIDB4MDQyMQpAQCAtNjMzLDEzICs2MzMsMTMgQEAKICNkZWZpbmUgVFRfTVNfTEFOR0lEX0NMQVNTSUNfTElUSFVBTklBTl9MSVRIVUFOSUEgICAgICAweDA4MjcKICNkZWZpbmUgVFRfTVNfTEFOR0lEX1RBSklLX1RBSklLSVNUQU4gICAgICAgICAgICAgICAgICAweDA0MjgKICNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZBUlNJX0lSQU4gICAgICAgICAgICAgICAgICAgICAgICAweDA0MjkKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1ZJRVROQU1FU0VfVklFVF9OQU0gICAgICAgICAgICAgICAweDA0MmEKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0FSTUVOSUFOX0FSTUVOSUEgICAgICAgICAgICAgICAgICAweDA0MmIKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0FaRVJJX0FaRVJCQUlKQU5fTEFUSU4gICAgICAgICAgICAweDA0MmMKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0FaRVJJX0FaRVJCQUlKQU5fQ1lSSUxMSUMgICAgICAgICAweDA4MmMKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0JBU1FVRV9TUEFJTiAgICAgICAgICAgICAgICAgICAgICAweDA0MmQKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NPUkJJQU5fR0VSTUFOWSAgICAgICAgICAgICAgICAgICAweDA0MmUKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX01BQ0VET05JQU5fTUFDRURPTklBICAgICAgICAgICAgICAweDA0MmYKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1ZJRVROQU1FU0VfVklFVF9OQU0gICAgICAgICAgICAgICAweDA0MkEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0FSTUVOSUFOX0FSTUVOSUEgICAgICAgICAgICAgICAgICAweDA0MkIKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0FaRVJJX0FaRVJCQUlKQU5fTEFUSU4gICAgICAgICAgICAweDA0MkMKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0FaRVJJX0FaRVJCQUlKQU5fQ1lSSUxMSUMgICAgICAgICAweDA4MkMKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0JBU1FVRV9TUEFJTiAgICAgICAgICAgICAgICAgICAgICAweDA0MkQKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NPUkJJQU5fR0VSTUFOWSAgICAgICAgICAgICAgICAgICAweDA0MkUKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX01BQ0VET05JQU5fTUFDRURPTklBICAgICAgICAgICAgICAweDA0MkYKICNkZWZpbmUgVFRfTVNfTEFOR0lEX1NVVFVfU09VVEhfQUZSSUNBICAgICAgICAgICAgICAgICAweDA0MzAKICNkZWZpbmUgVFRfTVNfTEFOR0lEX1RTT05HQV9TT1VUSF9BRlJJQ0EgICAgICAgICAgICAgICAweDA0MzEKICNkZWZpbmUgVFRfTVNfTEFOR0lEX1RTV0FOQV9TT1VUSF9BRlJJQ0EgICAgICAgICAgICAgICAweDA0MzIKQEAgLTY1MCwzMiArNjUwLDMyIEBACiAjZGVmaW5lIFRUX01TX0xBTkdJRF9HRU9SR0lBTl9HRU9SR0lBICAgICAgICAgICAgICAgICAgMHgwNDM3CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9GQUVST0VTRV9GQUVST0VfSVNMQU5EUyAgICAgICAgICAgMHgwNDM4CiAjZGVmaW5lIFRUX01TX0xBTkdJRF9ISU5ESV9JTkRJQSAgICAgICAgICAgICAgICAgICAgICAgMHgwNDM5Ci0jZGVmaW5lIFRUX01TX0xBTkdJRF9NQUxURVNFX01BTFRBICAgICAgICAgICAgICAgICAgICAgMHgwNDNhCisjZGVmaW5lIFRUX01TX0xBTkdJRF9NQUxURVNFX01BTFRBICAgICAgICAgICAgICAgICAgICAgMHgwNDNBCiAgIC8qIEFkZGVkIGJ5IFhQc3AyIFBsYXRmb3JtIFNESyAoMjAwNC0wNy0yNikgKi8KLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTk9SVEhFUk5fTk9SV0FZICAgICAgICAgICAgICAweDA0M2IKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTk9SVEhFUk5fU1dFREVOICAgICAgICAgICAgICAweDA4M2IKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTk9SVEhFUk5fRklOTEFORCAgICAgICAgICAgICAweDBDM2IKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTFVMRV9OT1JXQVkgICAgICAgICAgICAgICAgICAweDEwM2IKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTFVMRV9TV0VERU4gICAgICAgICAgICAgICAgICAweDE0M2IKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfU09VVEhFUk5fTk9SV0FZICAgICAgICAgICAgICAweDE4M2IKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfU09VVEhFUk5fU1dFREVOICAgICAgICAgICAgICAweDFDM2IKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfU0tPTFRfRklOTEFORCAgICAgICAgICAgICAgICAweDIwM2IKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfSU5BUklfRklOTEFORCAgICAgICAgICAgICAgICAweDI0M2IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTk9SVEhFUk5fTk9SV0FZICAgICAgICAgICAgICAweDA0M0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTk9SVEhFUk5fU1dFREVOICAgICAgICAgICAgICAweDA4M0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTk9SVEhFUk5fRklOTEFORCAgICAgICAgICAgICAweDBDM0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTFVMRV9OT1JXQVkgICAgICAgICAgICAgICAgICAweDEwM0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfTFVMRV9TV0VERU4gICAgICAgICAgICAgICAgICAweDE0M0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfU09VVEhFUk5fTk9SV0FZICAgICAgICAgICAgICAweDE4M0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfU09VVEhFUk5fU1dFREVOICAgICAgICAgICAgICAweDFDM0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfU0tPTFRfRklOTEFORCAgICAgICAgICAgICAgICAweDIwM0IKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NBTUlfSU5BUklfRklOTEFORCAgICAgICAgICAgICAgICAweDI0M0IKICAgLyogLi4uIGFuZCB3ZSBhbHNvIGtlZXAgb3VyIG9sZCBpZGVudGlmaWVyLi4uICovCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TQUFNSV9MQVBPTklBICAgICAgICAgICAgICAgICAgICAgMHgwNDNiCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TQUFNSV9MQVBPTklBICAgICAgICAgICAgICAgICAgICAgMHgwNDNCCiAKICNpZiAwIC8qIHRoaXMgc2VlbXMgdG8gYmUgYSBwcmV2aW91cyBpbnZlcnNpb24gKi8KLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0lSSVNIX0dBRUxJQ19JUkVMQU5EICAgICAgICAgICAgICAweDA0M2MKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NDT1RUSVNIX0dBRUxJQ19VTklURURfS0lOR0RPTSAgICAweDA4M2MKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0lSSVNIX0dBRUxJQ19JUkVMQU5EICAgICAgICAgICAgICAweDA0M0MKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NDT1RUSVNIX0dBRUxJQ19VTklURURfS0lOR0RPTSAgICAweDA4M0MKICNlbHNlCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9TQ09UVElTSF9HQUVMSUNfVU5JVEVEX0tJTkdET00gICAgMHgwODNjCi0jZGVmaW5lIFRUX01TX0xBTkdJRF9JUklTSF9HQUVMSUNfSVJFTEFORCAgICAgICAgICAgICAgMHgwNDNjCisjZGVmaW5lIFRUX01TX0xBTkdJRF9TQ09UVElTSF9HQUVMSUNfVU5JVEVEX0tJTkdET00gICAgMHgwODNDCisjZGVmaW5lIFRUX01TX0xBTkdJRF9JUklTSF9HQUVMSUNfSVJFTEFORCAgICAgICAgICAgICAgMHgwNDNDCiAjZW5kaWYKIAotI2RlZmluZSBUVF9NU19MQU5HSURfWUlERElTSF9HRVJNQU5ZICAgICAgICAgICAgICAgICAgIDB4MDQzZAotI2RlZmluZSBUVF9NU19MQU5HSURfTUFMQVlfTUFMQVlTSUEgICAgICAgICAgICAgICAgICAgIDB4MDQzZQotI2RlZmluZSBUVF9NU19MQU5HSURfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU0gICAgICAgICAgIDB4MDgzZQotI2RlZmluZSBUVF9NU19MQU5HSURfS0FaQUtfS0FaQUtTVEFOICAgICAgICAgICAgICAgICAgIDB4MDQzZgorI2RlZmluZSBUVF9NU19MQU5HSURfWUlERElTSF9HRVJNQU5ZICAgICAgICAgICAgICAgICAgIDB4MDQzRAorI2RlZmluZSBUVF9NU19MQU5HSURfTUFMQVlfTUFMQVlTSUEgICAgICAgICAgICAgICAgICAgIDB4MDQzRQorI2RlZmluZSBUVF9NU19MQU5HSURfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU0gICAgICAgICAgIDB4MDgzRQorI2RlZmluZSBUVF9NU19MQU5HSURfS0FaQUtfS0FaQUtTVEFOICAgICAgICAgICAgICAgICAgIDB4MDQzRgogI2RlZmluZSBUVF9NU19MQU5HSURfS0lSR0hJWl9LSVJHSElaU1RBTiAvKiBDeXJpbGxpYyovIDB4MDQ0MAogICAvKiBhbGlhcyBkZWNsYXJlZCBpbiBXaW5kb3dzIDIwMDAgKi8KICNkZWZpbmUgVFRfTVNfTEFOR0lEX0tJUkdISVpfS0lSR0hJWl9SRVBVQkxJQyBcCkBAIC02OTMsMTIgKzY5MywxMiBAQAogI2RlZmluZSBUVF9NU19MQU5HSURfR1VKQVJBVElfSU5ESUEgICAgICAgICAgICAgICAgICAgIDB4MDQ0NwogI2RlZmluZSBUVF9NU19MQU5HSURfT1JJWUFfSU5ESUEgICAgICAgICAgICAgICAgICAgICAgIDB4MDQ0OAogI2RlZmluZSBUVF9NU19MQU5HSURfVEFNSUxfSU5ESUEgICAgICAgICAgICAgICAgICAgICAgIDB4MDQ0OQotI2RlZmluZSBUVF9NU19MQU5HSURfVEVMVUdVX0lORElBICAgICAgICAgICAgICAgICAgICAgIDB4MDQ0YQotI2RlZmluZSBUVF9NU19MQU5HSURfS0FOTkFEQV9JTkRJQSAgICAgICAgICAgICAgICAgICAgIDB4MDQ0YgotI2RlZmluZSBUVF9NU19MQU5HSURfTUFMQVlBTEFNX0lORElBICAgICAgICAgICAgICAgICAgIDB4MDQ0YwotI2RlZmluZSBUVF9NU19MQU5HSURfQVNTQU1FU0VfSU5ESUEgICAgICAgICAgICAgICAgICAgIDB4MDQ0ZAotI2RlZmluZSBUVF9NU19MQU5HSURfTUFSQVRISV9JTkRJQSAgICAgICAgICAgICAgICAgICAgIDB4MDQ0ZQotI2RlZmluZSBUVF9NU19MQU5HSURfU0FOU0tSSVRfSU5ESUEgICAgICAgICAgICAgICAgICAgIDB4MDQ0ZgorI2RlZmluZSBUVF9NU19MQU5HSURfVEVMVUdVX0lORElBICAgICAgICAgICAgICAgICAgICAgIDB4MDQ0QQorI2RlZmluZSBUVF9NU19MQU5HSURfS0FOTkFEQV9JTkRJQSAgICAgICAgICAgICAgICAgICAgIDB4MDQ0QgorI2RlZmluZSBUVF9NU19MQU5HSURfTUFMQVlBTEFNX0lORElBICAgICAgICAgICAgICAgICAgIDB4MDQ0QworI2RlZmluZSBUVF9NU19MQU5HSURfQVNTQU1FU0VfSU5ESUEgICAgICAgICAgICAgICAgICAgIDB4MDQ0RAorI2RlZmluZSBUVF9NU19MQU5HSURfTUFSQVRISV9JTkRJQSAgICAgICAgICAgICAgICAgICAgIDB4MDQ0RQorI2RlZmluZSBUVF9NU19MQU5HSURfU0FOU0tSSVRfSU5ESUEgICAgICAgICAgICAgICAgICAgIDB4MDQ0RgogI2RlZmluZSBUVF9NU19MQU5HSURfTU9OR09MSUFOX01PTkdPTElBIC8qIEN5cmlsbGljICovIDB4MDQ1MAogI2RlZmluZSBUVF9NU19MQU5HSURfTU9OR09MSUFOX01PTkdPTElBX01PTkdPTElBTiAgICAgIDB4MDg1MAogI2RlZmluZSBUVF9NU19MQU5HSURfVElCRVRBTl9DSElOQSAgICAgICAgICAgICAgICAgICAgIDB4MDQ1MQpAQCAtNzMyLDEzICs3MzIsMTMgQEAKICNkZWZpbmUgVFRfTVNfTEFOR0lEX1NJTkRISV9JTkRJQSAvKiBBcmFiaWMgKi8gICAgICAgICAweDA0NTkKICNkZWZpbmUgVFRfTVNfTEFOR0lEX1NJTkRISV9QQUtJU1RBTiAgICAgICAgICAgICAgICAgICAweDA4NTkKICAgLyogTWlzc2luZyBhIExDSUQgZm9yIFNpbmRoaSBpbiBEZXZhbmFnYXJpIHNjcmlwdCAqLwotI2RlZmluZSBUVF9NU19MQU5HSURfU1lSSUFDX1NZUklBICAgICAgICAgICAgICAgICAgICAgIDB4MDQ1YQotI2RlZmluZSBUVF9NU19MQU5HSURfU0lOSEFMRVNFX1NSSV9MQU5LQSAgICAgICAgICAgICAgIDB4MDQ1YgotI2RlZmluZSBUVF9NU19MQU5HSURfQ0hFUk9LRUVfVU5JVEVEX1NUQVRFUyAgICAgICAgICAgIDB4MDQ1YwotI2RlZmluZSBUVF9NU19MQU5HSURfSU5VS1RJVFVUX0NBTkFEQSAgICAgICAgICAgICAgICAgIDB4MDQ1ZAotI2RlZmluZSBUVF9NU19MQU5HSURfQU1IQVJJQ19FVEhJT1BJQSAgICAgICAgICAgICAgICAgIDB4MDQ1ZQotI2RlZmluZSBUVF9NU19MQU5HSURfVEFNQVpJR0hUX01PUk9DQ08gLyogQXJhYmljICovICAgIDB4MDQ1ZgotI2RlZmluZSBUVF9NU19MQU5HSURfVEFNQVpJR0hUX01PUk9DQ09fTEFUSU4gICAgICAgICAgIDB4MDg1ZgorI2RlZmluZSBUVF9NU19MQU5HSURfU1lSSUFDX1NZUklBICAgICAgICAgICAgICAgICAgICAgIDB4MDQ1QQorI2RlZmluZSBUVF9NU19MQU5HSURfU0lOSEFMRVNFX1NSSV9MQU5LQSAgICAgICAgICAgICAgIDB4MDQ1QgorI2RlZmluZSBUVF9NU19MQU5HSURfQ0hFUk9LRUVfVU5JVEVEX1NUQVRFUyAgICAgICAgICAgIDB4MDQ1QworI2RlZmluZSBUVF9NU19MQU5HSURfSU5VS1RJVFVUX0NBTkFEQSAgICAgICAgICAgICAgICAgIDB4MDQ1RAorI2RlZmluZSBUVF9NU19MQU5HSURfQU1IQVJJQ19FVEhJT1BJQSAgICAgICAgICAgICAgICAgIDB4MDQ1RQorI2RlZmluZSBUVF9NU19MQU5HSURfVEFNQVpJR0hUX01PUk9DQ08gLyogQXJhYmljICovICAgIDB4MDQ1RgorI2RlZmluZSBUVF9NU19MQU5HSURfVEFNQVpJR0hUX01PUk9DQ09fTEFUSU4gICAgICAgICAgIDB4MDg1RgogICAvKiBNaXNzaW5nIGEgTENJRCBmb3IgVGlmaW5hZ2ggc2NyaXB0ICovCiAjZGVmaW5lIFRUX01TX0xBTkdJRF9LQVNITUlSSV9QQUtJU1RBTiAvKiBBcmFiaWMgKi8gICAgMHgwNDYwCiAgIC8qIFNwZWxsZWQgdGhpcyB3YXkgYnkgWFBzcDIgUGxhdGZvcm0gU0RLICgyMDA0LTA3LTI2KSAqLwpAQCAtNzU4LDE1ICs3NTgsMTUgQEAKICNkZWZpbmUgVFRfTVNfTEFOR0lEX0ZVTEZVTERFX05JR0VSSUEgICAgICAgICAgICAgICAgICAweDA0NjcKICNkZWZpbmUgVFRfTVNfTEFOR0lEX0hBVVNBX05JR0VSSUEgICAgICAgICAgICAgICAgICAgICAweDA0NjgKICNkZWZpbmUgVFRfTVNfTEFOR0lEX0lCSUJJT19OSUdFUklBICAgICAgICAgICAgICAgICAgICAweDA0NjkKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1lPUlVCQV9OSUdFUklBICAgICAgICAgICAgICAgICAgICAweDA0NmEKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1FVRUNIVUFfQk9MSVZJQSAgICAgICAgICAgICAgICAgICAweDA0NmIKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1FVRUNIVUFfRUNVQURPUiAgICAgICAgICAgICAgICAgICAweDA4NmIKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1FVRUNIVUFfUEVSVSAgICAgICAgICAgICAgICAgICAgICAweDBjNmIKLSNkZWZpbmUgVFRfTVNfTEFOR0lEX1NFUEVESV9TT1VUSF9BRlJJQ0EgICAgICAgICAgICAgICAweDA0NmMKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1lPUlVCQV9OSUdFUklBICAgICAgICAgICAgICAgICAgICAweDA0NkEKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1FVRUNIVUFfQk9MSVZJQSAgICAgICAgICAgICAgICAgICAweDA0NkIKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1FVRUNIVUFfRUNVQURPUiAgICAgICAgICAgICAgICAgICAweDA4NkIKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1FVRUNIVUFfUEVSVSAgICAgICAgICAgICAgICAgICAgICAweDBDNkIKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX1NFUEVESV9TT1VUSF9BRlJJQ0EgICAgICAgICAgICAgICAweDA0NkMKICAgLyogQWxzbyBzcGVsbGVkIGJ5IFhQc3AyIFBsYXRmb3JtIFNESyAoMjAwNC0wNy0yNikgKi8KICNkZWZpbmUgVFRfTVNfTEFOR0lEX1NPVEhPX1NPVVRIRVJOX1NPVVRIX0FGUklDQSBcCiAgICAgICAgICAgVFRfTVNfTEFOR0lEX1NFUEVESV9TT1VUSF9BRlJJQ0EKLSAgLyogbGFuZ3VhZ2UgY29kZXMgMHgwNDZkLCAweDA0NmUgYW5kIDB4MDQ2ZiBhcmUgKHN0aWxsKSB1bmtub3duLiAqLworICAvKiBsYW5ndWFnZSBjb2RlcyAweDA0NkQsIDB4MDQ2RSBhbmQgMHgwNDZGIGFyZSAoc3RpbGwpIHVua25vd24uICovCiAjZGVmaW5lIFRUX01TX0xBTkdJRF9JR0JPX05JR0VSSUEgICAgICAgICAgICAgICAgICAgICAgMHgwNDcwCiAjZGVmaW5lIFRUX01TX0xBTkdJRF9LQU5VUklfTklHRVJJQSAgICAgICAgICAgICAgICAgICAgMHgwNDcxCiAjZGVmaW5lIFRUX01TX0xBTkdJRF9PUk9NT19FVEhJT1BJQSAgICAgICAgICAgICAgICAgICAgMHgwNDcyCkBAIC03ODMsMTIgKzc4MywxMiBAQAogICAvKiAgICAgICBzdHVkeWluZykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUVF9NU19MQU5HSURfWUlfQ0hJTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQ3OAogI2RlZmluZSBUVF9NU19MQU5HSURfUEFQSUFNRU5UVV9ORVRIRVJMQU5EU19BTlRJTExFUyAgIDB4MDQ3OQotICAvKiBsYW5ndWFnZSBjb2RlcyBmcm9tIDB4MDQ3YSB0byAweDA0N2YgYXJlIChzdGlsbCkgdW5rbm93bi4gKi8KKyAgLyogbGFuZ3VhZ2UgY29kZXMgZnJvbSAweDA0N0EgdG8gMHgwNDdGIGFyZSAoc3RpbGwpIHVua25vd24uICovCiAjZGVmaW5lIFRUX01TX0xBTkdJRF9VSUdIVVJfQ0hJTkEgICAgICAgICAgICAgICAgICAgICAgMHgwNDgwCiAjZGVmaW5lIFRUX01TX0xBTkdJRF9NQU9SSV9ORVdfWkVBTEFORCAgICAgICAgICAgICAgICAgMHgwNDgxCiAKICNpZiAwICAvKiBub3QgZGVlbWVkIHVzZWZ1bCBmb3IgZm9udHMgKi8KLSNkZWZpbmUgVFRfTVNfTEFOR0lEX0hVTUFOX0lOVEVSRkFDRV9ERVZJQ0UgICAgICAgICAgICAweDA0ZmYKKyNkZWZpbmUgVFRfTVNfTEFOR0lEX0hVTUFOX0lOVEVSRkFDRV9ERVZJQ0UgICAgICAgICAgICAweDA0RkYKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvdHR0YWJsZXMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWJsZXMuaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL3R0dGFibGVzLmgKcmVuYW1lIHRvIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWJsZXMuaAppbmRleCBlMWQ4YjA1Li4xNTY4ZjQwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL3R0dGFibGVzLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgQmFzaWMgU0ZOVC9UcnVlVHlwZSB0YWJsZXMgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZSAgICAgICAgICAgICAgICAgKi8KIC8qICAgIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDUsIDIwMDgtMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zNzEsNyArMzcxLDcgQEAKICAgICBGVF9TaG9ydCAgIHhBdmdDaGFyV2lkdGg7CiAgICAgRlRfVVNob3J0ICB1c1dlaWdodENsYXNzOwogICAgIEZUX1VTaG9ydCAgdXNXaWR0aENsYXNzOwotICAgIEZUX1Nob3J0ICAgZnNUeXBlOworICAgIEZUX1VTaG9ydCAgZnNUeXBlOwogICAgIEZUX1Nob3J0ICAgeVN1YnNjcmlwdFhTaXplOwogICAgIEZUX1Nob3J0ICAgeVN1YnNjcmlwdFlTaXplOwogICAgIEZUX1Nob3J0ICAgeVN1YnNjcmlwdFhPZmZzZXQ7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL3R0dGFncy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL3R0dGFncy5oCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFncy5oCmluZGV4IGQ1OWFhMTkuLjM4MzZjN2IgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvdHR0YWdzLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUYWdzIGZvciBUcnVlVHlwZSBhbmQgT3BlblR5cGUgdGFibGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS90dHVucGF0LmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlL3R0dW5wYXQuaApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSB0aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL3R0dW5wYXQuaApyZW5hbWUgdG8gdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS90dHVucGF0LmgKaW5kZXggYmY1M2RkZC4uOGVhNTU2OCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS90dHVucGF0LmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS90dHVucGF0LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRGVmaW5pdGlvbnMgZm9yIHRoZSB1bnBhdGVudGVkIFRydWVUeXBlIGhpbnRpbmcgc3lzdGVtICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMsIDIwMDYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFdyaXR0ZW4gYnkgR3JhaGFtIEFzaGVyIDxncmFoYW0uYXNoZXJAYnRpbnRlcm5ldC5jb20+ICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnQyYnVpbGQuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnQyYnVpbGQuaAppbmRleCA2ZjhlYjdmLi40MTliODBhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9pbmNsdWRlL2Z0MmJ1aWxkLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdDJidWlsZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIDIgYnVpbGQgYW5kIHNldHVwIG1hY3Jvcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDEsIDIwMDYsIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zNCw3ICszNCw3IEBACiAjaWZuZGVmIF9fRlQyQlVJTERfSF9fCiAjZGVmaW5lIF9fRlQyQlVJTERfSF9fCiAKLSNpbmNsdWRlIDxjb25maWcvZnRoZWFkZXIuaD4KKyNpbmNsdWRlIDxmcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaD4KIAogI2VuZGlmIC8qIF9fRlQyQlVJTERfSF9fICovCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL2luY2x1ZGUvZnR0dGRydi5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdHR0ZHJ2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ODg0MTMuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvaW5jbHVkZS9mdHR0ZHJ2LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnR0dGRydi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEFQSSBmb3IgY29udHJvbGxpbmcgdGhlIFRydWVUeXBlIGRyaXZlciAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBfX0ZUVFREUlZfSF9fCi0jZGVmaW5lIF9fRlRUVERSVl9IX18KLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0KLSNpZmRlZiBGUkVFVFlQRV9ICi0jZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgotI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCi0jZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKLSNlbmRpZgotCi0KLUZUX0JFR0lOX0hFQURFUgotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEBzZWN0aW9uOgotICAgKiAgIHR0X2RyaXZlcgotICAgKgotICAgKiBAdGl0bGU6Ci0gICAqICAgVGhlIFRydWVUeXBlIGRyaXZlcgotICAgKgotICAgKiBAYWJzdHJhY3Q6Ci0gICAqICAgQ29udHJvbGxpbmcgdGhlIFRydWVUeXBlIGRyaXZlciBtb2R1bGUuCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBXaGlsZSBGcmVlVHlwZSdzIFRydWVUeXBlIGRyaXZlciBkb2Vzbid0IGV4cG9zZSBBUEkgZnVuY3Rpb25zIGJ5Ci0gICAqICAgaXRzZWxmLCBpdCBpcyBwb3NzaWJsZSB0byBjb250cm9sIGl0cyBiZWhhdmlvdXIgd2l0aCBARlRfUHJvcGVydHlfU2V0Ci0gICAqICAgYW5kIEBGVF9Qcm9wZXJ0eV9HZXQuICBUaGUgZm9sbG93aW5nIGxpc3RzIHRoZSBhdmFpbGFibGUgcHJvcGVydGllcwotICAgKiAgIHRvZ2V0aGVyIHdpdGggdGhlIG5lY2Vzc2FyeSBtYWNyb3MgYW5kIHN0cnVjdHVyZXMuCi0gICAqCi0gICAqICAgVGhlIFRydWVUeXBlIGRyaXZlcidzIG1vZHVsZSBuYW1lIGlzIGB0cnVldHlwZScuCi0gICAqCi0gICAqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEBwcm9wZXJ0eToKLSAgICogICBpbnRlcnByZXRlci12ZXJzaW9uCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBDdXJyZW50bHksIHR3byB2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlLCByZXByZXNlbnRpbmcgdGhlIGJ5dGVjb2RlCi0gICAqICAgaW50ZXJwcmV0ZXIgd2l0aCBhbmQgd2l0aG91dCBzdWJwaXhlbCBoaW50aW5nIHN1cHBvcnQsCi0gICAqICAgcmVzcGVjdGl2ZWx5LiAgVGhlIGRlZmF1bHQgaXMgc3VicGl4ZWwgc3VwcG9ydCBpZgotICAgKiAgIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyBpcyBkZWZpbmVkLCBhbmQgbm8gc3VicGl4ZWwKLSAgICogICBzdXBwb3J0IG90aGVyd2lzZSAoc2luY2UgaXQgaXNuJ3QgYXZhaWxhYmxlIHRoZW4pLgotICAgKgotICAgKiAgIElmIHN1YnBpeGVsIGhpbnRpbmcgaXMgb24sIG1hbnkgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zCi0gICAqICAgYmVoYXZlIGRpZmZlcmVudGx5IGNvbXBhcmVkIHRvIEIvVyBvciBncmF5c2NhbGUgcmVuZGVyaW5nLiAgVGhlCi0gICAqICAgbWFpbiBpZGVhIGlzIHRvIHJlbmRlciBhdCBhIG11Y2ggaW5jcmVhc2VkIGhvcml6b250YWwgcmVzb2x1dGlvbiwKLSAgICogICB0aGVuIHNhbXBsaW5nIGRvd24gdGhlIGNyZWF0ZWQgb3V0cHV0IHRvIHN1YnBpeGVsIHByZWNpc2lvbi4KLSAgICogICBIb3dldmVyLCBtYW55IG9sZGVyIGZvbnRzIGFyZSBub3Qgc3VpdGVkIHRvIHRoaXMgYW5kIG11c3QgYmUKLSAgICogICBzcGVjaWFsbHkgdGFrZW4gY2FyZSBvZiBieSBhcHBseWluZyAoaGFyZGNvZGVkKSBmb250LXNwZWNpZmljCi0gICAqICAgdHdlYWtzLgotICAgKgotICAgKiAgIERldGFpbHMgb24gc3VicGl4ZWwgaGludGluZyBhbmQgc29tZSBvZiB0aGUgbmVjZXNzYXJ5IHR3ZWFrcyBjYW4gYmUKLSAgICogICBmb3VuZCBpbiBHcmVnIEhpdGNoY29jaydzIHdoaXRlcGFwZXIgYXQKLSAgICogICBgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHgnLgotICAgKgotICAgKiAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlIGRlbW9uc3RyYXRlcyBob3cgdG8gYWN0aXZhdGUgc3VicGl4ZWwKLSAgICogICBoaW50aW5nIChvbWl0dGluZyB0aGUgZXJyb3IgaGFuZGxpbmcpLgotICAgKgotICAgKiAgIHsKLSAgICogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7Ci0gICAqICAgICBGVF9GYWNlICAgICBmYWNlOwotICAgKiAgICAgRlRfVUludCAgICAgaW50ZXJwcmV0ZXJfdmVyc2lvbiA9IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzg7Ci0gICAqCi0gICAqCi0gICAqICAgICBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOwotICAgKgotICAgKiAgICAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LCAidHJ1ZXR5cGUiLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJwcmV0ZXItdmVyc2lvbiIsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcnByZXRlcl92ZXJzaW9uICk7Ci0gICAqICAgfQotICAgKgotICAgKiBAbm90ZToKLSAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgotICAgKgotICAgKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAZW51bToKLSAgICogICBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OX1hYWAotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIGZvciB0aGUgQGludGVycHJldGVyLXZlcnNpb24gcHJvcGVydHkgdG8KLSAgICogICBzZWxlY3QgdGhlIGhpbnRpbmcgZW5naW5lIGZvciBUcnVldHlwZSBmb250cy4KLSAgICoKLSAgICogICBUaGUgbnVtZXJpYyB2YWx1ZSBpbiB0aGUgY29uc3RhbnQgbmFtZXMgcmVwcmVzZW50cyB0aGUgdmVyc2lvbgotICAgKiAgIG51bWJlciBhcyByZXR1cm5lZCBieSB0aGUgYEdFVElORk8nIGJ5dGVjb2RlIGluc3RydWN0aW9uLgotICAgKgotICAgKiBAdmFsdWVzOgotICAgKiAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUgOjoKLSAgICogICAgIFZlcnNpb25+MzUgY29ycmVzcG9uZHMgdG8gTVMgcmFzdGVyaXplciB2LjEuNyBhcyB1c2VkIGUuZy4gaW4KLSAgICogICAgIFdpbmRvd3N+OTg7IG9ubHkgZ3JheXNjYWxlIGFuZCBCL1cgcmFzdGVyaXppbmcgaXMgc3VwcG9ydGVkLgotICAgKgotICAgKiAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggOjoKLSAgICogICAgIFZlcnNpb25+MzggY29ycmVzcG9uZHMgdG8gTVMgcmFzdGVyaXplciB2LjEuOTsgaXQgaXMgcm91Z2hseQotICAgKiAgICAgZXF1aXZhbGVudCB0byB0aGUgaGludGluZyBwcm92aWRlZCBieSBEaXJlY3RXcml0ZSBDbGVhclR5cGUgKGFzCi0gICAqICAgICBjYW4gYmUgZm91bmQsIGZvciBleGFtcGxlLCBpbiB0aGUgSW50ZXJuZXQgRXhwbG9yZXJ+OSBydW5uaW5nIG9uCi0gICAqICAgICBXaW5kb3dzfjcpLgotICAgKgotICAgKiBAbm90ZToKLSAgICogICBUaGlzIHByb3BlcnR5IGNvbnRyb2xzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyCi0gICAqICAgYW5kIHRodXMgaG93IG91dGxpbmVzIGdldCBoaW50ZWQuICBJdCBkb2VzICpub3QqIGNvbnRyb2wgaG93IGdseXBoCi0gICAqICAgZ2V0IHJhc3Rlcml6ZWQhICBJbiBwYXJ0aWN1bGFyLCBpdCBkb2VzIG5vdCBjb250cm9sIHN1YnBpeGVsIGNvbG9yCi0gICAqICAgZmlsdGVyaW5nLgotICAgKgotICAgKiAgIElmIEZyZWVUeXBlIGhhcyBub3QgYmVlbiBjb21waWxlZCB3aXRoIGNvbmZpZ3VyYXRpb24gb3B0aW9uCi0gICAqICAgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HLCBzZWxlY3RpbmcgdmVyc2lvbn4zOCBjYXVzZXMgYW4KLSAgICogICBgRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZScgZXJyb3IuCi0gICAqCi0gICAqICAgRGVwZW5kaW5nIG9uIHRoZSBncmFwaGljcyBmcmFtZXdvcmssIE1pY3Jvc29mdCB1c2VzIGRpZmZlcmVudAotICAgKiAgIGJ5dGVjb2RlIGVuZ2luZXMuICBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgdmVyc2lvbiBudW1iZXJzIHJldHVybmVkIGJ5Ci0gICAqICAgYSBjYWxsIHRvIHRoZSBgR0VUSU5GT1sxXScgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYXJlIG1vcmUgY29udm9sdXRlZAotICAgKiAgIHRoYW4gZGVzaXJlZC4KLSAgICoKLSAgICogICB7Ci0gICAqICAgICAgZnJhbWV3b3JrICAgV2luZG93cyB2ZXJzaW9uICAgcmVzdWx0IG9mIEdFVElORk9bMV0KLSAgICogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICogICAgICAgR0RJICAgICAgICAgYmVmb3JlIFhQICAgICAgICAgMzUKLSAgICogICAgICAgR0RJICAgICAgICAgWFAgYW5kIGxhdGVyICAgICAgMzcKLSAgICogICAgICAgR0RJKyBvbGQgICAgYmVmb3JlIFZpc3RhICAgICAgMzcKLSAgICogICAgICAgR0RJKyBvbGQgICAgVmlzdGEsIDcgICAgICAgICAgMzgKLSAgICogICAgICAgR0RJKyAgICAgICAgYWZ0ZXIgNyAgICAgICAgICAgNDAKLSAgICogICAgICAgRFdyaXRlICAgICAgYmVmb3JlIDggICAgICAgICAgMzkKLSAgICogICAgICAgRFdyaXRlICAgICAgOCBhbmQgbGF0ZXIgICAgICAgNDAKLSAgICogICB9Ci0gICAqCi0gICAqICAgU2luY2UgRnJlZVR5cGUgZG9lc24ndCBwcm92aWRlIGFsbCBjYXBhYmlsaXRpZXMgb2YgRFdyaXRlIENsZWFyVHlwZSwKLSAgICogICB1c2luZyB2ZXJzaW9ufjM4IHNlZW1zIGp1c3RpZmllZC4KLSAgICoKLSAgICovCi0jZGVmaW5lIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUgIDM1Ci0jZGVmaW5lIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggIDM4Ci0KLSAvKiAqLwotCi0KLUZUX0VORF9IRUFERVIKLQotCi0jZW5kaWYgLyogX19GVFRURFJWX0hfXyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvSmFtZmlsZSBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL0phbWZpbGUKaW5kZXggODMyZThiOC4uZTM5ZmIwOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvSmFtZmlsZQorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy9iYXNlIEphbWZpbGUKICMKLSMgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgYnkKKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCkBAIC0xNywxMCArMTcsMTkgQEAKIAogICBpZiAkKEZUMl9NVUxUSSkKICAgewotICAgIF9zb3VyY2VzID0gZnRhZHZhbmMgZnRjYWxjICAgZnRkYmdtZW0gZnRnbG9hZHIKLSAgICAgICAgICAgICAgIGZ0b2JqcyAgIGZ0b3V0bG4gIGZ0cmZvcmsgIGZ0c25hbWVzCi0gICAgICAgICAgICAgICBmdHN0cmVhbSBmdHRyaWdvbiBmdHV0aWwKLSAgICAgICAgICAgICAgIGJhc2VwaWMgIGZ0cGljCisgICAgX3NvdXJjZXMgPSBiYXNlcGljCisgICAgICAgICAgICAgICBmdGFkdmFuYworICAgICAgICAgICAgICAgZnRjYWxjCisgICAgICAgICAgICAgICBmdGRiZ21lbQorICAgICAgICAgICAgICAgZnRnbG9hZHIKKyAgICAgICAgICAgICAgIGZ0b2JqcworICAgICAgICAgICAgICAgZnRvdXRsbgorICAgICAgICAgICAgICAgZnRwaWMKKyAgICAgICAgICAgICAgIGZ0cmZvcmsKKyAgICAgICAgICAgICAgIGZ0c25hbWVzCisgICAgICAgICAgICAgICBmdHN0cmVhbQorICAgICAgICAgICAgICAgZnR0cmlnb24KKyAgICAgICAgICAgICAgIGZ0dXRpbAogICAgICAgICAgICAgICAgOwogICB9CiAgIGVsc2UKQEAgLTM0LDEzICs0MywzMSBAQAogIyBBZGQgdGhlIG9wdGlvbmFsL3JlcGxhY2VhYmxlIGZpbGVzLgogIwogewotICBsb2NhbCAgX3NvdXJjZXMgPSBiYm94ICAgYmRmICAgIGJpdG1hcCBkZWJ1ZyAgZ2FzcAotICAgICAgICAgICAgICAgICAgICBnbHlwaCAgZ3h2YWwgIGluaXQgICBsY2RmaWwgbW0KLSAgICAgICAgICAgICAgICAgICAgb3R2YWwgIHBmciAgICBzdHJva2Ugc3ludGggIHN5c3RlbQotICAgICAgICAgICAgICAgICAgICB0eXBlMSAgd2luZm50IHhmODYgICBwYXRlbnQKKyAgbG9jYWwgIF9zb3VyY2VzID0gZnRhcGkKKyAgICAgICAgICAgICAgICAgICAgZnRiYm94CisgICAgICAgICAgICAgICAgICAgIGZ0YmRmCisgICAgICAgICAgICAgICAgICAgIGZ0Yml0bWFwCisgICAgICAgICAgICAgICAgICAgIGZ0Y2lkCisgICAgICAgICAgICAgICAgICAgIGZ0ZGVidWcKKyAgICAgICAgICAgICAgICAgICAgZnRmbnRmbXQKKyAgICAgICAgICAgICAgICAgICAgZnRmc3R5cGUKKyAgICAgICAgICAgICAgICAgICAgZnRnYXNwCisgICAgICAgICAgICAgICAgICAgIGZ0Z2x5cGgKKyAgICAgICAgICAgICAgICAgICAgZnRneHZhbAorICAgICAgICAgICAgICAgICAgICBmdGluaXQKKyAgICAgICAgICAgICAgICAgICAgZnRsY2RmaWwKKyAgICAgICAgICAgICAgICAgICAgZnRtbQorICAgICAgICAgICAgICAgICAgICBmdG90dmFsCisgICAgICAgICAgICAgICAgICAgIGZ0cGF0ZW50CisgICAgICAgICAgICAgICAgICAgIGZ0cGZyCisgICAgICAgICAgICAgICAgICAgIGZ0c3Ryb2tlCisgICAgICAgICAgICAgICAgICAgIGZ0c3ludGgKKyAgICAgICAgICAgICAgICAgICAgZnRzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgZnR0eXBlMQorICAgICAgICAgICAgICAgICAgICBmdHdpbmZudAogICAgICAgICAgICAgICAgICAgICA7CiAKLSAgTGlicmFyeSAgJChGVDJfTElCKSA6IGZ0JChfc291cmNlcykuYyA7CisgIExpYnJhcnkgICQoRlQyX0xJQikgOiAkKF9zb3VyY2VzKS5jIDsKIH0KIAogIyBBZGQgTWFjaW50b3NoLXNwZWNpZmljIGZpbGUgdG8gdGhlIGxpYnJhcnkgd2hlbiBuZWNlc3NhcnkuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9iYXNlcGljLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9iYXNlcGljLmMKaW5kZXggYWViNmZkNS4uOTg1MGVkOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvYmFzZXBpYy5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Jhc2VwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgYmFzZS4gICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOSwgMjAxMiwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvYmFzZXBpYy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvYmFzZXBpYy5oCmluZGV4IDMyOWQ3YzguLmM1ZDdjYmYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Jhc2VwaWMuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9iYXNlcGljLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIGJhc2UuICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDkgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIwLDEwICsyMCw5IEBACiAjZGVmaW5lIF9fQkFTRVBJQ19IX18KIAogCi1GVF9CRUdJTl9IRUFERVIKLQogI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKIAorCiAjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCiAKICNkZWZpbmUgRlRfT1VUTElORV9HTFlQSF9DTEFTU19HRVQgICZmdF9vdXRsaW5lX2dseXBoX2NsYXNzCkBAIC00Myw2ICs0Miw4IEBACiAjZW5kaWYKIAogCitGVF9CRUdJTl9IRUFERVIKKwogICB0eXBlZGVmIHN0cnVjdCAgQmFzZVBJQ18KICAgewogICAgIEZUX01vZHVsZV9DbGFzcyoqICBkZWZhdWx0X21vZHVsZV9jbGFzc2VzOwpAQCAtNzgsMTIgKzc5LDEyIEBACiAgIEZUX0Vycm9yCiAgIGZ0X2Jhc2VfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKIAorRlRfRU5EX0hFQURFUgorCiAjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KIAogICAvKiAqLwogCi1GVF9FTkRfSEVBREVSCi0KICNlbmRpZiAvKiBfX0JBU0VQSUNfSF9fICovCiAKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRhZHZhbmMuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0YWR2YW5jLmMKaW5kZXggMTg4ODRlZi4uZjEyOTA4ZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRhZHZhbmMuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGFkdmFuYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFF1aWNrIGNvbXB1dGF0aW9uIG9mIGFkdmFuY2Ugd2lkdGhzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA4LCAyMDA5LCAyMDExLCAyMDEzLCAyMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGFwaS5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRhcGkuYwppbmRleCA4OTE0ZDFmLi5mMjJhMTgxIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGFwaS5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0YXBpLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDIgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0YmFzZS5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRiYXNlLmMKaW5kZXggNWU1ZDcwZS4uMjUzZGZiNyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRiYXNlLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRiYXNlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgU2luZ2xlIG9iamVjdCBsaWJyYXJ5IGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBieSAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0YmFzZS5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRiYXNlLmgKaW5kZXggNTFhMWRiMS4uZTM3ZmVmYSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRiYXNlLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRiYXNlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHByaXZhdGUgZnVuY3Rpb25zIHVzZWQgaW4gYmFzZSBtb2R1bGUgKHNwZWNpZmljYXRpb24pLiAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDgsIDIwMTAgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA4LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBXZXJuZXIgTGVtYmVyZywgYW5kIHN1enVraSB0b3NoaXlhLiAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI3LDYgKzI3LDExIEBACiBGVF9CRUdJTl9IRUFERVIKIAogCisgIC8qIE1hY09TIHJlc291cmNlIGZvcmsgY2Fubm90IGV4Y2VlZCAxNk1CIGF0IGxlYXN0IGZvciBDYXJib24gY29kZTsgKi8KKyAgLyogc2VlIGh0dHBzOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2VuLXVzL2tiLzEzMDQzNyAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9NQUNfUkZPUktfTUFYX0xFTiAgMHgwMEZGRkZGRlVMCisKKwogICAvKiBBc3N1bWUgdGhlIHN0cmVhbSBpcyBzZm50LXdyYXBwZWQgUFMgVHlwZTEgb3Igc2ZudC13cmFwcGVkIENJRC1rZXllZCAqLwogICAvKiBmb250LCBhbmQgdHJ5IHRvIGxvYWQgYSBmYWNlIHNwZWNpZmllZCBieSB0aGUgZmFjZV9pbmRleC4gICAgICAgICAgICAqLwogICBGVF9MT0NBTCggRlRfRXJyb3IgKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRiYm94LmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGJib3guYwppbmRleCBjNzc1ZDVjLi4xMGRmOThkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGJib3guYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGJib3guYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBiYm94IGNvbXB1dGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAyLCAyMDA0LCAyMDA2LCAyMDEwLCAyMDEzLCAyMDE0IGJ5ICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkICAgICAgICAqLwpAQCAtNDIsMjIgKzQyLDIyIEBACiAgIH0gVEJCb3hfUmVjOwogCiAKLSNkZWZpbmUgRlRfVVBEQVRFX0JCT1gocCwgYmJveCkgICAgICAgXAotICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBwLT54IDwgYmJveC54TWluICkgICAgICAgICAgIFwKLSAgICAgIGJib3gueE1pbiA9IHAtPng7ICAgICAgICAgICAgICAgXAotICAgIGlmICggcC0+eCA+IGJib3gueE1heCApICAgICAgICAgICBcCi0gICAgICBiYm94LnhNYXggPSBwLT54OyAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIHAtPnkgPCBiYm94LnlNaW4gKSAgICAgICAgICAgXAotICAgICAgYmJveC55TWluID0gcC0+eTsgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBwLT55ID4gYmJveC55TWF4ICkgICAgICAgICAgIFwKLSAgICAgIGJib3gueU1heCA9IHAtPnk7ICAgICAgICAgICAgICAgXAorI2RlZmluZSBGVF9VUERBVEVfQkJPWCggcCwgYmJveCApIFwKKyAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCBwLT54IDwgYmJveC54TWluICkgICAgICAgXAorICAgICAgYmJveC54TWluID0gcC0+eDsgICAgICAgICAgIFwKKyAgICBpZiAoIHAtPnggPiBiYm94LnhNYXggKSAgICAgICBcCisgICAgICBiYm94LnhNYXggPSBwLT54OyAgICAgICAgICAgXAorICAgIGlmICggcC0+eSA8IGJib3gueU1pbiApICAgICAgIFwKKyAgICAgIGJib3gueU1pbiA9IHAtPnk7ICAgICAgICAgICBcCisgICAgaWYgKCBwLT55ID4gYmJveC55TWF4ICkgICAgICAgXAorICAgICAgYmJveC55TWF4ID0gcC0+eTsgICAgICAgICAgIFwKICAgRlRfRU5EX1NUTU5UCiAKLSNkZWZpbmUgQ0hFQ0tfWCggcCwgYmJveCApICBcCisjZGVmaW5lIENIRUNLX1goIHAsIGJib3ggKSAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKCBwLT54IDwgYmJveC54TWluIHx8IHAtPnggPiBiYm94LnhNYXggKQogCi0jZGVmaW5lIENIRUNLX1koIHAsIGJib3ggKSAgXAorI2RlZmluZSBDSEVDS19ZKCBwLCBiYm94ICkgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggcC0+eSA8IGJib3gueU1pbiB8fCBwLT55ID4gYmJveC55TWF4ICkKIAogCkBAIC0yNTUsNiArMjU1LDcgQEAKICAgICBGVF9Qb3MgIHBlYWsgPSAwOwogICAgIEZUX0ludCAgc2hpZnQ7CiAKKwogICAgIC8qIFRoaXMgZnVuY3Rpb24gZmluZHMgYSBwZWFrIG9mIGEgY3ViaWMgc2VnbWVudCBpZiBpdCBpcyBhYm92ZSAwICAgICovCiAgICAgLyogdXNpbmcgaXRlcmF0aXZlIGJpc2VjdGlvbiBvZiB0aGUgc2VnbWVudCwgb3IgcmV0dXJucyAwLiAgICAgICAgICAgKi8KICAgICAvKiBUaGUgZml4ZWQtcG9pbnQgYXJpdGhtZXRpYyBvZiBiaXNlY3Rpb24gaXMgaW5oZXJlbnRseSBzdGFibGUgICAgICAqLwpAQCAtMjY0LDggKzI2NSwxMCBAQAogICAgIC8qIEl0IGlzIGNhbGxlZCB3aXRoIGVpdGhlciBxMiBvciBxMyBwb3NpdGl2ZSwgd2hpY2ggaXMgbmVjZXNzYXJ5ICAgICovCiAgICAgLyogZm9yIHRoZSBwZWFrIHRvIGV4aXN0IGFuZCBhdm9pZHMgdW5kZWZpbmVkIEZUX01TQi4gICAgICAgICAgICAgICAgKi8KIAotICAgIHNoaWZ0ID0gMjcgLQotICAgICAgRlRfTVNCKCBGVF9BQlMoIHExICkgfCBGVF9BQlMoIHEyICkgfCBGVF9BQlMoIHEzICkgfCBGVF9BQlMoIHE0ICkgKTsKKyAgICBzaGlmdCA9IDI3IC0gRlRfTVNCKCAoRlRfVUludDMyKSggRlRfQUJTKCBxMSApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQUJTKCBxMiApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQUJTKCBxMyApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQUJTKCBxNCApICkgKTsKIAogICAgIGlmICggc2hpZnQgPiAwICkKICAgICB7CkBAIC00MTksNyArNDIyLDggQEAKICAgICByZXR1cm4gMDsKICAgfQogCi1GVF9ERUZJTkVfT1VUTElORV9GVU5DUyhiYm94X2ludGVyZmFjZSwKKworICBGVF9ERUZJTkVfT1VUTElORV9GVU5DUyhiYm94X2ludGVyZmFjZSwKICAgICAoRlRfT3V0bGluZV9Nb3ZlVG9fRnVuYykgQkJveF9Nb3ZlX1RvLAogICAgIChGVF9PdXRsaW5lX0xpbmVUb19GdW5jKSBCQm94X0xpbmVfVG8sCiAgICAgKEZUX091dGxpbmVfQ29uaWNUb19GdW5jKUJCb3hfQ29uaWNfVG8sCkBAIC00MjcsMTQgKzQzMSwxNyBAQAogICAgIDAsIDAKICAgKQogCisKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGJib3guaCAqLwogCiAgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKICAgRlRfT3V0bGluZV9HZXRfQkJveCggRlRfT3V0bGluZSogIG91dGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JCb3ggICAgICphYmJveCApCiAgIHsKLSAgICBGVF9CQm94ICAgICBjYm94ID0geyAweDdGRkZGRkZGLCAweDdGRkZGRkZGLCAtMHg3RkZGRkZGRiwgLTB4N0ZGRkZGRkYgfTsKLSAgICBGVF9CQm94ICAgICBiYm94ID0geyAweDdGRkZGRkZGLCAweDdGRkZGRkZGLCAtMHg3RkZGRkZGRiwgLTB4N0ZGRkZGRkYgfTsKKyAgICBGVF9CQm94ICAgICBjYm94ID0geyAgMHg3RkZGRkZGRkwsICAweDdGRkZGRkZGTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtMHg3RkZGRkZGRkwsIC0weDdGRkZGRkZGTCB9OworICAgIEZUX0JCb3ggICAgIGJib3ggPSB7ICAweDdGRkZGRkZGTCwgIDB4N0ZGRkZGRkZMLAorICAgICAgICAgICAgICAgICAgICAgICAgIC0weDdGRkZGRkZGTCwgLTB4N0ZGRkZGRkZMIH07CiAgICAgRlRfVmVjdG9yKiAgdmVjOwogICAgIEZUX1VTaG9ydCAgIG47CiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0YmRmLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGJkZi5jCmluZGV4IGQ5ZGNiYWQuLmFhNzJkZGMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0YmRmLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRiZGYuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBCREYtc3BlY2lmaWMgc3RyaW5ncyAoYm9keSkuICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDA0LCAyMDEzLCAyMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRiaXRtYXAuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0Yml0bWFwLmMKaW5kZXggNWRkMzNhMi4uYTU0NTcyYSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRiaXRtYXAuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGJpdG1hcC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBiaXRtYXBzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMDksIDIwMTEsIDIwMTMsIDIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zMSw2ICszMSwxNiBAQAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Yml0bWFwLmggKi8KIAogICBGVF9FWFBPUlRfREVGKCB2b2lkICkKKyAgRlRfQml0bWFwX0luaXQoIEZUX0JpdG1hcCAgKmFiaXRtYXAgKQorICB7CisgICAgaWYgKCBhYml0bWFwICkKKyAgICAgICphYml0bWFwID0gbnVsbF9iaXRtYXA7CisgIH0KKworCisgIC8qIGRlcHJlY2F0ZWQgZnVuY3Rpb24gbmFtZTsgcmV0YWluZWQgZm9yIEFCSSBjb21wYXRpYmlsaXR5ICovCisKKyAgRlRfRVhQT1JUX0RFRiggdm9pZCApCiAgIEZUX0JpdG1hcF9OZXcoIEZUX0JpdG1hcCAgKmFiaXRtYXAgKQogICB7CiAgICAgaWYgKCBhYml0bWFwICkKQEAgLTExNyw3ICsxMjcsNyBAQAogICAgICAgICBGVF9CeXRlKiAgdCA9IHRhcmdldC0+YnVmZmVyOwogCiAKLSAgICAgICAgdCArPSBwaXRjaCAqICggdGFyZ2V0LT5yb3dzIC0gMSApOworICAgICAgICB0ICs9IChGVF9VTG9uZylwaXRjaCAqICggdGFyZ2V0LT5yb3dzIC0gMSApOwogCiAgICAgICAgIGZvciAoIGkgPSB0YXJnZXQtPnJvd3M7IGkgPiAwOyBpLS0gKQogICAgICAgICB7CkBAIC0xNjAsMjEgKzE3MCwyMSBAQAogICAgIHsKICAgICBjYXNlIEZUX1BJWEVMX01PREVfTU9OTzoKICAgICAgIGJwcCAgICAgICA9IDE7Ci0gICAgICBuZXdfcGl0Y2ggPSAoIHdpZHRoICsgeHBpeGVscyArIDcgKSA+PiAzOworICAgICAgbmV3X3BpdGNoID0gKGludCkoICggd2lkdGggKyB4cGl4ZWxzICsgNyApID4+IDMgKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgRlRfUElYRUxfTU9ERV9HUkFZMjoKICAgICAgIGJwcCAgICAgICA9IDI7Ci0gICAgICBuZXdfcGl0Y2ggPSAoIHdpZHRoICsgeHBpeGVscyArIDMgKSA+PiAyOworICAgICAgbmV3X3BpdGNoID0gKGludCkoICggd2lkdGggKyB4cGl4ZWxzICsgMyApID4+IDIgKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgRlRfUElYRUxfTU9ERV9HUkFZNDoKICAgICAgIGJwcCAgICAgICA9IDQ7Ci0gICAgICBuZXdfcGl0Y2ggPSAoIHdpZHRoICsgeHBpeGVscyArIDEgKSA+PiAxOworICAgICAgbmV3X3BpdGNoID0gKGludCkoICggd2lkdGggKyB4cGl4ZWxzICsgMSApID4+IDEgKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgRlRfUElYRUxfTU9ERV9HUkFZOgogICAgIGNhc2UgRlRfUElYRUxfTU9ERV9MQ0Q6CiAgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0xDRF9WOgogICAgICAgYnBwICAgICAgID0gODsKLSAgICAgIG5ld19waXRjaCA9ICggd2lkdGggKyB4cGl4ZWxzICk7CisgICAgICBuZXdfcGl0Y2ggPSAoaW50KSggd2lkdGggKyB4cGl4ZWxzICk7CiAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOwpAQCAtMTg0LDcgKzE5NCw3IEBACiAgICAgaWYgKCB5cGl4ZWxzID09IDAgJiYgbmV3X3BpdGNoIDw9IHBpdGNoICkKICAgICB7CiAgICAgICAvKiB6ZXJvIHRoZSBwYWRkaW5nICovCi0gICAgICBGVF9VSW50ICBiaXRfd2lkdGggPSBwaXRjaCAqIDg7CisgICAgICBGVF9VSW50ICBiaXRfd2lkdGggPSAoRlRfVUludClwaXRjaCAqIDg7CiAgICAgICBGVF9VSW50ICBiaXRfbGFzdCAgPSAoIHdpZHRoICsgeHBpeGVscyApICogYnBwOwogCiAKQEAgLTIyNyw4ICsyMzcsOSBAQAogCiAKICAgICAgIGZvciAoIGkgPSAwOyBpIDwgYml0bWFwLT5yb3dzOyBpKysgKQotICAgICAgICBGVF9NRU1fQ09QWSggYnVmZmVyICsgbmV3X3BpdGNoICogKCB5cGl4ZWxzICsgaSApLAotICAgICAgICAgICAgICAgICAgICAgYml0bWFwLT5idWZmZXIgKyBwaXRjaCAqIGksIGxlbiApOworICAgICAgICBGVF9NRU1fQ09QWSggYnVmZmVyICsgKEZUX1VJbnQpbmV3X3BpdGNoICogKCB5cGl4ZWxzICsgaSApLAorICAgICAgICAgICAgICAgICAgICAgYml0bWFwLT5idWZmZXIgKyAoRlRfVUludClwaXRjaCAqIGksCisgICAgICAgICAgICAgICAgICAgICBsZW4gKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTIzNiw4ICsyNDcsOSBAQAogCiAKICAgICAgIGZvciAoIGkgPSAwOyBpIDwgYml0bWFwLT5yb3dzOyBpKysgKQotICAgICAgICBGVF9NRU1fQ09QWSggYnVmZmVyICsgbmV3X3BpdGNoICogaSwKLSAgICAgICAgICAgICAgICAgICAgIGJpdG1hcC0+YnVmZmVyICsgcGl0Y2ggKiBpLCBsZW4gKTsKKyAgICAgICAgRlRfTUVNX0NPUFkoIGJ1ZmZlciArIChGVF9VSW50KW5ld19waXRjaCAqIGksCisgICAgICAgICAgICAgICAgICAgICBiaXRtYXAtPmJ1ZmZlciArIChGVF9VSW50KXBpdGNoICogaSwKKyAgICAgICAgICAgICAgICAgICAgIGxlbiApOwogICAgIH0KIAogICAgIEZUX0ZSRUUoIGJpdG1hcC0+YnVmZmVyICk7CkBAIC0yOTUsNyArMzA3LDcgQEAKIAogCiAgICAgICAgIC8qIGNvbnZlcnQgdG8gOGJwcCAqLwotICAgICAgICBGVF9CaXRtYXBfTmV3KCAmdG1wICk7CisgICAgICAgIEZUX0JpdG1hcF9Jbml0KCAmdG1wICk7CiAgICAgICAgIGVycm9yID0gRlRfQml0bWFwX0NvbnZlcnQoIGxpYnJhcnksIGJpdG1hcCwgJnRtcCwgMSApOwogICAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgICByZXR1cm4gZXJyb3I7CkBAIC0zMjMsNyArMzM1LDggQEAKICAgICAgIHJldHVybiBGVF9FcnJfT2s7CiAgICAgfQogCi0gICAgZXJyb3IgPSBmdF9iaXRtYXBfYXNzdXJlX2J1ZmZlciggbGlicmFyeS0+bWVtb3J5LCBiaXRtYXAsIHhzdHIsIHlzdHIgKTsKKyAgICBlcnJvciA9IGZ0X2JpdG1hcF9hc3N1cmVfYnVmZmVyKCBsaWJyYXJ5LT5tZW1vcnksIGJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludCl4c3RyLCAoRlRfVUludCl5c3RyICk7CiAgICAgaWYgKCBlcnJvciApCiAgICAgICByZXR1cm4gZXJyb3I7CiAKQEAgLTMzNCw3ICszNDcsNyBAQAogICAgIGVsc2UKICAgICB7CiAgICAgICBwaXRjaCA9IC1waXRjaDsKLSAgICAgIHAgPSBiaXRtYXAtPmJ1ZmZlciArIHBpdGNoICogKCBiaXRtYXAtPnJvd3MgLSAxICk7CisgICAgICBwID0gYml0bWFwLT5idWZmZXIgKyAoRlRfVUludClwaXRjaCAqICggYml0bWFwLT5yb3dzIC0gMSApOwogICAgIH0KIAogICAgIC8qIGZvciBlYWNoIHJvdyAqLwpAQCAtMzYzLDcgKzM3Niw3IEBACiAgICAgICAgICAgICAgIHBbeF0gfD0gcFt4IC0gMV0gPDwgKCA4IC0gaSApOwogCiAjaWYgMAotICAgICAgICAgICAgaWYgKCBwW3hdID09IDB4ZmYgKQorICAgICAgICAgICAgaWYgKCBwW3hdID09IDB4RkYgKQogICAgICAgICAgICAgICBicmVhazsKICNlbmRpZgogICAgICAgICAgIH0KQEAgLTQwNyw4ICs0MjAsOCBAQAogICAgICAgcCArPSBiaXRtYXAtPnBpdGNoOwogICAgIH0KIAotICAgIGJpdG1hcC0+d2lkdGggKz0geHN0cjsKLSAgICBiaXRtYXAtPnJvd3MgKz0geXN0cjsKKyAgICBiaXRtYXAtPndpZHRoICs9IChGVF9VSW50KXhzdHI7CisgICAgYml0bWFwLT5yb3dzICs9IChGVF9VSW50KXlzdHI7CiAKICAgICByZXR1cm4gRlRfRXJyX09rOwogICB9CkBAIC01MDEsNyArNTE0LDcgQEAKICAgICAgICAgaWYgKCBvbGRfdGFyZ2V0X3BpdGNoIDwgMCApCiAgICAgICAgICAgb2xkX3RhcmdldF9waXRjaCA9IC1vbGRfdGFyZ2V0X3BpdGNoOwogCi0gICAgICAgIG9sZF9zaXplID0gdGFyZ2V0LT5yb3dzICogb2xkX3RhcmdldF9waXRjaDsKKyAgICAgICAgb2xkX3NpemUgPSB0YXJnZXQtPnJvd3MgKiAoRlRfVUludClvbGRfdGFyZ2V0X3BpdGNoOwogCiAgICAgICAgIHRhcmdldC0+cGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfR1JBWTsKICAgICAgICAgdGFyZ2V0LT5yb3dzICAgICAgID0gc291cmNlLT5yb3dzOwpAQCAtNTEwLDIwICs1MjMsMjAgQEAKICAgICAgICAgcGFkID0gMDsKICAgICAgICAgaWYgKCBhbGlnbm1lbnQgPiAwICkKICAgICAgICAgewotICAgICAgICAgIHBhZCA9IHNvdXJjZS0+d2lkdGggJSBhbGlnbm1lbnQ7CisgICAgICAgICAgcGFkID0gKEZUX0ludClzb3VyY2UtPndpZHRoICUgYWxpZ25tZW50OwogICAgICAgICAgIGlmICggcGFkICE9IDAgKQogICAgICAgICAgICAgcGFkID0gYWxpZ25tZW50IC0gcGFkOwogICAgICAgICB9CiAKLSAgICAgICAgdGFyZ2V0X3BpdGNoID0gc291cmNlLT53aWR0aCArIHBhZDsKKyAgICAgICAgdGFyZ2V0X3BpdGNoID0gKEZUX0ludClzb3VyY2UtPndpZHRoICsgcGFkOwogCi0gICAgICAgIGlmICggdGFyZ2V0X3BpdGNoID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgIChGVF9VTG9uZyl0YXJnZXQtPnJvd3MgPiBGVF9VTE9OR19NQVggLyB0YXJnZXRfcGl0Y2ggKQorICAgICAgICBpZiAoIHRhcmdldF9waXRjaCA+IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgKEZUX1VMb25nKXRhcmdldC0+cm93cyA+IEZUX1VMT05HX01BWCAvIChGVF9VTG9uZyl0YXJnZXRfcGl0Y2ggKQogICAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwogCi0gICAgICAgIGlmICggdGFyZ2V0LT5yb3dzICogdGFyZ2V0X3BpdGNoID4gb2xkX3NpemUgICAgICAgICAgICAgICAmJgorICAgICAgICBpZiAoIHRhcmdldC0+cm93cyAqIChGVF9VTG9uZyl0YXJnZXRfcGl0Y2ggPiBvbGRfc2l6ZSAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgICBGVF9RUkVBTExPQyggdGFyZ2V0LT5idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9zaXplLCB0YXJnZXQtPnJvd3MgKiB0YXJnZXRfcGl0Y2ggKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9zaXplLCB0YXJnZXQtPnJvd3MgKiAoRlRfVUludCl0YXJnZXRfcGl0Y2ggKSApCiAgICAgICAgICAgcmV0dXJuIGVycm9yOwogCiAgICAgICAgIHRhcmdldC0+cGl0Y2ggPSB0YXJnZXQtPnBpdGNoIDwgMCA/IC10YXJnZXRfcGl0Y2ggOiB0YXJnZXRfcGl0Y2g7CkBAIC01MzksOSArNTUyLDkgQEAKIAogICAgIC8qIHRha2UgY2FyZSBvZiBiaXRtYXAgZmxvdyAqLwogICAgIGlmICggc291cmNlLT5waXRjaCA8IDAgKQotICAgICAgcyAtPSBzb3VyY2UtPnBpdGNoICogKCBzb3VyY2UtPnJvd3MgLSAxICk7CisgICAgICBzIC09IHNvdXJjZS0+cGl0Y2ggKiAoRlRfSW50KSggc291cmNlLT5yb3dzIC0gMSApOwogICAgIGlmICggdGFyZ2V0LT5waXRjaCA8IDAgKQotICAgICAgdCAtPSB0YXJnZXQtPnBpdGNoICogKCB0YXJnZXQtPnJvd3MgLSAxICk7CisgICAgICB0IC09IHRhcmdldC0+cGl0Y2ggKiAoRlRfSW50KSggdGFyZ2V0LT5yb3dzIC0gMSApOwogCiAgICAgc3dpdGNoICggc291cmNlLT5waXhlbF9tb2RlICkKICAgICB7CkBAIC02MDQsNyArNjE3LDcgQEAKICAgICBjYXNlIEZUX1BJWEVMX01PREVfTENEOgogICAgIGNhc2UgRlRfUElYRUxfTU9ERV9MQ0RfVjoKICAgICAgIHsKLSAgICAgICAgRlRfSW50ICAgd2lkdGggPSBzb3VyY2UtPndpZHRoOworICAgICAgICBGVF9VSW50ICB3aWR0aCA9IHNvdXJjZS0+d2lkdGg7CiAgICAgICAgIEZUX1VJbnQgIGk7CiAKIApAQCAtNzU2LDcgKzc2OSw3IEBACiAgICAgICBGVF9FcnJvciAgIGVycm9yOwogCiAKLSAgICAgIEZUX0JpdG1hcF9OZXcoICZiaXRtYXAgKTsKKyAgICAgIEZUX0JpdG1hcF9Jbml0KCAmYml0bWFwICk7CiAgICAgICBlcnJvciA9IEZUX0JpdG1hcF9Db3B5KCBzbG90LT5saWJyYXJ5LCAmc2xvdC0+Yml0bWFwLCAmYml0bWFwICk7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRjYWxjLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGNhbGMuYwppbmRleCBmM2VmOGM1Li42MTlhMDhiIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGNhbGMuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGNhbGMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBcml0aG1ldGljIGNvbXB1dGF0aW9ucyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA2LCAyMDA4LCAyMDEyLTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtODYsOCArODYsNyBAQAogICBGVF9FWFBPUlRfREVGKCBGVF9GaXhlZCApCiAgIEZUX1JvdW5kRml4KCBGVF9GaXhlZCAgYSApCiAgIHsKLSAgICByZXR1cm4gKCBhID49IDAgKSA/ICAgKCBhICsgMHg4MDAwTCApICYgfjB4RkZGRkwKLSAgICAgICAgICAgICAgICAgICAgICA6IC0oKC1hICsgMHg4MDAwTCApICYgfjB4RkZGRkwgKTsKKyAgICByZXR1cm4gKCBhICsgMHg4MDAwTCAtICggYSA8IDAgKSApICYgfjB4RkZGRkw7CiAgIH0KIAogCkBAIC05Niw4ICs5NSw3IEBACiAgIEZUX0VYUE9SVF9ERUYoIEZUX0ZpeGVkICkKICAgRlRfQ2VpbEZpeCggRlRfRml4ZWQgIGEgKQogICB7Ci0gICAgcmV0dXJuICggYSA+PSAwICkgPyAgICggYSArIDB4RkZGRkwgKSAmIH4weEZGRkZMCi0gICAgICAgICAgICAgICAgICAgICAgOiAtKCgtYSArIDB4RkZGRkwgKSAmIH4weEZGRkZMICk7CisgICAgcmV0dXJuICggYSArIDB4RkZGRkwgKSAmIH4weEZGRkZMOwogICB9CiAKIApAQCAtMTA2LDggKzEwNCw3IEBACiAgIEZUX0VYUE9SVF9ERUYoIEZUX0ZpeGVkICkKICAgRlRfRmxvb3JGaXgoIEZUX0ZpeGVkICBhICkKICAgewotICAgIHJldHVybiAoIGEgPj0gMCApID8gICBhICYgfjB4RkZGRkwKLSAgICAgICAgICAgICAgICAgICAgICA6IC0oKC1hKSAmIH4weEZGRkZMICk7CisgICAgcmV0dXJuIGEgJiB+MHhGRkZGTDsKICAgfQogCiAjaWZuZGVmIEZUX01TQgpAQCAtMTE1LDMwICsxMTIsMzEgQEAKICAgRlRfQkFTRV9ERUYgKCBGVF9JbnQgKQogICBGVF9NU0IoIEZUX1VJbnQzMiB6ICkKICAgewotICAgIEZUX0ludCBzaGlmdCA9IDA7CisgICAgRlRfSW50ICBzaGlmdCA9IDA7CisKIAogICAgIC8qIGRldGVybWluZSBtc2IgYml0IGluZGV4IGluIGBzaGlmdCcgKi8KLSAgICBpZiAoIHogJiAweEZGRkYwMDAwVSApCisgICAgaWYgKCB6ICYgMHhGRkZGMDAwMFVMICkKICAgICB7CiAgICAgICB6ICAgICA+Pj0gMTY7CiAgICAgICBzaGlmdCAgKz0gMTY7CiAgICAgfQotICAgIGlmICggeiAmIDB4MDAwMEZGMDBVICkKKyAgICBpZiAoIHogJiAweDAwMDBGRjAwVUwgKQogICAgIHsKICAgICAgIHogICAgID4+PSA4OwogICAgICAgc2hpZnQgICs9IDg7CiAgICAgfQotICAgIGlmICggeiAmIDB4MDAwMDAwRjBVICkKKyAgICBpZiAoIHogJiAweDAwMDAwMEYwVUwgKQogICAgIHsKICAgICAgIHogICAgID4+PSA0OwogICAgICAgc2hpZnQgICs9IDQ7CiAgICAgfQotICAgIGlmICggeiAmIDB4MDAwMDAwMENVICkKKyAgICBpZiAoIHogJiAweDAwMDAwMDBDVUwgKQogICAgIHsKICAgICAgIHogICAgID4+PSAyOwogICAgICAgc2hpZnQgICs9IDI7CiAgICAgfQotICAgIGlmICggeiAmIDB4MDAwMDAwMDJVICkKKyAgICBpZiAoIHogJiAweDAwMDAwMDAyVUwgKQogICAgIHsKICAgIC8qIHogICAgID4+PSAxOyAqLwogICAgICAgc2hpZnQgICs9IDE7CkBAIC0xNzIsNjkgKzE3MCw3NyBAQAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZyZWV0eXBlLmggKi8KIAogICBGVF9FWFBPUlRfREVGKCBGVF9Mb25nICkKLSAgRlRfTXVsRGl2KCBGVF9Mb25nICBhLAotICAgICAgICAgICAgIEZUX0xvbmcgIGIsCi0gICAgICAgICAgICAgRlRfTG9uZyAgYyApCisgIEZUX011bERpdiggRlRfTG9uZyAgYV8sCisgICAgICAgICAgICAgRlRfTG9uZyAgYl8sCisgICAgICAgICAgICAgRlRfTG9uZyAgY18gKQogICB7Ci0gICAgRlRfSW50ICAgcyA9IDE7Ci0gICAgRlRfTG9uZyAgZDsKKyAgICBGVF9JbnQgICAgIHMgPSAxOworICAgIEZUX1VJbnQ2NCAgYSwgYiwgYywgZDsKKyAgICBGVF9Mb25nICAgIGRfOwogCiAKLSAgICBGVF9NT1ZFX1NJR04oIGEsIHMgKTsKLSAgICBGVF9NT1ZFX1NJR04oIGIsIHMgKTsKLSAgICBGVF9NT1ZFX1NJR04oIGMsIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGFfLCBzICk7CisgICAgRlRfTU9WRV9TSUdOKCBiXywgcyApOworICAgIEZUX01PVkVfU0lHTiggY18sIHMgKTsKIAotICAgIGQgPSAoRlRfTG9uZykoIGMgPiAwID8gKCAoRlRfSW50NjQpYSAqIGIgKyAoIGMgPj4gMSApICkgLyBjCi0gICAgICAgICAgICAgICAgICAgICAgICAgOiAweDdGRkZGRkZGTCApOworICAgIGEgPSAoRlRfVUludDY0KWFfOworICAgIGIgPSAoRlRfVUludDY0KWJfOworICAgIGMgPSAoRlRfVUludDY0KWNfOwogCi0gICAgcmV0dXJuICggcyA+IDAgKSA/IGQgOiAtZDsKKyAgICBkID0gYyA+IDAgPyAoIGEgKiBiICsgKCBjID4+IDEgKSApIC8gYworICAgICAgICAgICAgICA6IDB4N0ZGRkZGRkZVTDsKKworICAgIGRfID0gKEZUX0xvbmcpZDsKKworICAgIHJldHVybiBzIDwgMCA/IC1kXyA6IGRfOwogICB9CiAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FsYy5oICovCiAKICAgRlRfQkFTRV9ERUYoIEZUX0xvbmcgKQotICBGVF9NdWxEaXZfTm9fUm91bmQoIEZUX0xvbmcgIGEsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgYiwKLSAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICBjICkKKyAgRlRfTXVsRGl2X05vX1JvdW5kKCBGVF9Mb25nICBhXywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICBiXywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICBjXyApCiAgIHsKLSAgICBGVF9JbnQgICBzID0gMTsKLSAgICBGVF9Mb25nICBkOworICAgIEZUX0ludCAgICAgcyA9IDE7CisgICAgRlRfVUludDY0ICBhLCBiLCBjLCBkOworICAgIEZUX0xvbmcgICAgZF87CiAKIAotICAgIEZUX01PVkVfU0lHTiggYSwgcyApOwotICAgIEZUX01PVkVfU0lHTiggYiwgcyApOwotICAgIEZUX01PVkVfU0lHTiggYywgcyApOworICAgIEZUX01PVkVfU0lHTiggYV8sIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGJfLCBzICk7CisgICAgRlRfTU9WRV9TSUdOKCBjXywgcyApOwogCi0gICAgZCA9IChGVF9Mb25nKSggYyA+IDAgPyAoRlRfSW50NjQpYSAqIGIgLyBjCi0gICAgICAgICAgICAgICAgICAgICAgICAgOiAweDdGRkZGRkZGTCApOworICAgIGEgPSAoRlRfVUludDY0KWFfOworICAgIGIgPSAoRlRfVUludDY0KWJfOworICAgIGMgPSAoRlRfVUludDY0KWNfOwogCi0gICAgcmV0dXJuICggcyA+IDAgKSA/IGQgOiAtZDsKKyAgICBkID0gYyA+IDAgPyBhICogYiAvIGMKKyAgICAgICAgICAgICAgOiAweDdGRkZGRkZGVUw7CisKKyAgICBkXyA9IChGVF9Mb25nKWQ7CisKKyAgICByZXR1cm4gcyA8IDAgPyAtZF8gOiBkXzsKICAgfQogCiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCiAKICAgRlRfRVhQT1JUX0RFRiggRlRfTG9uZyApCi0gIEZUX011bEZpeCggRlRfTG9uZyAgYSwKLSAgICAgICAgICAgICBGVF9Mb25nICBiICkKKyAgRlRfTXVsRml4KCBGVF9Mb25nICBhXywKKyAgICAgICAgICAgICBGVF9Mb25nICBiXyApCiAgIHsKICNpZmRlZiBGVF9NVUxGSVhfQVNTRU1CTEVSCiAKLSAgICByZXR1cm4gRlRfTVVMRklYX0FTU0VNQkxFUiggYSwgYiApOworICAgIHJldHVybiBGVF9NVUxGSVhfQVNTRU1CTEVSKCBhXywgYl8gKTsKIAogI2Vsc2UKIAotICAgIEZUX0ludCAgIHMgPSAxOwotICAgIEZUX0xvbmcgIGM7CisgICAgRlRfSW50NjQgIGFiID0gKEZUX0ludDY0KWFfICogKEZUX0ludDY0KWJfOwogCi0KLSAgICBGVF9NT1ZFX1NJR04oIGEsIHMgKTsKLSAgICBGVF9NT1ZFX1NJR04oIGIsIHMgKTsKLQotICAgIGMgPSAoRlRfTG9uZykoICggKEZUX0ludDY0KWEgKiBiICsgMHg4MDAwTCApID4+IDE2ICk7Ci0KLSAgICByZXR1cm4gKCBzID4gMCApID8gYyA6IC1jOworICAgIC8qIHRoaXMgcmVxdWlyZXMgYXJpdGhtZXRpYyByaWdodCBzaGlmdCBvZiBzaWduZWQgbnVtYmVycyAqLworICAgIHJldHVybiAoRlRfTG9uZykoICggYWIgKyAweDgwMDBMIC0gKCBhYiA8IDAgKSApID4+IDE2ICk7CiAKICNlbmRpZiAvKiBGVF9NVUxGSVhfQVNTRU1CTEVSICovCiAgIH0KQEAgLTI0MywyMCArMjQ5LDI2IEBACiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnJlZXR5cGUuaCAqLwogCiAgIEZUX0VYUE9SVF9ERUYoIEZUX0xvbmcgKQotICBGVF9EaXZGaXgoIEZUX0xvbmcgIGEsCi0gICAgICAgICAgICAgRlRfTG9uZyAgYiApCisgIEZUX0RpdkZpeCggRlRfTG9uZyAgYV8sCisgICAgICAgICAgICAgRlRfTG9uZyAgYl8gKQogICB7Ci0gICAgRlRfSW50ICAgcyA9IDE7Ci0gICAgRlRfTG9uZyAgcTsKKyAgICBGVF9JbnQgICAgIHMgPSAxOworICAgIEZUX1VJbnQ2NCAgYSwgYiwgcTsKKyAgICBGVF9Mb25nICAgIHFfOwogCiAKLSAgICBGVF9NT1ZFX1NJR04oIGEsIHMgKTsKLSAgICBGVF9NT1ZFX1NJR04oIGIsIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGFfLCBzICk7CisgICAgRlRfTU9WRV9TSUdOKCBiXywgcyApOwogCi0gICAgcSA9IChGVF9Mb25nKSggYiA+IDAgPyAoICggKEZUX1VJbnQ2NClhIDw8IDE2ICkgKyAoIGIgPj4gMSApICkgLyBiCi0gICAgICAgICAgICAgICAgICAgICAgICAgOiAweDdGRkZGRkZGTCApOworICAgIGEgPSAoRlRfVUludDY0KWFfOworICAgIGIgPSAoRlRfVUludDY0KWJfOwogCi0gICAgcmV0dXJuICggcyA8IDAgPyAtcSA6IHEgKTsKKyAgICBxID0gYiA+IDAgPyAoICggYSA8PCAxNiApICsgKCBiID4+IDEgKSApIC8gYgorICAgICAgICAgICAgICA6IDB4N0ZGRkZGRkZVTDsKKworICAgIHFfID0gKEZUX0xvbmcpcTsKKworICAgIHJldHVybiBzIDwgMCA/IC1xXyA6IHFfOwogICB9CiAKIApAQCAtNDAwLDI2ICs0MTIsMjkgQEAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCiAKICAgRlRfRVhQT1JUX0RFRiggRlRfTG9uZyApCi0gIEZUX011bERpdiggRlRfTG9uZyAgYSwKLSAgICAgICAgICAgICBGVF9Mb25nICBiLAotICAgICAgICAgICAgIEZUX0xvbmcgIGMgKQorICBGVF9NdWxEaXYoIEZUX0xvbmcgIGFfLAorICAgICAgICAgICAgIEZUX0xvbmcgIGJfLAorICAgICAgICAgICAgIEZUX0xvbmcgIGNfICkKICAgewotICAgIEZUX0ludCAgcyA9IDE7CisgICAgRlRfSW50ICAgICBzID0gMTsKKyAgICBGVF9VSW50MzIgIGEsIGIsIGM7CiAKIAogICAgIC8qIFhYWDogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhbGxvdyA2NC1iaXQgYXJndW1lbnRzICovCi0gICAgaWYgKCBhID09IDAgfHwgYiA9PSBjICkKLSAgICAgIHJldHVybiBhOwogCi0gICAgRlRfTU9WRV9TSUdOKCBhLCBzICk7Ci0gICAgRlRfTU9WRV9TSUdOKCBiLCBzICk7Ci0gICAgRlRfTU9WRV9TSUdOKCBjLCBzICk7CisgICAgRlRfTU9WRV9TSUdOKCBhXywgcyApOworICAgIEZUX01PVkVfU0lHTiggYl8sIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGNfLCBzICk7CisKKyAgICBhID0gKEZUX1VJbnQzMilhXzsKKyAgICBiID0gKEZUX1VJbnQzMiliXzsKKyAgICBjID0gKEZUX1VJbnQzMiljXzsKIAogICAgIGlmICggYyA9PSAwICkKLSAgICAgIGEgPSAweDdGRkZGRkZGTDsKKyAgICAgIGEgPSAweDdGRkZGRkZGVUw7CiAKLSAgICBlbHNlIGlmICggKEZUX1VMb25nKWEgKyBiIDw9IDEyOTg5NFVMIC0gKCBjID4+IDE3ICkgKQotICAgICAgYSA9ICggKEZUX1VMb25nKWEgKiBiICsgKCBjID4+IDEgKSApIC8gYzsKKyAgICBlbHNlIGlmICggYSArIGIgPD0gMTI5ODk0VUwgLSAoIGMgPj4gMTcgKSApCisgICAgICBhID0gKCBhICogYiArICggYyA+PiAxICkgKSAvIGM7CiAKICAgICBlbHNlCiAgICAgewpAQCAtNDM4LDMwICs0NTMsMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgOiBmdF9kaXY2NGJ5MzIoIHRlbXAuaGksIHRlbXAubG8sIGMgKTsKICAgICB9CiAKLSAgICByZXR1cm4gKCBzIDwgMCA/IC1hIDogYSApOworICAgIGFfID0gKEZUX0xvbmcpYTsKKworICAgIHJldHVybiBzIDwgMCA/IC1hXyA6IGFfOwogICB9CiAKIAogICBGVF9CQVNFX0RFRiggRlRfTG9uZyApCi0gIEZUX011bERpdl9Ob19Sb3VuZCggRlRfTG9uZyAgYSwKLSAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICBiLAotICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgIGMgKQorICBGVF9NdWxEaXZfTm9fUm91bmQoIEZUX0xvbmcgIGFfLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgIGJfLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgIGNfICkKICAgewotICAgIEZUX0ludCAgcyA9IDE7CisgICAgRlRfSW50ICAgICBzID0gMTsKKyAgICBGVF9VSW50MzIgIGEsIGIsIGM7CiAKIAotICAgIGlmICggYSA9PSAwIHx8IGIgPT0gYyApCi0gICAgICByZXR1cm4gYTsKKyAgICAvKiBYWFg6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWxsb3cgNjQtYml0IGFyZ3VtZW50cyAqLwogCi0gICAgRlRfTU9WRV9TSUdOKCBhLCBzICk7Ci0gICAgRlRfTU9WRV9TSUdOKCBiLCBzICk7Ci0gICAgRlRfTU9WRV9TSUdOKCBjLCBzICk7CisgICAgRlRfTU9WRV9TSUdOKCBhXywgcyApOworICAgIEZUX01PVkVfU0lHTiggYl8sIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGNfLCBzICk7CisKKyAgICBhID0gKEZUX1VJbnQzMilhXzsKKyAgICBiID0gKEZUX1VJbnQzMiliXzsKKyAgICBjID0gKEZUX1VJbnQzMiljXzsKIAogICAgIGlmICggYyA9PSAwICkKLSAgICAgIGEgPSAweDdGRkZGRkZGTDsKKyAgICAgIGEgPSAweDdGRkZGRkZGVUw7CiAKLSAgICBlbHNlIGlmICggKEZUX1VMb25nKWEgKyBiIDw9IDEzMTA3MVVMICkKLSAgICAgIGEgPSAoRlRfVUxvbmcpYSAqIGIgLyBjOworICAgIGVsc2UgaWYgKCBhICsgYiA8PSAxMzEwNzFVTCApCisgICAgICBhID0gYSAqIGIgLyBjOwogCiAgICAgZWxzZQogICAgIHsKQEAgLTQ3NSwxOSArNDk2LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgIDogZnRfZGl2NjRieTMyKCB0ZW1wLmhpLCB0ZW1wLmxvLCBjICk7CiAgICAgfQogCi0gICAgcmV0dXJuICggcyA8IDAgPyAtYSA6IGEgKTsKKyAgICBhXyA9IChGVF9Mb25nKWE7CisKKyAgICByZXR1cm4gcyA8IDAgPyAtYV8gOiBhXzsKICAgfQogCiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCiAKICAgRlRfRVhQT1JUX0RFRiggRlRfTG9uZyApCi0gIEZUX011bEZpeCggRlRfTG9uZyAgYSwKLSAgICAgICAgICAgICBGVF9Mb25nICBiICkKKyAgRlRfTXVsRml4KCBGVF9Mb25nICBhXywKKyAgICAgICAgICAgICBGVF9Mb25nICBiXyApCiAgIHsKICNpZmRlZiBGVF9NVUxGSVhfQVNTRU1CTEVSCiAKLSAgICByZXR1cm4gRlRfTVVMRklYX0FTU0VNQkxFUiggYSwgYiApOworICAgIHJldHVybiBGVF9NVUxGSVhfQVNTRU1CTEVSKCBhXywgYl8gKTsKIAogI2VsaWYgMAogCkBAIC00OTgsMTMgKzUyMSwxMCBAQAogICAgICAqICB0aGUgbGVmdG1vc3QgYml0cyBieSBjb3B5aW5nIHRoZSBzaWduIGJpdCwgaXQgbWlnaHQgYmUgZmFzdGVyLgogICAgICAqLwogCi0gICAgRlRfTG9uZyAgIHNhLCBzYjsKLSAgICBGVF9VTG9uZyAgdWEsIHViOworICAgIEZUX0xvbmcgICAgc2EsIHNiOworICAgIEZUX1VJbnQzMiAgYSwgYjsKIAogCi0gICAgaWYgKCBhID09IDAgfHwgYiA9PSAweDEwMDAwTCApCi0gICAgICByZXR1cm4gYTsKLQogICAgIC8qCiAgICAgICogIFRoaXMgaXMgYSBjbGV2ZXIgd2F5IG9mIGNvbnZlcnRpbmcgYSBzaWduZWQgbnVtYmVyIGBhJyBpbnRvIGl0cwogICAgICAqICBhYnNvbHV0ZSB2YWx1ZSAoc3RvcmVkIGJhY2sgaW50byBgYScpIGFuZCBpdHMgc2lnbi4gIFRoZSBzaWduIGlzCkBAIC01MjMsNTcgKzU0Myw1OCBAQAogICAgICAqICB3aXRoIHRoZSB2YWx1ZSAxIHJhdGhlciB0aGFuIC0xLiAgQWZ0ZXIgdGhhdCwgZXZlcnl0aGluZyBlbHNlIGdvZXMKICAgICAgKiAgd3JvbmcuCiAgICAgICovCi0gICAgc2EgPSAoIGEgPj4gKCBzaXplb2YgKCBhICkgKiA4IC0gMSApICk7Ci0gICAgYSAgPSAoIGEgXiBzYSApIC0gc2E7Ci0gICAgc2IgPSAoIGIgPj4gKCBzaXplb2YgKCBiICkgKiA4IC0gMSApICk7Ci0gICAgYiAgPSAoIGIgXiBzYiApIC0gc2I7CisgICAgc2EgPSAoIGFfID4+ICggc2l6ZW9mICggYV8gKSAqIDggLSAxICkgKTsKKyAgICBhICA9ICggYV8gXiBzYSApIC0gc2E7CisgICAgc2IgPSAoIGJfID4+ICggc2l6ZW9mICggYl8gKSAqIDggLSAxICkgKTsKKyAgICBiICA9ICggYl8gXiBzYiApIC0gc2I7CiAKLSAgICB1YSA9IChGVF9VTG9uZylhOwotICAgIHViID0gKEZUX1VMb25nKWI7CisgICAgYSA9IChGVF9VSW50MzIpYV87CisgICAgYiA9IChGVF9VSW50MzIpYl87CiAKLSAgICBpZiAoIHVhICsgKCB1YiA+PiA4ICkgPD0gODE5MFVMICkKLSAgICAgIHVhID0gKCB1YSAqIHViICsgMHg4MDAwVSApID4+IDE2OworICAgIGlmICggYSArICggYiA+PiA4ICkgPD0gODE5MFVMICkKKyAgICAgIGEgPSAoIGEgKiBiICsgMHg4MDAwVSApID4+IDE2OwogICAgIGVsc2UKICAgICB7Ci0gICAgICBGVF9VTG9uZyAgYWwgPSB1YSAmIDB4RkZGRlU7CisgICAgICBGVF9VSW50MzIgIGFsID0gYSAmIDB4RkZGRlVMOwogCiAKLSAgICAgIHVhID0gKCB1YSA+PiAxNiApICogdWIgKyAgYWwgKiAoIHViID4+IDE2ICkgKwotICAgICAgICAgICAoICggYWwgKiAoIHViICYgMHhGRkZGVSApICsgMHg4MDAwVSApID4+IDE2ICk7CisgICAgICBhID0gKCBhID4+IDE2ICkgKiBiICsgYWwgKiAoIGIgPj4gMTYgKSArCisgICAgICAgICAgKCAoIGFsICogKCBiICYgMHhGRkZGVUwgKSArIDB4ODAwMFVMICkgPj4gMTYgKTsKICAgICB9CiAKLSAgICBzYSBePSBzYiwKLSAgICB1YSAgPSAoRlRfVUxvbmcpKCggdWEgXiBzYSApIC0gc2EpOworICAgIHNhIF49IHNiOworICAgIGEgICA9ICggYSBeIHNhICkgLSBzYTsKIAotICAgIHJldHVybiAoRlRfTG9uZyl1YTsKKyAgICByZXR1cm4gKEZUX0xvbmcpYTsKIAogI2Vsc2UgLyogMCAqLwogCi0gICAgRlRfSW50ICAgIHMgPSAxOwotICAgIEZUX1VMb25nICB1YSwgdWI7CisgICAgRlRfSW50ICAgICBzID0gMTsKKyAgICBGVF9VSW50MzIgIGEsIGI7CiAKIAotICAgIGlmICggYSA9PSAwIHx8IGIgPT0gMHgxMDAwMEwgKQotICAgICAgcmV0dXJuIGE7CisgICAgLyogWFhYOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFsbG93IDY0LWJpdCBhcmd1bWVudHMgKi8KIAotICAgIEZUX01PVkVfU0lHTiggYSwgcyApOwotICAgIEZUX01PVkVfU0lHTiggYiwgcyApOworICAgIEZUX01PVkVfU0lHTiggYV8sIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGJfLCBzICk7CiAKLSAgICB1YSA9IChGVF9VTG9uZylhOwotICAgIHViID0gKEZUX1VMb25nKWI7CisgICAgYSA9IChGVF9VSW50MzIpYV87CisgICAgYiA9IChGVF9VSW50MzIpYl87CiAKLSAgICBpZiAoIHVhICsgKCB1YiA+PiA4ICkgPD0gODE5MFVMICkKLSAgICAgIHVhID0gKCB1YSAqIHViICsgMHg4MDAwVUwgKSA+PiAxNjsKKyAgICBpZiAoIGEgKyAoIGIgPj4gOCApIDw9IDgxOTBVTCApCisgICAgICBhID0gKCBhICogYiArIDB4ODAwMFVMICkgPj4gMTY7CiAgICAgZWxzZQogICAgIHsKLSAgICAgIEZUX1VMb25nICBhbCA9IHVhICYgMHhGRkZGVUw7CisgICAgICBGVF9VSW50MzIgIGFsID0gYSAmIDB4RkZGRlVMOwogCiAKLSAgICAgIHVhID0gKCB1YSA+PiAxNiApICogdWIgKyAgYWwgKiAoIHViID4+IDE2ICkgKwotICAgICAgICAgICAoICggYWwgKiAoIHViICYgMHhGRkZGVUwgKSArIDB4ODAwMFVMICkgPj4gMTYgKTsKKyAgICAgIGEgPSAoIGEgPj4gMTYgKSAqIGIgKyBhbCAqICggYiA+PiAxNiApICsKKyAgICAgICAgICAoICggYWwgKiAoIGIgJiAweEZGRkZVTCApICsgMHg4MDAwVUwgKSA+PiAxNiApOwogICAgIH0KIAotICAgIHJldHVybiAoIHMgPCAwID8gLShGVF9Mb25nKXVhIDogKEZUX0xvbmcpdWEgKTsKKyAgICBhXyA9IChGVF9Mb25nKWE7CisKKyAgICByZXR1cm4gcyA8IDAgPyAtYV8gOiBhXzsKIAogI2VuZGlmIC8qIDAgKi8KIApAQCAtNTgzLDI3ICs2MDQsMzEgQEAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCiAKICAgRlRfRVhQT1JUX0RFRiggRlRfTG9uZyApCi0gIEZUX0RpdkZpeCggRlRfTG9uZyAgYSwKLSAgICAgICAgICAgICBGVF9Mb25nICBiICkKKyAgRlRfRGl2Rml4KCBGVF9Mb25nICBhXywKKyAgICAgICAgICAgICBGVF9Mb25nICBiXyApCiAgIHsKLSAgICBGVF9JbnQgICBzID0gMTsKLSAgICBGVF9Mb25nICBxOworICAgIEZUX0ludCAgICAgcyA9IDE7CisgICAgRlRfVUludDMyICBhLCBiLCBxOworICAgIEZUX0xvbmcgICAgcV87CiAKIAogICAgIC8qIFhYWDogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhbGxvdyA2NC1iaXQgYXJndW1lbnRzICovCiAKLSAgICBGVF9NT1ZFX1NJR04oIGEsIHMgKTsKLSAgICBGVF9NT1ZFX1NJR04oIGIsIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGFfLCBzICk7CisgICAgRlRfTU9WRV9TSUdOKCBiXywgcyApOworCisgICAgYSA9IChGVF9VSW50MzIpYV87CisgICAgYiA9IChGVF9VSW50MzIpYl87CiAKICAgICBpZiAoIGIgPT0gMCApCiAgICAgewogICAgICAgLyogY2hlY2sgZm9yIGRpdmlzaW9uIGJ5IDAgKi8KLSAgICAgIHEgPSAweDdGRkZGRkZGTDsKKyAgICAgIHEgPSAweDdGRkZGRkZGVUw7CiAgICAgfQotICAgIGVsc2UgaWYgKCBhIDw9IDY1NTM1TCAtICggYiA+PiAxNyApICkKKyAgICBlbHNlIGlmICggYSA8PSA2NTUzNVVMIC0gKCBiID4+IDE3ICkgKQogICAgIHsKICAgICAgIC8qIGNvbXB1dGUgcmVzdWx0IGRpcmVjdGx5ICovCi0gICAgICBxID0gKEZUX0xvbmcpKCAoICggKEZUX1VMb25nKWEgPDwgMTYgKSArICggYiA+PiAxICkgKSAvIGIgKTsKKyAgICAgIHEgPSAoICggYSA8PCAxNiApICsgKCBiID4+IDEgKSApIC8gYjsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTYxNywxNCArNjQyLDE2IEBACiAgICAgICB0ZW1wMi5sbyA9IGIgPj4gMTsKIAogICAgICAgRlRfQWRkNjQoICZ0ZW1wLCAmdGVtcDIsICZ0ZW1wICk7Ci0gICAgICBxID0gKEZUX0xvbmcpZnRfZGl2NjRieTMyKCB0ZW1wLmhpLCB0ZW1wLmxvLCBiICk7CisgICAgICBxID0gZnRfZGl2NjRieTMyKCB0ZW1wLmhpLCB0ZW1wLmxvLCBiICk7CiAgICAgfQogCi0gICAgcmV0dXJuICggcyA8IDAgPyAtcSA6IHEgKTsKKyAgICBxXyA9IChGVF9Mb25nKXE7CisKKyAgICByZXR1cm4gcyA8IDAgPyAtcV8gOiBxXzsKICAgfQogCiAKLSNlbmRpZiAvKiBGVF9MT05HNjQgKi8KKyNlbmRpZiAvKiAhRlRfTE9ORzY0ICovCiAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Z2x5cGguaCAqLwpAQCAtNzMxLDYgKzc1OCwxMDIgQEAKICAgfQogCiAKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGNhbGMuaCAqLworCisgIEZUX0JBU0VfREVGKCBGVF9VSW50MzIgKQorICBGVF9WZWN0b3JfTm9ybUxlbiggRlRfVmVjdG9yKiAgdmVjdG9yICkKKyAgeworICAgIEZUX0ludDMyICAgeF8gPSB2ZWN0b3ItPng7CisgICAgRlRfSW50MzIgICB5XyA9IHZlY3Rvci0+eTsKKyAgICBGVF9JbnQzMiAgIGIsIHo7CisgICAgRlRfVUludDMyICB4LCB5LCB1LCB2LCBsOworICAgIEZUX0ludCAgICAgc3ggPSAxLCBzeSA9IDEsIHNoaWZ0OworCisKKyAgICBGVF9NT1ZFX1NJR04oIHhfLCBzeCApOworICAgIEZUX01PVkVfU0lHTiggeV8sIHN5ICk7CisKKyAgICB4ID0gKEZUX1VJbnQzMil4XzsKKyAgICB5ID0gKEZUX1VJbnQzMil5XzsKKworICAgIC8qIHRyaXZpYWwgY2FzZXMgKi8KKyAgICBpZiAoIHggPT0gMCApCisgICAgeworICAgICAgaWYgKCB5ID4gMCApCisgICAgICAgIHZlY3Rvci0+eSA9IHN5ICogMHgxMDAwMDsKKyAgICAgIHJldHVybiB5OworICAgIH0KKyAgICBlbHNlIGlmICggeSA9PSAwICkKKyAgICB7CisgICAgICBpZiAoIHggPiAwICkKKyAgICAgICAgdmVjdG9yLT54ID0gc3ggKiAweDEwMDAwOworICAgICAgcmV0dXJuIHg7CisgICAgfQorCisgICAgLyogRXN0aW1hdGUgbGVuZ3RoIGFuZCBwcmVub3JtYWxpemUgYnkgc2hpZnRpbmcgc28gdGhhdCAqLworICAgIC8qIHRoZSBuZXcgYXBwcm94aW1hdGUgbGVuZ3RoIGlzIGJldHdlZW4gMi8zIGFuZCA0LzMuICAgKi8KKyAgICAvKiBUaGUgbWFnaWMgY29uc3RhbnQgMHhBQUFBQUFBQVVMICgyLzMgb2YgMl4zMikgaGVscHMgICovCisgICAgLyogYWNoaWV2ZSB0aGlzIGluIDE2LjE2IGZpeGVkLXBvaW50IHJlcHJlc2VudGF0aW9uLiAgICAqLworICAgIGwgPSB4ID4geSA/IHggKyAoIHkgPj4gMSApCisgICAgICAgICAgICAgIDogeSArICggeCA+PiAxICk7CisKKyAgICBzaGlmdCAgPSAzMSAtIEZUX01TQiggbCApOworICAgIHNoaWZ0IC09IDE1ICsgKCBsID49ICggMHhBQUFBQUFBQVVMID4+IHNoaWZ0ICkgKTsKKworICAgIGlmICggc2hpZnQgPiAwICkKKyAgICB7CisgICAgICB4IDw8PSBzaGlmdDsKKyAgICAgIHkgPDw9IHNoaWZ0OworCisgICAgICAvKiByZS1lc3RpbWF0ZSBsZW5ndGggZm9yIHRpbnkgdmVjdG9ycyAqLworICAgICAgbCA9IHggPiB5ID8geCArICggeSA+PiAxICkKKyAgICAgICAgICAgICAgICA6IHkgKyAoIHggPj4gMSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgeCA+Pj0gLXNoaWZ0OworICAgICAgeSA+Pj0gLXNoaWZ0OworICAgICAgbCA+Pj0gLXNoaWZ0OworICAgIH0KKworICAgIC8qIGxvd2VyIGxpbmVhciBhcHByb3hpbWF0aW9uIGZvciByZWNpcHJvY2FsIGxlbmd0aCBtaW51cyBvbmUgKi8KKyAgICBiID0gMHgxMDAwMCAtIChGVF9JbnQzMilsOworCisgICAgeF8gPSAoRlRfSW50MzIpeDsKKyAgICB5XyA9IChGVF9JbnQzMil5OworCisgICAgLyogTmV3dG9uJ3MgaXRlcmF0aW9ucyAqLworICAgIGRvCisgICAgeworICAgICAgdSA9IChGVF9VSW50MzIpKCB4XyArICggeF8gKiBiID4+IDE2ICkgKTsKKyAgICAgIHYgPSAoRlRfVUludDMyKSggeV8gKyAoIHlfICogYiA+PiAxNiApICk7CisKKyAgICAgIC8qIE5vcm1hbGl6ZWQgc3F1YXJlZCBsZW5ndGggaW4gdGhlIHBhcmVudGhlc2VzIGFwcHJvYWNoZXMgMl4zMi4gKi8KKyAgICAgIC8qIE9uIHR3bydzIGNvbXBsZW1lbnQgc3lzdGVtcywgY29udmVydGluZyB0byBzaWduZWQgZ2l2ZXMgdGhlICAgKi8KKyAgICAgIC8qIGRpZmZlcmVuY2Ugd2l0aCAyXjMyIGV2ZW4gaWYgdGhlIGV4cHJlc3Npb24gd3JhcHMgYXJvdW5kLiAgICAgKi8KKyAgICAgIHogPSAtKEZUX0ludDMyKSggdSAqIHUgKyB2ICogdiApIC8gMHgyMDA7CisgICAgICB6ID0geiAqICggKCAweDEwMDAwICsgYiApID4+IDggKSAvIDB4MTAwMDA7CisKKyAgICAgIGIgKz0gejsKKworICAgIH0gd2hpbGUgKCB6ID4gMCApOworCisgICAgdmVjdG9yLT54ID0gc3ggPCAwID8gLShGVF9Qb3MpdSA6IChGVF9Qb3MpdTsKKyAgICB2ZWN0b3ItPnkgPSBzeSA8IDAgPyAtKEZUX1Bvcyl2IDogKEZUX1Bvcyl2OworCisgICAgLyogQ29udmVyc2lvbiB0byBzaWduZWQgaGVscHMgdG8gcmVjb3ZlciBmcm9tIGxpa2VseSB3cmFwIGFyb3VuZCAqLworICAgIC8qIGluIGNhbGN1bGF0aW5nIHRoZSBwcmVub3JtYWxpemVkIGxlbmd0aCwgYmVjYXVzZSBpdCBnaXZlcyB0aGUgKi8KKyAgICAvKiBjb3JyZWN0IGRpZmZlcmVuY2Ugd2l0aCAyXjMyIG9uIHR3bydzIGNvbXBsZW1lbnQgc3lzdGVtcy4gICAgICovCisgICAgbCA9IChGVF9VSW50MzIpKCAweDEwMDAwICsgKEZUX0ludDMyKSggdSAqIHggKyB2ICogeSApIC8gMHgxMDAwMCApOworICAgIGlmICggc2hpZnQgPiAwICkKKyAgICAgIGwgPSAoIGwgKyAoIDEgPDwgKCBzaGlmdCAtIDEgKSApICkgPj4gc2hpZnQ7CisgICAgZWxzZQorICAgICAgbCA8PD0gLXNoaWZ0OworCisgICAgcmV0dXJuIGw7CisgIH0KKworCiAjaWYgMAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWxjLmggKi8KQEAgLTc0Nyw3ICs4NzAsNyBAQAogICAgIGlmICggeCA+IDAgKQogICAgIHsKICAgICAgIHJlbV9oaSA9IDA7Ci0gICAgICByZW1fbG8gPSB4OworICAgICAgcmVtX2xvID0gKEZUX1VJbnQzMil4OwogICAgICAgY291bnQgID0gMjQ7CiAgICAgICBkbwogICAgICAgewpAQCAtNzc4LDU4ICs5MDEsNDAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIG91dF94LAogICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgb3V0X3kgKQogICB7Ci0gICAgRlRfTG9uZyAgcmVzdWx0OyAvKiBhdm9pZCBvdmVyZmxvdyBvbiAxNi1iaXQgc3lzdGVtICovCi0KLQotICAgIC8qIGRlYWwgd2l0aCB0aGUgdHJpdmlhbCBjYXNlcyBxdWlja2x5ICovCi0gICAgaWYgKCBpbl95ID09IDAgKQotICAgIHsKLSAgICAgIGlmICggaW5feCA+PSAwICkKLSAgICAgICAgcmVzdWx0ID0gb3V0X3k7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IC1vdXRfeTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoIGluX3ggPT0gMCApCi0gICAgewotICAgICAgaWYgKCBpbl95ID49IDAgKQotICAgICAgICByZXN1bHQgPSAtb3V0X3g7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IG91dF94OwotICAgIH0KLSAgICBlbHNlIGlmICggb3V0X3kgPT0gMCApCi0gICAgewotICAgICAgaWYgKCBvdXRfeCA+PSAwICkKLSAgICAgICAgcmVzdWx0ID0gaW5feTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gLWluX3k7Ci0gICAgfQotICAgIGVsc2UgaWYgKCBvdXRfeCA9PSAwICkKLSAgICB7Ci0gICAgICBpZiAoIG91dF95ID49IDAgKQotICAgICAgICByZXN1bHQgPSAtaW5feDsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gIGluX3g7Ci0gICAgfQotICAgIGVsc2UgLyogZ2VuZXJhbCBjYXNlICovCi0gICAgewogI2lmZGVmIEZUX0xPTkc2NAogCi0gICAgICBGVF9JbnQ2NCAgZGVsdGEgPSAoRlRfSW50NjQpaW5feCAqIG91dF95IC0gKEZUX0ludDY0KWluX3kgKiBvdXRfeDsKKyAgICBGVF9JbnQ2NCAgZGVsdGEgPSAoRlRfSW50NjQpaW5feCAqIG91dF95IC0gKEZUX0ludDY0KWluX3kgKiBvdXRfeDsKIAogCi0gICAgICBpZiAoIGRlbHRhID09IDAgKQotICAgICAgICByZXN1bHQgPSAwOwotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSAxIC0gMiAqICggZGVsdGEgPCAwICk7CisgICAgcmV0dXJuICggZGVsdGEgPiAwICkgLSAoIGRlbHRhIDwgMCApOwogCiAjZWxzZQogCisgICAgRlRfSW50ICByZXN1bHQ7CisKKworICAgIGlmICggKEZUX1VMb25nKUZUX0FCUyggaW5feCApICsgKEZUX1VMb25nKUZUX0FCUyggb3V0X3kgKSA8PSAxMzEwNzFVTCAmJgorICAgICAgICAgKEZUX1VMb25nKUZUX0FCUyggaW5feSApICsgKEZUX1VMb25nKUZUX0FCUyggb3V0X3ggKSA8PSAxMzEwNzFVTCApCisgICAgeworICAgICAgRlRfTG9uZyAgejEgPSBpbl94ICogb3V0X3k7CisgICAgICBGVF9Mb25nICB6MiA9IGluX3kgKiBvdXRfeDsKKworCisgICAgICBpZiAoIHoxID4gejIgKQorICAgICAgICByZXN1bHQgPSArMTsKKyAgICAgIGVsc2UgaWYgKCB6MSA8IHoyICkKKyAgICAgICAgcmVzdWx0ID0gLTE7CisgICAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IDA7CisgICAgfQorICAgIGVsc2UgLyogcHJvZHVjdHMgbWlnaHQgb3ZlcmZsb3cgMzIgYml0cyAqLworICAgIHsKICAgICAgIEZUX0ludDY0ICB6MSwgejI7CiAKIAogICAgICAgLyogWFhYOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFsbG93IDY0LWJpdCBhcmd1bWVudHMgKi8KLSAgICAgIGZ0X211bHRvNjQoIChGVF9JbnQzMilpbl94LCAoRlRfSW50MzIpb3V0X3ksICZ6MSApOwotICAgICAgZnRfbXVsdG82NCggKEZUX0ludDMyKWluX3ksIChGVF9JbnQzMilvdXRfeCwgJnoyICk7CisgICAgICBmdF9tdWx0bzY0KCAoRlRfVUludDMyKWluX3gsIChGVF9VSW50MzIpb3V0X3ksICZ6MSApOworICAgICAgZnRfbXVsdG82NCggKEZUX1VJbnQzMilpbl95LCAoRlRfVUludDMyKW91dF94LCAmejIgKTsKIAogICAgICAgaWYgKCB6MS5oaSA+IHoyLmhpICkKICAgICAgICAgcmVzdWx0ID0gKzE7CkBAIC04NDEsMTIgKzk0NiwxMiBAQAogICAgICAgICByZXN1bHQgPSAtMTsKICAgICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gMDsKLQotI2VuZGlmCiAgICAgfQogCiAgICAgLyogWFhYOiBvbmx5IHRoZSBzaWduIG9mIHJldHVybiB2YWx1ZSwgKzEvMC8tMSBtdXN0IGJlIHVzZWQgKi8KLSAgICByZXR1cm4gKEZUX0ludClyZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKKworI2VuZGlmCiAgIH0KIAogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGNpZC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRjaWQuYwppbmRleCA3NDE4NzlkLi4wNzM0ODgxIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGNpZC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0Y2lkLmMKQEAgLTQsNyArNCw4IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgQ0lEIGZvbnQgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDcsIDIwMDksIDIwMTMgYnkgRGVyZWsgQ2xlZ2csIE1pY2hhZWwgVG9mdGRhbC4gICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEZXJlayBDbGVnZyBhbmQgTWljaGFlbCBUb2Z0ZGFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KIC8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGRiZ21lbS5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRkYmdtZW0uYwppbmRleCA2ZmI4NmZlLi42ZjIwMzEzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGRiZ21lbS5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0ZGJnbWVtLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgTWVtb3J5IGRlYnVnZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAwNiwgMjAwOSwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTM1LDcgKzM1LDcgQEAKIAogI2luY2x1ZGUgRlRfQ09ORklHX1NUQU5EQVJEX0xJQlJBUllfSAogCi0gIEZUX0JBU0VfREVGKCBjb25zdCBjaGFyKiApICBfZnRfZGVidWdfZmlsZSAgID0gMDsKKyAgRlRfQkFTRV9ERUYoIGNvbnN0IGNoYXIqICkgIF9mdF9kZWJ1Z19maWxlICAgPSBOVUxMOwogICBGVF9CQVNFX0RFRiggbG9uZyApICAgICAgICAgX2Z0X2RlYnVnX2xpbmVubyA9IDA7CiAKICAgZXh0ZXJuIHZvaWQKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgdHlwZWRlZiBzdHJ1Y3QgRlRfTWVtVGFibGVSZWNfKiAgIEZUX01lbVRhYmxlOwogCiAKLSNkZWZpbmUgRlRfTUVNX1ZBTCggYWRkciApICAoKEZUX1B0ckRpc3QpKEZUX1BvaW50ZXIpKCBhZGRyICkpCisjZGVmaW5lIEZUX01FTV9WQUwoIGFkZHIgKSAgKCAoRlRfUHRyRGlzdCkoRlRfUG9pbnRlcikoIGFkZHIgKSApCiAKICAgLyoKICAgICogIFRoaXMgc3RydWN0dXJlIGhvbGRzIHN0YXRpc3RpY3MgZm9yIGEgc2luZ2xlIGFsbG9jYXRpb24vcmVsZWFzZQpAQCAtNzYsNyArNzYsNyBAQAogCiAKICAgLyoKLSAgICogIFdlIGRvbid0IG5lZWQgYSByZXNpemFibGUgYXJyYXkgZm9yIHRoZSBtZW1vcnkgc291cmNlcywgYmVjYXVzZQorICAgKiAgV2UgZG9uJ3QgbmVlZCBhIHJlc2l6YWJsZSBhcnJheSBmb3IgdGhlIG1lbW9yeSBzb3VyY2VzIGJlY2F1c2UKICAgICogIHRoZWlyIG51bWJlciBpcyBwcmV0dHkgbGltaXRlZCB3aXRoaW4gRnJlZVR5cGUuCiAgICAqLwogI2RlZmluZSBGVF9NRU1fU09VUkNFX0JVQ0tFVFMgIDEyOApAQCAtODUsOCArODUsOCBAQAogICAgKiAgVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhIHNpbmdsZSBhbGxvY2F0ZWQKICAgICogIG1lbW9yeSBibG9jay4gIElmIEtFRVBBTElWRSBpcyBkZWZpbmVkLCBibG9ja3MgdGhhdCBhcmUgZnJlZWQgYnkKICAgICogIEZyZWVUeXBlIGFyZSBuZXZlciByZWxlYXNlZCB0byB0aGUgc3lzdGVtLiAgSW5zdGVhZCwgdGhlaXIgYHNpemUnCi0gICAqICBmaWVsZCBpcyBzZXQgdG8gLXNpemUuICBUaGlzIGlzIG1haW5seSB1c2VmdWwgdG8gZGV0ZWN0IGRvdWJsZSBmcmVlcywKLSAgICogIGF0IHRoZSBwcmljZSBvZiBsYXJnZSBtZW1vcnkgZm9vdHByaW50IGR1cmluZyBleGVjdXRpb24uCisgICAqICBmaWVsZCBpcyBzZXQgdG8gYC1zaXplJy4gIFRoaXMgaXMgbWFpbmx5IHVzZWZ1bCB0byBkZXRlY3QgZG91YmxlCisgICAqICBmcmVlcywgYXQgdGhlIHByaWNlIG9mIGEgbGFyZ2UgbWVtb3J5IGZvb3RwcmludCBkdXJpbmcgZXhlY3V0aW9uLgogICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX01lbU5vZGVSZWNfCiAgIHsKQEAgLTExMSwyMCArMTExLDIwIEBACiAgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfTWVtVGFibGVSZWNfCiAgIHsKLSAgICBGVF9VTG9uZyAgICAgICAgIHNpemU7Ci0gICAgRlRfVUxvbmcgICAgICAgICBub2RlczsKKyAgICBGVF9Mb25nICAgICAgICAgIHNpemU7CisgICAgRlRfTG9uZyAgICAgICAgICBub2RlczsKICAgICBGVF9NZW1Ob2RlKiAgICAgIGJ1Y2tldHM7CiAKLSAgICBGVF9VTG9uZyAgICAgICAgIGFsbG9jX3RvdGFsOwotICAgIEZUX1VMb25nICAgICAgICAgYWxsb2NfY3VycmVudDsKLSAgICBGVF9VTG9uZyAgICAgICAgIGFsbG9jX21heDsKLSAgICBGVF9VTG9uZyAgICAgICAgIGFsbG9jX2NvdW50OworICAgIEZUX0xvbmcgICAgICAgICAgYWxsb2NfdG90YWw7CisgICAgRlRfTG9uZyAgICAgICAgICBhbGxvY19jdXJyZW50OworICAgIEZUX0xvbmcgICAgICAgICAgYWxsb2NfbWF4OworICAgIEZUX0xvbmcgICAgICAgICAgYWxsb2NfY291bnQ7CiAKICAgICBGVF9Cb29sICAgICAgICAgIGJvdW5kX3RvdGFsOwotICAgIEZUX1VMb25nICAgICAgICAgYWxsb2NfdG90YWxfbWF4OworICAgIEZUX0xvbmcgICAgICAgICAgYWxsb2NfdG90YWxfbWF4OwogCiAgICAgRlRfQm9vbCAgICAgICAgICBib3VuZF9jb3VudDsKLSAgICBGVF9VTG9uZyAgICAgICAgIGFsbG9jX2NvdW50X21heDsKKyAgICBGVF9Mb25nICAgICAgICAgIGFsbG9jX2NvdW50X21heDsKIAogICAgIEZUX01lbVNvdXJjZSAgICAgc291cmNlc1tGVF9NRU1fU09VUkNFX0JVQ0tFVFNdOwogCkBAIC0xNDIsMTQgKzE0MiwxNCBAQAogI2RlZmluZSBGVF9NRU1fU0laRV9NSU4gIDcKICNkZWZpbmUgRlRfTUVNX1NJWkVfTUFYICAxMzg0NTE2MwogCi0jZGVmaW5lIEZUX0ZJTEVOQU1FKCB4ICkgICgoeCkgPyAoeCkgOiAidW5rbm93biBmaWxlIikKKyNkZWZpbmUgRlRfRklMRU5BTUUoIHggKSAgKCAoeCkgPyAoeCkgOiAidW5rbm93biBmaWxlIiApCiAKIAogICAvKgogICAgKiAgUHJpbWUgbnVtYmVycyBhcmUgdWdseSB0byBoYW5kbGUuICBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gaW1wbGVtZW50CiAgICAqICBMLUhhc2hpbmcsIHdoaWNoIGlzIDEwJSBmYXN0ZXIgYW5kIGRvZXNuJ3QgcmVxdWlyZSBkaXZpc2lvbnMuCiAgICAqLwotICBzdGF0aWMgY29uc3QgRlRfVUludCAgZnRfbWVtX3ByaW1lc1tdID0KKyAgc3RhdGljIGNvbnN0IEZUX0ludCAgZnRfbWVtX3ByaW1lc1tdID0KICAgewogICAgIDcsCiAgICAgMTEsCkBAIC0xODksMTAgKzE4OSwxMCBAQAogICB9OwogCiAKLSAgc3RhdGljIEZUX1VMb25nCi0gIGZ0X21lbV9jbG9zZXN0X3ByaW1lKCBGVF9VTG9uZyAgbnVtICkKKyAgc3RhdGljIEZUX0xvbmcKKyAgZnRfbWVtX2Nsb3Nlc3RfcHJpbWUoIEZUX0xvbmcgIG51bSApCiAgIHsKLSAgICBGVF9VSW50ICBpOworICAgIHNpemVfdCAgaTsKIAogCiAgICAgZm9yICggaSA9IDA7CkBAIC0yMDQsNyArMjA0LDcgQEAKICAgfQogCiAKLSAgZXh0ZXJuIHZvaWQKKyAgc3RhdGljIHZvaWQKICAgZnRfbWVtX2RlYnVnX3BhbmljKCBjb25zdCBjaGFyKiAgZm10LAogICAgICAgICAgICAgICAgICAgICAgIC4uLiApCiAgIHsKQEAgLTI1NCwxOSArMjU0LDIwIEBACiAgIHN0YXRpYyB2b2lkCiAgIGZ0X21lbV90YWJsZV9yZXNpemUoIEZUX01lbVRhYmxlICB0YWJsZSApCiAgIHsKLSAgICBGVF9VTG9uZyAgbmV3X3NpemU7CisgICAgRlRfTG9uZyAgbmV3X3NpemU7CiAKIAogICAgIG5ld19zaXplID0gZnRfbWVtX2Nsb3Nlc3RfcHJpbWUoIHRhYmxlLT5ub2RlcyApOwogICAgIGlmICggbmV3X3NpemUgIT0gdGFibGUtPnNpemUgKQogICAgIHsKICAgICAgIEZUX01lbU5vZGUqICBuZXdfYnVja2V0czsKLSAgICAgIEZUX1VMb25nICAgICBpOworICAgICAgRlRfTG9uZyAgICAgIGk7CiAKIAogICAgICAgbmV3X2J1Y2tldHMgPSAoRlRfTWVtTm9kZSAqKQotICAgICAgICAgICAgICAgICAgICAgIGZ0X21lbV90YWJsZV9hbGxvYyggdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc2l6ZSAqIHNpemVvZiAoIEZUX01lbU5vZGUgKSApOworICAgICAgICAgICAgICAgICAgICAgIGZ0X21lbV90YWJsZV9hbGxvYygKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3NpemUgKiAoRlRfTG9uZylzaXplb2YgKCBGVF9NZW1Ob2RlICkgKTsKICAgICAgIGlmICggbmV3X2J1Y2tldHMgPT0gTlVMTCApCiAgICAgICAgIHJldHVybjsKIApAQCAtMjgyLDcgKzI4Myw3IEBACiAgICAgICAgIHdoaWxlICggbm9kZSApCiAgICAgICAgIHsKICAgICAgICAgICBuZXh0ICA9IG5vZGUtPmxpbms7Ci0gICAgICAgICAgaGFzaCAgPSBGVF9NRU1fVkFMKCBub2RlLT5hZGRyZXNzICkgJSBuZXdfc2l6ZTsKKyAgICAgICAgICBoYXNoICA9IEZUX01FTV9WQUwoIG5vZGUtPmFkZHJlc3MgKSAlIChGVF9QdHJEaXN0KW5ld19zaXplOwogICAgICAgICAgIHBub2RlID0gbmV3X2J1Y2tldHMgKyBoYXNoOwogCiAgICAgICAgICAgbm9kZS0+bGluayA9IHBub2RlWzBdOwpAQCAtMzI1LDggKzMyNiw5IEBACiAgICAgdGFibGUtPmZyZWUgICAgPSBtZW1vcnktPmZyZWU7CiAKICAgICB0YWJsZS0+YnVja2V0cyA9IChGVF9NZW1Ob2RlICopCi0gICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+YWxsb2MoIG1lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUtPnNpemUgKiBzaXplb2YgKCBGVF9NZW1Ob2RlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LT5hbGxvYygKKyAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUtPnNpemUgKiAoRlRfTG9uZylzaXplb2YgKCBGVF9NZW1Ob2RlICkgKTsKICAgICBpZiAoIHRhYmxlLT5idWNrZXRzICkKICAgICAgIEZUX0FSUkFZX1pFUk8oIHRhYmxlLT5idWNrZXRzLCB0YWJsZS0+c2l6ZSApOwogICAgIGVsc2UKQEAgLTM0Myw5ICszNDUsOSBAQAogICBzdGF0aWMgdm9pZAogICBmdF9tZW1fdGFibGVfZGVzdHJveSggRlRfTWVtVGFibGUgIHRhYmxlICkKICAgewotICAgIEZUX1VMb25nICBpOwotICAgIEZUX0xvbmcgICBsZWFrX2NvdW50ID0gMDsKLSAgICBGVF9VTG9uZyAgbGVha3MgICAgICA9IDA7CisgICAgRlRfTG9uZyAgaTsKKyAgICBGVF9Mb25nICBsZWFrX2NvdW50ID0gMDsKKyAgICBGVF9Mb25nICBsZWFrcyAgICAgID0gMDsKIAogCiAgICAgRlRfRHVtcE1lbW9yeSggdGFibGUtPm1lbW9yeSApOwpAQCAtMzU5LDcgKzM2MSw3IEBACiAgICAgICB3aGlsZSAoIG5vZGUgKQogICAgICAgewogICAgICAgICBuZXh0ICAgICAgID0gbm9kZS0+bGluazsKLSAgICAgICAgbm9kZS0+bGluayA9IDA7CisgICAgICAgIG5vZGUtPmxpbmsgPSBOVUxMOwogCiAgICAgICAgIGlmICggbm9kZS0+c2l6ZSA+IDAgKQogICAgICAgICB7CkBAIC0zODEsNyArMzgzLDcgQEAKICAgICAgICAgZnRfbWVtX3RhYmxlX2ZyZWUoIHRhYmxlLCBub2RlICk7CiAgICAgICAgIG5vZGUgPSBuZXh0OwogICAgICAgfQotICAgICAgdGFibGUtPmJ1Y2tldHNbaV0gPSAwOworICAgICAgdGFibGUtPmJ1Y2tldHNbaV0gPSBOVUxMOwogICAgIH0KIAogICAgIGZ0X21lbV90YWJsZV9mcmVlKCB0YWJsZSwgdGFibGUtPmJ1Y2tldHMgKTsKQEAgLTQzMCw3ICs0MzIsNyBAQAogCiAKICAgICBoYXNoICA9IEZUX01FTV9WQUwoIGFkZHJlc3MgKTsKLSAgICBwbm9kZSA9IHRhYmxlLT5idWNrZXRzICsgKCBoYXNoICUgdGFibGUtPnNpemUgKTsKKyAgICBwbm9kZSA9IHRhYmxlLT5idWNrZXRzICsgKCBoYXNoICUgKEZUX1B0ckRpc3QpdGFibGUtPnNpemUgKTsKIAogICAgIGZvciAoOzspCiAgICAgewpAQCAtNDY2LDggKzQ2OCw4IEBACiAgICAgICBpZiAoIG5vZGUgPT0gTlVMTCApCiAgICAgICAgIGJyZWFrOwogCi0gICAgICBpZiAoIG5vZGUtPmZpbGVfbmFtZSA9PSBfZnRfZGVidWdfZmlsZSAmJgotICAgICAgICAgICBub2RlLT5saW5lX25vICAgPT0gX2Z0X2RlYnVnX2xpbmVubyAgICkKKyAgICAgIGlmICggbm9kZS0+ZmlsZV9uYW1lID09IF9mdF9kZWJ1Z19maWxlICAgJiYKKyAgICAgICAgICAgbm9kZS0+bGluZV9ubyAgID09IF9mdF9kZWJ1Z19saW5lbm8gKQogICAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAgIHBub2RlID0gJm5vZGUtPmxpbms7CkBAIC00ODUsMTEgKzQ4NywxMSBAQAogICAgIG5vZGUtPm1heF9ibG9ja3MgPSAwOwogICAgIG5vZGUtPmFsbF9ibG9ja3MgPSAwOwogCi0gICAgbm9kZS0+Y3VyX3NpemUgICA9IDA7Ci0gICAgbm9kZS0+bWF4X3NpemUgICA9IDA7Ci0gICAgbm9kZS0+YWxsX3NpemUgICA9IDA7CisgICAgbm9kZS0+Y3VyX3NpemUgPSAwOworICAgIG5vZGUtPm1heF9zaXplID0gMDsKKyAgICBub2RlLT5hbGxfc2l6ZSA9IDA7CiAKLSAgICBub2RlLT5jdXJfbWF4ICAgID0gMDsKKyAgICBub2RlLT5jdXJfbWF4ID0gMDsKIAogICAgIG5vZGUtPmxpbmsgPSBOVUxMOwogICAgIG5vZGUtPmhhc2ggPSBoYXNoOwpAQCAtNTAzLDcgKzUwNSw3IEBACiAgIHN0YXRpYyB2b2lkCiAgIGZ0X21lbV90YWJsZV9zZXQoIEZUX01lbVRhYmxlICB0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgIGFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgIGRlbHRhICkKICAgewogICAgIEZUX01lbU5vZGUgICpwbm9kZSwgbm9kZTsKQEAgLTU1OCw3ICs1NjAsNyBAQAogICAgICAgICAgIHNvdXJjZS0+bWF4X2Jsb2NrcyA9IHNvdXJjZS0+Y3VyX2Jsb2NrczsKICAgICAgIH0KIAotICAgICAgaWYgKCBzaXplID4gKEZUX1VMb25nKXNvdXJjZS0+Y3VyX21heCApCisgICAgICBpZiAoIHNpemUgPiBzb3VyY2UtPmN1cl9tYXggKQogICAgICAgICBzb3VyY2UtPmN1cl9tYXggPSBzaXplOwogCiAgICAgICBpZiAoIGRlbHRhICE9IDAgKQpAQCAtNjcxLDcgKzY3Myw3IEBACiAgIH0KIAogCi0gIGV4dGVybiBGVF9Qb2ludGVyCisgIHN0YXRpYyBGVF9Qb2ludGVyCiAgIGZ0X21lbV9kZWJ1Z19hbGxvYyggRlRfTWVtb3J5ICBtZW1vcnksCiAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICBzaXplICkKICAgewpAQCAtNjg4LDE0ICs2OTAsMTQgQEAKICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogcmV0dXJuIE5VTEwgaWYgdGhpcyBhbGxvY2F0aW9uIHdvdWxkIG92ZXJmbG93IHRoZSBtYXhpbXVtIGhlYXAgc2l6ZSAqLwotICAgIGlmICggdGFibGUtPmJvdW5kX3RvdGFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIHRhYmxlLT5hbGxvY190b3RhbF9tYXggLSB0YWJsZS0+YWxsb2NfY3VycmVudCA+IChGVF9VTG9uZylzaXplICkKKyAgICBpZiAoIHRhYmxlLT5ib3VuZF90b3RhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIHRhYmxlLT5hbGxvY190b3RhbF9tYXggLSB0YWJsZS0+YWxsb2NfY3VycmVudCA+IHNpemUgKQogICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBibG9jayA9IChGVF9CeXRlICopZnRfbWVtX3RhYmxlX2FsbG9jKCB0YWJsZSwgc2l6ZSApOwogICAgIGlmICggYmxvY2sgKQogICAgIHsKLSAgICAgIGZ0X21lbV90YWJsZV9zZXQoIHRhYmxlLCBibG9jaywgKEZUX1VMb25nKXNpemUsIDAgKTsKKyAgICAgIGZ0X21lbV90YWJsZV9zZXQoIHRhYmxlLCBibG9jaywgc2l6ZSwgMCApOwogCiAgICAgICB0YWJsZS0+YWxsb2NfY291bnQrKzsKICAgICB9CkBAIC03MDcsNyArNzA5LDcgQEAKICAgfQogCiAKLSAgZXh0ZXJuIHZvaWQKKyAgc3RhdGljIHZvaWQKICAgZnRfbWVtX2RlYnVnX2ZyZWUoIEZUX01lbW9yeSAgIG1lbW9yeSwKICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGJsb2NrICkKICAgewpAQCAtNzMxLDcgKzczMyw3IEBACiAgIH0KIAogCi0gIGV4dGVybiBGVF9Qb2ludGVyCisgIHN0YXRpYyBGVF9Qb2ludGVyCiAgIGZ0X21lbV9kZWJ1Z19yZWFsbG9jKCBGVF9NZW1vcnkgICBtZW1vcnksCiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBjdXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgIG5ld19zaXplLApAQCAtNzg3LDIxICs3ODksMjIgQEAKICAgICAgICAgIHRhYmxlLT5hbGxvY19jb3VudCA+PSB0YWJsZS0+YWxsb2NfY291bnRfbWF4ICkKICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgZGVsdGEgPSAoRlRfTG9uZykoIG5ld19zaXplIC0gY3VyX3NpemUgKTsKKyAgICBkZWx0YSA9IG5ld19zaXplIC0gY3VyX3NpemU7CiAKICAgICAvKiByZXR1cm4gTlVMTCBpZiB0aGlzIGFsbG9jYXRpb24gd291bGQgb3ZlcmZsb3cgdGhlIG1heGltdW0gaGVhcCBzaXplICovCi0gICAgaWYgKCBkZWx0YSA+IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIHRhYmxlLT5ib3VuZF90b3RhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgdGFibGUtPmFsbG9jX2N1cnJlbnQgKyAoRlRfVUxvbmcpZGVsdGEgPiB0YWJsZS0+YWxsb2NfdG90YWxfbWF4ICkKKyAgICBpZiAoIGRlbHRhID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICB0YWJsZS0+Ym91bmRfdG90YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgdGFibGUtPmFsbG9jX2N1cnJlbnQgKyBkZWx0YSA+IHRhYmxlLT5hbGxvY190b3RhbF9tYXggKQogICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBuZXdfYmxvY2sgPSAoRlRfQnl0ZSAqKWZ0X21lbV90YWJsZV9hbGxvYyggdGFibGUsIG5ld19zaXplICk7CisgICAgbmV3X2Jsb2NrID0gKEZUX1BvaW50ZXIpZnRfbWVtX3RhYmxlX2FsbG9jKCB0YWJsZSwgbmV3X3NpemUgKTsKICAgICBpZiAoIG5ld19ibG9jayA9PSBOVUxMICkKICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZnRfbWVtX3RhYmxlX3NldCggdGFibGUsIChGVF9CeXRlKiluZXdfYmxvY2ssIG5ld19zaXplLCBkZWx0YSApOwogCi0gICAgZnRfbWVtY3B5KCBuZXdfYmxvY2ssIGJsb2NrLCBjdXJfc2l6ZSA8IG5ld19zaXplID8gY3VyX3NpemUgOiBuZXdfc2l6ZSApOworICAgIGZ0X21lbWNweSggbmV3X2Jsb2NrLCBibG9jaywgY3VyX3NpemUgPCBuZXdfc2l6ZSA/IChzaXplX3QpY3VyX3NpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoc2l6ZV90KW5ld19zaXplICk7CiAKICAgICBmdF9tZW1fdGFibGVfcmVtb3ZlKCB0YWJsZSwgKEZUX0J5dGUqKWJsb2NrLCBkZWx0YSApOwogCkBAIC04NDQsNyArODQ3LDcgQEAKICAgICAgICAgICBpZiAoIHRvdGFsX21heCA+IDAgKQogICAgICAgICAgIHsKICAgICAgICAgICAgIHRhYmxlLT5ib3VuZF90b3RhbCAgICAgPSAxOwotICAgICAgICAgICAgdGFibGUtPmFsbG9jX3RvdGFsX21heCA9IChGVF9VTG9uZyl0b3RhbF9tYXg7CisgICAgICAgICAgICB0YWJsZS0+YWxsb2NfdG90YWxfbWF4ID0gdG90YWxfbWF4OwogICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC04NTcsNyArODYwLDcgQEAKICAgICAgICAgICBpZiAoIHRvdGFsX2NvdW50ID4gMCApCiAgICAgICAgICAgewogICAgICAgICAgICAgdGFibGUtPmJvdW5kX2NvdW50ICAgICA9IDE7Ci0gICAgICAgICAgICB0YWJsZS0+YWxsb2NfY291bnRfbWF4ID0gKEZUX1VMb25nKXRvdGFsX2NvdW50OworICAgICAgICAgICAgdGFibGUtPmFsbG9jX2NvdW50X21heCA9IHRvdGFsX2NvdW50OwogICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC04OTYsNyArODk5LDYgQEAKICAgfQogCiAKLQogICBzdGF0aWMgaW50CiAgIGZ0X21lbV9zb3VyY2VfY29tcGFyZSggY29uc3Qgdm9pZCogIHAxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICBwMiApCkBAIC05MjUsNyArOTI3LDcgQEAKICAgICAgIEZUX01lbVNvdXJjZSogIGJ1Y2tldCA9IHRhYmxlLT5zb3VyY2VzOwogICAgICAgRlRfTWVtU291cmNlKiAgbGltaXQgID0gYnVja2V0ICsgRlRfTUVNX1NPVVJDRV9CVUNLRVRTOwogICAgICAgRlRfTWVtU291cmNlKiAgc291cmNlczsKLSAgICAgIEZUX1VJbnQgICAgICAgIG5uLCBjb3VudDsKKyAgICAgIEZUX0ludCAgICAgICAgIG5uLCBjb3VudDsKICAgICAgIGNvbnN0IGNoYXIqICAgIGZtdDsKIAogCkBAIC05MzksOCArOTQxLDkgQEAKICAgICAgICAgICBjb3VudCsrOwogICAgICAgfQogCi0gICAgICBzb3VyY2VzID0gKEZUX01lbVNvdXJjZSopZnRfbWVtX3RhYmxlX2FsbG9jKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUsIHNpemVvZiAoICpzb3VyY2VzICkgKiBjb3VudCApOworICAgICAgc291cmNlcyA9IChGVF9NZW1Tb3VyY2UqKQorICAgICAgICAgICAgICAgICAgZnRfbWVtX3RhYmxlX2FsbG9jKAorICAgICAgICAgICAgICAgICAgICB0YWJsZSwgY291bnQgKiAoRlRfTG9uZylzaXplb2YgKCAqc291cmNlcyApICk7CiAKICAgICAgIGNvdW50ID0gMDsKICAgICAgIGZvciAoIGJ1Y2tldCA9IHRhYmxlLT5zb3VyY2VzOyBidWNrZXQgPCBsaW1pdDsgYnVja2V0KysgKQpAQCAtOTUyLDcgKzk1NSwxMCBAQAogICAgICAgICAgIHNvdXJjZXNbY291bnQrK10gPSBzb3VyY2U7CiAgICAgICB9CiAKLSAgICAgIGZ0X3Fzb3J0KCBzb3VyY2VzLCBjb3VudCwgc2l6ZW9mICggKnNvdXJjZXMgKSwgZnRfbWVtX3NvdXJjZV9jb21wYXJlICk7CisgICAgICBmdF9xc29ydCggc291cmNlcywKKyAgICAgICAgICAgICAgICAoc2l6ZV90KWNvdW50LAorICAgICAgICAgICAgICAgIHNpemVvZiAoICpzb3VyY2VzICksCisgICAgICAgICAgICAgICAgZnRfbWVtX3NvdXJjZV9jb21wYXJlICk7CiAKICAgICAgIHByaW50ZiggIkZyZWVUeXBlIE1lbW9yeSBEdW1wOiAiCiAgICAgICAgICAgICAgICJjdXJyZW50PSVsZCBtYXg9JWxkIHRvdGFsPSVsZCBjb3VudD0lbGRcbiIsCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGRlYnVnLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGRlYnVnLmMKaW5kZXggMzlhYzZhZC4uMDNlMThhOCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRkZWJ1Zy5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0ZGVidWcuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBEZWJ1Z2dpbmcgYW5kIGxvZ2dpbmcgY29tcG9uZW50IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDAyLCAyMDA0LCAyMDA4LCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTUyLDggKzE1Miw4IEBACiAgIC8qIHRoZSBtZW1vcnkgYW5kIHN0cmVhbSBjb21wb25lbnRzIHdoaWNoIGFyZSBzZXQgdG8gNyBhbmQgNSwgICAgICAgICAgICAqLwogICAvKiByZXNwZWN0aXZlbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNlZSB0aGUgZmlsZSA8aW5jbHVkZS9pbnRlcm5hbC9mdHRyYWNlLmg+IGZvciBkZXRhaWxzIG9mIHRoZSAgICAgICAgICAqLwotICAvKiBhdmFpbGFibGUgdG9nZ2xlIG5hbWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU2VlIHRoZSBmaWxlIGBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaCcgZm9yIGRldGFpbHMgb2YgICAgICovCisgIC8qIHRoZSBhdmFpbGFibGUgdG9nZ2xlIG5hbWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogVGhlIGxldmVsIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA3OyAwIG1lYW5zIHF1aWV0IChleGNlcHQgZm9yIHNlcmlvdXMgICovCiAgIC8qIHJ1bnRpbWUgZXJyb3JzKSwgYW5kIDcgbWVhbnMgX3ZlcnlfIHZlcmJvc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnR4Zjg2LmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGZudGZtdC5jCnNpbWlsYXJpdHkgaW5kZXggNjclCnJlbmFtZSBmcm9tIHRoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0eGY4Ni5jCnJlbmFtZSB0byB0aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGZudGZtdC5jCmluZGV4IGE0YmY3NjcuLjk4ZTc0MzEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0eGY4Ni5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0Zm50Zm10LmMKQEAgLTEsMTAgKzEsMTAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0eGY4Ni5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGZudGZtdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgdXRpbGl0eSBmaWxlIGZvciBYMTEgc3VwcG9ydCAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIHV0aWxpdHkgZmlsZSBmb3IgZm9udCBmb3JtYXRzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLCAyMDAzLCAyMDA0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNywxMiArMTcsMjcgQEAKIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX1hGUkVFODZfSAorI2luY2x1ZGUgRlRfRk9OVF9GT1JNQVRTX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9YRlJFRTg2X05BTUVfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9ICiAKIAotICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0eGY4Ni5oICovCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRmbnRmbXQuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIGNvbnN0IGNoYXIqICkKKyAgRlRfR2V0X0ZvbnRfRm9ybWF0KCBGVF9GYWNlICBmYWNlICkKKyAgeworICAgIGNvbnN0IGNoYXIqICByZXN1bHQgPSBOVUxMOworCisKKyAgICBpZiAoIGZhY2UgKQorICAgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHJlc3VsdCwgRk9OVF9GT1JNQVQgKTsKKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworCisgIC8qIGRlcHJlY2F0ZWQgZnVuY3Rpb24gbmFtZTsgcmV0YWluZWQgZm9yIEFCSSBjb21wYXRpYmlsaXR5ICovCiAKICAgRlRfRVhQT1JUX0RFRiggY29uc3QgY2hhciogKQogICBGVF9HZXRfWDExX0ZvbnRfRm9ybWF0KCBGVF9GYWNlICBmYWNlICkKQEAgLTMxLDcgKzQ2LDcgQEAKIAogCiAgICAgaWYgKCBmYWNlICkKLSAgICAgIEZUX0ZBQ0VfRklORF9TRVJWSUNFKCBmYWNlLCByZXN1bHQsIFhGODZfTkFNRSApOworICAgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHJlc3VsdCwgRk9OVF9GT1JNQVQgKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0ZnN0eXBlLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGZzdHlwZS5jCmluZGV4IDZiNDllZjguLmNkMzQ1OGYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0ZnN0eXBlLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRmc3R5cGUuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSB1dGlsaXR5IGZpbGUgdG8gYWNjZXNzIEZTVHlwZSBkYXRhIChib2R5KS4gICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOCwgMjAwOSwgMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDgtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRnYXNwLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGdhc3AuYwppbmRleCA4NDg1ZDI5Li5iYmQyNTdjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGdhc3AuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGdhc3AuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBY2Nlc3Mgb2YgVHJ1ZVR5cGUncyBgZ2FzcCcgdGFibGUgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRnbG9hZHIuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0Z2xvYWRyLmMKaW5kZXggM2NjNWM3YS4uN2UyODYzOCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRnbG9hZHIuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGdsb2Fkci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBnbHlwaCBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMDYsIDIwMTAsIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMTIsNyArMjEyLDggQEAKIAogCiAgICAgLyogY2hlY2sgcG9pbnRzICYgdGFncyAqLwotICAgIG5ld19tYXggPSBiYXNlLT5uX3BvaW50cyArIGN1cnJlbnQtPm5fcG9pbnRzICsgbl9wb2ludHM7CisgICAgbmV3X21heCA9IChGVF9VSW50KWJhc2UtPm5fcG9pbnRzICsgKEZUX1VJbnQpY3VycmVudC0+bl9wb2ludHMgKworICAgICAgICAgICAgICBuX3BvaW50czsKICAgICBvbGRfbWF4ID0gbG9hZGVyLT5tYXhfcG9pbnRzOwogCiAgICAgaWYgKCBuZXdfbWF4ID4gb2xkX21heCApCkBAIC0yNDUsNyArMjQ2LDcgQEAKIAogICAgIC8qIGNoZWNrIGNvbnRvdXJzICovCiAgICAgb2xkX21heCA9IGxvYWRlci0+bWF4X2NvbnRvdXJzOwotICAgIG5ld19tYXggPSBiYXNlLT5uX2NvbnRvdXJzICsgY3VycmVudC0+bl9jb250b3VycyArCisgICAgbmV3X21heCA9IChGVF9VSW50KWJhc2UtPm5fY29udG91cnMgKyAoRlRfVUludCljdXJyZW50LT5uX2NvbnRvdXJzICsKICAgICAgICAgICAgICAgbl9jb250b3VyczsKICAgICBpZiAoIG5ld19tYXggPiBvbGRfbWF4ICkKICAgICB7CkBAIC0zMjksOSArMzMwLDkgQEAKICAgICBGVF9HbHlwaExvYWQgIGJhc2U7CiAgICAgRlRfR2x5cGhMb2FkICBjdXJyZW50OwogCi0gICAgRlRfVUludCAgICAgICBuX2N1cnJfY29udG91cnM7Ci0gICAgRlRfVUludCAgICAgICBuX2Jhc2VfcG9pbnRzOwotICAgIEZUX1VJbnQgICAgICAgbjsKKyAgICBGVF9JbnQgICAgICAgIG5fY3Vycl9jb250b3VyczsKKyAgICBGVF9JbnQgICAgICAgIG5fYmFzZV9wb2ludHM7CisgICAgRlRfSW50ICAgICAgICBuOwogCiAKICAgICBpZiAoICFsb2FkZXIgKQpAQCAtMzY1LDggKzM2Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoTG9hZGVyICBzb3VyY2UgKQogICB7CiAgICAgRlRfRXJyb3IgIGVycm9yOwotICAgIEZUX1VJbnQgICBudW1fcG9pbnRzICAgPSBzb3VyY2UtPmJhc2Uub3V0bGluZS5uX3BvaW50czsKLSAgICBGVF9VSW50ICAgbnVtX2NvbnRvdXJzID0gc291cmNlLT5iYXNlLm91dGxpbmUubl9jb250b3VyczsKKyAgICBGVF9VSW50ICAgbnVtX3BvaW50cyAgID0gKEZUX1VJbnQpc291cmNlLT5iYXNlLm91dGxpbmUubl9wb2ludHM7CisgICAgRlRfVUludCAgIG51bV9jb250b3VycyA9IChGVF9VSW50KXNvdXJjZS0+YmFzZS5vdXRsaW5lLm5fY29udG91cnM7CiAKIAogICAgIGVycm9yID0gRlRfR2x5cGhMb2FkZXJfQ2hlY2tQb2ludHMoIHRhcmdldCwgbnVtX3BvaW50cywgbnVtX2NvbnRvdXJzICk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGdseXBoLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGdseXBoLmMKaW5kZXggYWMxNzhjNC4uY2I3ZmMzNyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRnbHlwaC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0Z2x5cGguYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gaGFuZGxlIGdseXBocyAoYm9keSkuICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA1LCAyMDA3LCAyMDA4LCAyMDEwLCAyMDEyLTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtODIsNyArODIsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgRlRfQml0bWFwX05ldyggJmdseXBoLT5iaXRtYXAgKTsKKyAgICAgIEZUX0JpdG1hcF9Jbml0KCAmZ2x5cGgtPmJpdG1hcCApOwogICAgICAgZXJyb3IgPSBGVF9CaXRtYXBfQ29weSggbGlicmFyeSwgJnNsb3QtPmJpdG1hcCwgJmdseXBoLT5iaXRtYXAgKTsKICAgICB9CiAKQEAgLTEyNiw5ICsxMjYsOSBAQAogCiAKICAgICBjYm94LT54TWluID0gZ2x5cGgtPmxlZnQgPDwgNjsKLSAgICBjYm94LT54TWF4ID0gY2JveC0+eE1pbiArICggZ2x5cGgtPmJpdG1hcC53aWR0aCA8PCA2ICk7CisgICAgY2JveC0+eE1heCA9IGNib3gtPnhNaW4gKyAoRlRfUG9zKSggZ2x5cGgtPmJpdG1hcC53aWR0aCA8PCA2ICk7CiAgICAgY2JveC0+eU1heCA9IGdseXBoLT50b3AgPDwgNjsKLSAgICBjYm94LT55TWluID0gY2JveC0+eU1heCAtICggZ2x5cGgtPmJpdG1hcC5yb3dzIDw8IDYgKTsKKyAgICBjYm94LT55TWluID0gY2JveC0+eU1heCAtIChGVF9Qb3MpKCBnbHlwaC0+Yml0bWFwLnJvd3MgPDwgNiApOwogICB9CiAKIApAQCAtMTczLDcgKzE3Myw5IEBACiAgICAgfQogCiAgICAgLyogYWxsb2NhdGUgbmV3IG91dGxpbmUgKi8KLSAgICBlcnJvciA9IEZUX091dGxpbmVfTmV3KCBsaWJyYXJ5LCBzb3VyY2UtPm5fcG9pbnRzLCBzb3VyY2UtPm5fY29udG91cnMsCisgICAgZXJyb3IgPSBGVF9PdXRsaW5lX05ldyggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClzb3VyY2UtPm5fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+bl9jb250b3VycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGgtPm91dGxpbmUgKTsKICAgICBpZiAoIGVycm9yICkKICAgICAgIGdvdG8gRXhpdDsKQEAgLTIwNSw4ICsyMDcsMTAgQEAKICAgICBGVF9MaWJyYXJ5ICAgICAgIGxpYnJhcnkgPSBGVF9HTFlQSCggc291cmNlICktPmxpYnJhcnk7CiAKIAotICAgIGVycm9yID0gRlRfT3V0bGluZV9OZXcoIGxpYnJhcnksIHNvdXJjZS0+b3V0bGluZS5uX3BvaW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UtPm91dGxpbmUubl9jb250b3VycywgJnRhcmdldC0+b3V0bGluZSApOworICAgIGVycm9yID0gRlRfT3V0bGluZV9OZXcoIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpc291cmNlLT5vdXRsaW5lLm5fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+b3V0bGluZS5uX2NvbnRvdXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YXJnZXQtPm91dGxpbmUgKTsKICAgICBpZiAoICFlcnJvciApCiAgICAgICBGVF9PdXRsaW5lX0NvcHkoICZzb3VyY2UtPm91dGxpbmUsICZ0YXJnZXQtPm91dGxpbmUgKTsKIApAQCAtMjg3LDcgKzI5MSw3IEBACiAgICAgIEZUX0dseXBoICAgZ2x5cGggID0gTlVMTDsKIAogCi0gICAgICphZ2x5cGggPSAwOworICAgICAqYWdseXBoID0gTlVMTDsKIAogICAgICBpZiAoICFGVF9BTExPQyggZ2x5cGgsIGNsYXp6LT5nbHlwaF9zaXplICkgKQogICAgICB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGd4dmFsLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGd4dmFsLmMKaW5kZXggYTY1ZjRjOC4uNTg4NjhmMiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRneHZhbC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0Z3h2YWwuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIHZhbGlkYXRpbmcgVHJ1ZVR5ZXBHWC9BQVQgdGFibGVzIChib2R5KS4gICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDA2LCAyMDEwLCAyMDEzLCAyMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE1hc2F0YWtlIFlBTUFUTywgUmVkaGF0IEsuSywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRpbml0LmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGluaXQuYwppbmRleCBjNGM4ODIwLi5iNjVhOTFkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGluaXQuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGluaXQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBpbml0aWFsaXphdGlvbiBsYXllciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAyLCAyMDA1LCAyMDA3LCAyMDA5LCAyMDEyLTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjMsOCArMjMsOCBAQAogICAvKiAgRlRfQWRkX0RlZmF1bHRfTW9kdWxlcygpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBhZGQgdGhlIHNldCBvZiBkZWZhdWx0IG1vZHVsZXMgdG8gYSAgICAgICovCiAgIC8qICAgICBmcmVzaCBuZXcgbGlicmFyeSBvYmplY3QuICBUaGUgc2V0IGlzIHRha2VuIGZyb20gdGhlIGhlYWRlciBmaWxlICAqLwotICAvKiAgICAgYGNvbmZpZy9mdG1vZHVsZS5oJy4gIFNlZSB0aGUgZG9jdW1lbnQgYEZyZWVUeXBlIDIuMCBCdWlsZCAgICAgICAgKi8KLSAgLyogICAgIFN5c3RlbScgZm9yIG1vcmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBgZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmgnLiAgU2VlIHRoZSBkb2N1bWVudCBgRnJlZVR5cGUgMi4wICAgICAqLworICAvKiAgICAgQnVpbGQgU3lzdGVtJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICBGVF9Jbml0X0ZyZWVUeXBlKCk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgc3lzdGVtIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0sICAgKi8KQEAgLTEzOCw3ICsxMzgsNyBAQAogI2luY2x1ZGUgRlRfQ09ORklHX01PRFVMRVNfSAogCiAgICAgRlRfRlJFRSggY2xhc3NlcyApOwotICAgIHBpY19jb250YWluZXItPmRlZmF1bHRfbW9kdWxlX2NsYXNzZXMgPSAwOworICAgIHBpY19jb250YWluZXItPmRlZmF1bHRfbW9kdWxlX2NsYXNzZXMgPSBOVUxMOwogICB9CiAKIApAQCAtMTY0LDcgKzE2NCw3IEBACiAKICAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CiAKLSAgICBwaWNfY29udGFpbmVyLT5kZWZhdWx0X21vZHVsZV9jbGFzc2VzID0gMDsKKyAgICBwaWNfY29udGFpbmVyLT5kZWZhdWx0X21vZHVsZV9jbGFzc2VzID0gTlVMTDsKIAogICAgIGlmICggRlRfQUxMT0MoIGNsYXNzZXMsIHNpemVvZiAoIEZUX01vZHVsZV9DbGFzcyogKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIEZUX05VTV9NT0RVTEVfQ0xBU1NFUyArIDEgKSApICkKQEAgLTE3Miw4ICsxNzIsOCBAQAogCiAgICAgLyogaW5pdGlhbGl6ZSBhbGwgcG9pbnRlcnMgdG8gMCwgZXNwZWNpYWxseSB0aGUgbGFzdCBvbmUgKi8KICAgICBmb3IgKCBpID0gMDsgaSA8IEZUX05VTV9NT0RVTEVfQ0xBU1NFUzsgaSsrICkKLSAgICAgIGNsYXNzZXNbaV0gPSAwOwotICAgIGNsYXNzZXNbRlRfTlVNX01PRFVMRV9DTEFTU0VTXSA9IDA7CisgICAgICBjbGFzc2VzW2ldID0gTlVMTDsKKyAgICBjbGFzc2VzW0ZUX05VTV9NT0RVTEVfQ0xBU1NFU10gPSBOVUxMOwogCiAgICAgaSA9IDA7CiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0bGNkZmlsLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdGxjZGZpbC5jCmluZGV4IGQ4YmNiYmYuLmZmNmY3ZTkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0bGNkZmlsLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRsY2RmaWwuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGNvbG9yIGZpbHRlcmluZyBvZiBzdWJwaXhlbCBiaXRtYXAgZ2x5cGhzIChib2R5KS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNiwgMjAwOC0yMDEwLCAyMDEzLCAyMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNDgsNyArNDgsNyBAQAogCiAgICAgICAvKiB0YWtlIGNhcmUgb2YgYml0bWFwIGZsb3cgKi8KICAgICAgIGlmICggYml0bWFwLT5waXRjaCA8IDAgKQotICAgICAgICBsaW5lIC09IGJpdG1hcC0+cGl0Y2ggKiAoIGJpdG1hcC0+cm93cyAtIDEgKTsKKyAgICAgICAgbGluZSAtPSBiaXRtYXAtPnBpdGNoICogKEZUX0ludCkoIGJpdG1hcC0+cm93cyAtIDEgKTsKIAogICAgICAgLyogYGZpcicgYW5kIGBwaXgnIG11c3QgYmUgYXQgbGVhc3QgMzIgYml0IHdpZGUsIHNpbmNlIHRoZSBzdW0gb2YgKi8KICAgICAgIC8qIHRoZSB2YWx1ZXMgaW4gYHdlaWdodHMnIGNhbiBleGNlZWQgMHhGRiAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMTIsNyArMTEyLDcgQEAKIAogICAgICAgLyogdGFrZSBjYXJlIG9mIGJpdG1hcCBmbG93ICovCiAgICAgICBpZiAoIGJpdG1hcC0+cGl0Y2ggPCAwICkKLSAgICAgICAgY29sdW1uIC09IGJpdG1hcC0+cGl0Y2ggKiAoIGJpdG1hcC0+cm93cyAtIDEgKTsKKyAgICAgICAgY29sdW1uIC09IGJpdG1hcC0+cGl0Y2ggKiAoRlRfSW50KSggYml0bWFwLT5yb3dzIC0gMSApOwogCiAgICAgICBmb3IgKCA7IHdpZHRoID4gMDsgd2lkdGgtLSwgY29sdW1uKysgKQogICAgICAgewpAQCAtMTgyLDcgKzE4Miw3IEBACiAgICAgRlRfVUludCAgaGVpZ2h0ID0gKEZUX1VJbnQpYml0bWFwLT5yb3dzOwogICAgIEZUX0ludCAgIHBpdGNoICA9IGJpdG1hcC0+cGl0Y2g7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50ICBmaWx0ZXJzWzNdWzNdID0KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50ICBmaWx0ZXJzWzNdWzNdID0KICAgICB7CiAgICAgICB7IDY1NTM4ICogOS8xMywgNjU1MzggKiAxLzYsIDY1NTM4ICogMS8xMyB9LAogICAgICAgeyA2NTUzOCAqIDMvMTMsIDY1NTM4ICogNC82LCA2NTUzOCAqIDMvMTMgfSwKQEAgLTIwMCw3ICsyMDAsNyBAQAogCiAgICAgICAvKiB0YWtlIGNhcmUgb2YgYml0bWFwIGZsb3cgKi8KICAgICAgIGlmICggYml0bWFwLT5waXRjaCA8IDAgKQotICAgICAgICBsaW5lIC09IGJpdG1hcC0+cGl0Y2ggKiAoIGJpdG1hcC0+cm93cyAtIDEgKTsKKyAgICAgICAgbGluZSAtPSBiaXRtYXAtPnBpdGNoICogKEZUX0ludCkoIGJpdG1hcC0+cm93cyAtIDEgKTsKIAogICAgICAgZm9yICggOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgbGluZSArPSBwaXRjaCApCiAgICAgICB7CkBAIC0yNDMsMTIgKzI0MywxMiBAQAogCiAgICAgICAvKiB0YWtlIGNhcmUgb2YgYml0bWFwIGZsb3cgKi8KICAgICAgIGlmICggYml0bWFwLT5waXRjaCA8IDAgKQotICAgICAgICBjb2x1bW4gLT0gYml0bWFwLT5waXRjaCAqICggYml0bWFwLT5yb3dzIC0gMSApOworICAgICAgICBjb2x1bW4gLT0gYml0bWFwLT5waXRjaCAqIChGVF9JbnQpKCBiaXRtYXAtPnJvd3MgLSAxICk7CiAKICAgICAgIGZvciAoIDsgd2lkdGggPiAwOyB3aWR0aC0tLCBjb2x1bW4rKyApCiAgICAgICB7CiAgICAgICAgIEZUX0J5dGUqICBjb2wgICAgID0gY29sdW1uOwotICAgICAgICBGVF9CeXRlKiAgY29sX2VuZCA9IGNvbCArIGhlaWdodCAqIHBpdGNoOworICAgICAgICBGVF9CeXRlKiAgY29sX2VuZCA9IGNvbCArIChGVF9JbnQpaGVpZ2h0ICogcGl0Y2g7CiAKIAogICAgICAgICBmb3IgKCA7IGNvbCA8IGNvbF9lbmQ7IGNvbCArPSAzICogcGl0Y2ggKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRtYWMuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0bWFjLmMKaW5kZXggNTMwMWFiNC4uMTE0YmJiNiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRtYWMuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdG1hYy5jCkBAIC04LDcgKzgsNyBAQAogLyogIFRoaXMgZmlsZSBpcyBmb3IgTWFjIE9TIFggb25seTsgc2VlIGJ1aWxkcy9tYWMvZnRvbGRtYWMuYyBmb3IgICAgICAgICAgKi8KIC8qICBjbGFzc2ljIHBsYXRmb3JtcyBidWlsdCBieSBNUFcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDksIDIwMTMsIDIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgSnVzdCB2YW4gUm9zc3VtLCBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC02MTgsMTEgKzYxOCwxMSBAQAogICAgICAgICAgIHRvdGFsX3NpemUgKz0gNjsgLyogY29kZSArIDQgYnl0ZXMgY2h1bmsgbGVuZ3RoICovCiAgICAgICB9CiAKLSAgICAgIHRvdGFsX3NpemUgKz0gR2V0SGFuZGxlU2l6ZSggcG9zdF9kYXRhICkgLSAyOworICAgICAgdG90YWxfc2l6ZSArPSAoRlRfVUxvbmcpR2V0SGFuZGxlU2l6ZSggcG9zdF9kYXRhICkgLSAyOwogICAgICAgbGFzdF9jb2RlID0gY29kZTsKIAotICAgICAgLyogZGV0ZWN0IGludGVnZXIgb3ZlcmZsb3dzICovCi0gICAgICBpZiAoIHRvdGFsX3NpemUgPCBvbGRfdG90YWxfc2l6ZSApCisgICAgICAvKiBkZXRlY3QgcmVzb3VyY2UgZm9yayBvdmVyZmxvdyAqLworICAgICAgaWYgKCBGVF9NQUNfUkZPUktfTUFYX0xFTiA8IHRvdGFsX3NpemUgKQogICAgICAgewogICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBBcnJheV9Ub29fTGFyZ2UgKTsKICAgICAgICAgZ290byBFcnJvcjsKQEAgLTc0Nyw2ICs3NDcsMTEgQEAKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9IYW5kbGUgKTsKIAogICAgIHNmbnRfc2l6ZSA9IChGVF9VTG9uZylHZXRIYW5kbGVTaXplKCBzZm50ICk7CisKKyAgICAvKiBkZXRlY3QgcmVzb3VyY2UgZm9yayBvdmVyZmxvdyAqLworICAgIGlmICggRlRfTUFDX1JGT1JLX01BWF9MRU4gPCBzZm50X3NpemUgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBBcnJheV9Ub29fTGFyZ2UgKTsKKwogICAgIGlmICggRlRfQUxMT0MoIHNmbnRfZGF0YSwgKEZUX0xvbmcpc2ZudF9zaXplICkgKQogICAgIHsKICAgICAgIFJlbGVhc2VSZXNvdXJjZSggc2ZudCApOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRtbS5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRtbS5jCmluZGV4IDA1NjY4MGIuLjdjMDEyYWEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0bW0uYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdG1tLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgTXVsdGlwbGUgTWFzdGVyIGZvbnQgc3VwcG9ydCAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMywgMjAwNCwgMjAwOSwgMjAxMywgMjAxNCBieSAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0b2Jqcy5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRvYmpzLmMKaW5kZXggMzJhMzcyYi4uZjBjMmU3NyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRvYmpzLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRvYmpzLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHByaXZhdGUgYmFzZSBjbGFzc2VzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE1OCw3ICsxNTgsNyBAQAogICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gTlVMTDsKIAogCi0gICAgKmFzdHJlYW0gPSAwOworICAgICphc3RyZWFtID0gTlVMTDsKIAogICAgIGlmICggIWxpYnJhcnkgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0xpYnJhcnlfSGFuZGxlICk7CkBAIC0xNzgsNyArMTc4LDcgQEAKICAgICAgIC8qIGNyZWF0ZSBhIG1lbW9yeS1iYXNlZCBzdHJlYW0gKi8KICAgICAgIEZUX1N0cmVhbV9PcGVuTWVtb3J5KCBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IEZUX0J5dGUqKWFyZ3MtPm1lbW9yeV9iYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPm1lbW9yeV9zaXplICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKWFyZ3MtPm1lbW9yeV9zaXplICk7CiAgICAgfQogCiAjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fRElTQUJMRV9TVFJFQU1fU1VQUE9SVApAQCAtMzUzLDEwICszNTMsMTAgQEAKICAgICBzbG90LT5iaXRtYXBfbGVmdCAgID0gMDsKICAgICBzbG90LT5iaXRtYXBfdG9wICAgID0gMDsKICAgICBzbG90LT5udW1fc3ViZ2x5cGhzID0gMDsKLSAgICBzbG90LT5zdWJnbHlwaHMgICAgID0gMDsKLSAgICBzbG90LT5jb250cm9sX2RhdGEgID0gMDsKKyAgICBzbG90LT5zdWJnbHlwaHMgICAgID0gTlVMTDsKKyAgICBzbG90LT5jb250cm9sX2RhdGEgID0gTlVMTDsKICAgICBzbG90LT5jb250cm9sX2xlbiAgID0gMDsKLSAgICBzbG90LT5vdGhlciAgICAgICAgID0gMDsKKyAgICBzbG90LT5vdGhlciAgICAgICAgID0gTlVMTDsKICAgICBzbG90LT5mb3JtYXQgICAgICAgID0gRlRfR0xZUEhfRk9STUFUX05PTkU7CiAKICAgICBzbG90LT5saW5lYXJIb3JpQWR2YW5jZSA9IDA7CkBAIC0zODcsNyArMzg3LDcgQEAKICAgICAgIGlmICggRlRfRFJJVkVSX1VTRVNfT1VUTElORVMoIGRyaXZlciApICkKICAgICAgIHsKICAgICAgICAgRlRfR2x5cGhMb2FkZXJfRG9uZSggc2xvdC0+aW50ZXJuYWwtPmxvYWRlciApOwotICAgICAgICBzbG90LT5pbnRlcm5hbC0+bG9hZGVyID0gMDsKKyAgICAgICAgc2xvdC0+aW50ZXJuYWwtPmxvYWRlciA9IE5VTEw7CiAgICAgICB9CiAKICAgICAgIEZUX0ZSRUUoIHNsb3QtPmludGVybmFsICk7CkBAIC00MzgsNyArNDM4LDcgQEAKICAgICAgICAgKmFzbG90ID0gc2xvdDsKICAgICB9CiAgICAgZWxzZSBpZiAoIGFzbG90ICkKLSAgICAgICphc2xvdCA9IDA7CisgICAgICAqYXNsb3QgPSBOVUxMOwogCiAKICAgRXhpdDoKQEAgLTkzMiw3ICs5MzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIChGVF9MaXN0X0Rlc3RydWN0b3IpZGVzdHJveV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSwKICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgKTsKLSAgICBmYWNlLT5zaXplID0gMDsKKyAgICBmYWNlLT5zaXplID0gTlVMTDsKIAogICAgIC8qIG5vdyBkaXNjYXJkIGNsaWVudCBkYXRhICovCiAgICAgaWYgKCBmYWNlLT5nZW5lcmljLmZpbmFsaXplciApCkBAIC05NTAsNyArOTUwLDcgQEAKICAgICAgIGZhY2UtPnN0cmVhbSwKICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJFQU0gKSAhPSAwICk7CiAKLSAgICBmYWNlLT5zdHJlYW0gPSAwOworICAgIGZhY2UtPnN0cmVhbSA9IE5VTEw7CiAKICAgICAvKiBnZXQgcmlkIG9mIGl0ICovCiAgICAgaWYgKCBmYWNlLT5pbnRlcm5hbCApCkBAIC05NjgsMTAgKzk2OCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xpc3RfRGVzdHJ1Y3RvcilkZXN0cm95X2ZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyLT5yb290Lm1lbW9yeSwKICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgKTsKLQotICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBkcm9wIHRoZSBkcml2ZXIncyBnbHlwaCBsb2FkZXIgKi8KLSAgICBpZiAoIEZUX0RSSVZFUl9VU0VTX09VVExJTkVTKCBkcml2ZXIgKSApCi0gICAgICBGVF9HbHlwaExvYWRlcl9Eb25lKCBkcml2ZXItPmdseXBoX2xvYWRlciApOwogICB9CiAKIApAQCAtMTE1Nyw3ICsxMTUzLDcgQEAKICAgICAgIGludCAgaTsKIAogCi0gICAgICBmYWNlLT5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlID0gMDsKKyAgICAgIGZhY2UtPmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UgPSBOVUxMOwogICAgICAgZm9yICggaSA9IDA7IGkgPCBudW1fcGFyYW1zICYmICFmYWNlLT5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlOwogICAgICAgICAgICAgaSsrICkKICAgICAgICAgaWYgKCBwYXJhbXNbaV0udGFnID09IEZUX1BBUkFNX1RBR19JTkNSRU1FTlRBTCApCkBAIC0xMTk5LDcgKzExOTUsNyBAQAogICAgICAgICBjbGF6ei0+ZG9uZV9mYWNlKCBmYWNlICk7CiAgICAgICBGVF9GUkVFKCBpbnRlcm5hbCApOwogICAgICAgRlRfRlJFRSggZmFjZSApOwotICAgICAgKmFmYWNlID0gMDsKKyAgICAgICphZmFjZSA9IE5VTEw7CiAgICAgfQogCiAgICAgcmV0dXJuIGVycm9yOwpAQCAtMTMwMiw4ICsxMjk4LDggQEAKICAgICBGVF9GUkVFKCBzdHJlYW0tPmJhc2UgKTsKIAogICAgIHN0cmVhbS0+c2l6ZSAgPSAwOwotICAgIHN0cmVhbS0+YmFzZSAgPSAwOwotICAgIHN0cmVhbS0+Y2xvc2UgPSAwOworICAgIHN0cmVhbS0+YmFzZSAgPSBOVUxMOworICAgIHN0cmVhbS0+Y2xvc2UgPSBOVUxMOwogICB9CiAKIApAQCAtMTMyNyw3ICsxMzIzLDcgQEAKICAgICBpZiAoICFiYXNlICkKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwogCi0gICAgKmFzdHJlYW0gPSAwOworICAgICphc3RyZWFtID0gTlVMTDsKICAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CiAgICAgaWYgKCBGVF9ORVcoIHN0cmVhbSApICkKICAgICAgIGdvdG8gRXhpdDsKQEAgLTEzNzksMTMgKzEzNzUsMTMgQEAKICAgICB9CiAKICNpZmRlZiBGVF9NQUNJTlRPU0gKLSAgICAvKiBBdCB0aGlzIHBvaW50LCBmYWNlX2luZGV4IGhhcyBzZXJ2ZWQgaXRzIHB1cnBvc2U7ICAgICAgKi8KKyAgICAvKiBBdCB0aGlzIHBvaW50LCB0aGUgZmFjZSBpbmRleCBoYXMgc2VydmVkIGl0cyBwdXJwb3NlOyAgKi8KICAgICAvKiB3aG9ldmVyIGNhbGxzIHRoaXMgZnVuY3Rpb24gaGFzIGFscmVhZHkgdXNlZCBpdCB0byAgICAgKi8KICAgICAvKiBsb2NhdGUgdGhlIGNvcnJlY3QgZm9udCBkYXRhLiAgV2Ugc2hvdWxkIG5vdCBwcm9wYWdhdGUgKi8KICAgICAvKiB0aGlzIGluZGV4IHRvIEZUX09wZW5fRmFjZSgpICh1bmxlc3MgaXQgaXMgbmVnYXRpdmUpLiAgKi8KIAogICAgIGlmICggZmFjZV9pbmRleCA+IDAgKQotICAgICAgZmFjZV9pbmRleCA9IDA7CisgICAgICBmYWNlX2luZGV4ICY9IDB4N0ZGRjAwMDBMOyAvKiByZXRhaW4gR1ggZGF0YSAqLwogI2VuZGlmCiAKICAgICBlcnJvciA9IEZUX09wZW5fRmFjZSggbGlicmFyeSwgJmFyZ3MsIGZhY2VfaW5kZXgsIGFmYWNlICk7CkBAIC0xNDkxLDcgKzE0ODcsNyBAQAogICAgIEZUX0Vycm9yICAgZXJyb3I7CiAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CiAgICAgRlRfVUxvbmcgICBvZmZzZXQsIGxlbmd0aDsKLSAgICBGVF9Mb25nICAgIHBvczsKKyAgICBGVF9VTG9uZyAgIHBvczsKICAgICBGVF9Cb29sICAgIGlzX3NmbnRfY2lkOwogICAgIEZUX0J5dGUqICAgc2ZudF9wcyA9IE5VTEw7CiAKQEAgLTE0OTksNyArMTQ5NSwxMSBAQAogICAgIEZUX1VOVVNFRCggcGFyYW1zICk7CiAKIAotICAgIHBvcyA9IEZUX1N0cmVhbV9Qb3MoIHN0cmVhbSApOworICAgIC8qIGlnbm9yZSBHWCBzdHVmZiAqLworICAgIGlmICggZmFjZV9pbmRleCA+IDAgKQorICAgICAgZmFjZV9pbmRleCAmPSAweEZGRkZMOworCisgICAgcG9zID0gRlRfU1RSRUFNX1BPUygpOwogCiAgICAgZXJyb3IgPSBmdF9sb29rdXBfUFNfaW5fc2ZudF9zdHJlYW0oIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbmRleCwKQEAgLTE1MTYsOCArMTUxNiwxMCBAQAogICAgICAgZ290byBFeGl0OwogCiAgICAgZXJyb3IgPSBGVF9TdHJlYW1fUmVhZCggc3RyZWFtLCAoRlRfQnl0ZSAqKXNmbnRfcHMsIGxlbmd0aCApOwotICAgIGlmICggZXJyb3IgKQorICAgIGlmICggZXJyb3IgKSB7CisgICAgICBGVF9GUkVFKCBzZm50X3BzICk7CiAgICAgICBnb3RvIEV4aXQ7CisgICAgfQogCiAgICAgZXJyb3IgPSBvcGVuX2ZhY2VfZnJvbV9idWZmZXIoIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmbnRfcHMsCkBAIC0xNTc3LDcgKzE1NzksNyBAQAogICAgIHBmYl9sZW4gPSAwOwogICAgIGZvciAoIGkgPSAwOyBpIDwgcmVzb3VyY2VfY250OyArK2kgKQogICAgIHsKLSAgICAgIGVycm9yID0gRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgb2Zmc2V0c1tpXSApOworICAgICAgZXJyb3IgPSBGVF9TdHJlYW1fU2Vlayggc3RyZWFtLCAoRlRfVUxvbmcpb2Zmc2V0c1tpXSApOwogICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgIGdvdG8gRXhpdDsKICAgICAgIGlmICggRlRfUkVBRF9VTE9ORyggdGVtcCApICkKQEAgLTE1ODYsMTIgKzE1ODgsMTQgQEAKICAgICAgIC8qIEZUMiBhbGxvY2F0b3IgdGFrZXMgc2lnbmVkIGxvbmcgYnVmZmVyIGxlbmd0aCwKICAgICAgICAqIHRvbyBsYXJnZSB2YWx1ZSBjYXVzaW5nIG92ZXJmbG93IHNob3VsZCBiZSBjaGVja2VkCiAgICAgICAgKi8KLSAgICAgIEZUX1RSQUNFNCgoICIgICAgICAgICAgICAgICAgIFBPU1QgZnJhZ21lbnQgIyVkOiBsZW5ndGg9MHglMDh4XG4iLAotICAgICAgICAgICAgICAgICAgaSwgdGVtcCkpOwotICAgICAgaWYgKCAweDdGRkZGRkZGVUwgPCB0ZW1wIHx8IHBmYl9sZW4gKyB0ZW1wICsgNiA8IHBmYl9sZW4gKQorICAgICAgRlRfVFJBQ0U0KCggIiAgICAgICAgICAgICAgICAgUE9TVCBmcmFnbWVudCAjJWQ6IGxlbmd0aD0weCUwOHgiCisgICAgICAgICAgICAgICAgICAiIHRvdGFsIHBmYl9sZW49MHglMDh4XG4iLAorICAgICAgICAgICAgICAgICAgaSwgdGVtcCwgcGZiX2xlbiArIHRlbXAgKyA2KSk7CisgICAgICBpZiAoIEZUX01BQ19SRk9SS19NQVhfTEVOIDwgdGVtcCAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgIEZUX01BQ19SRk9SS19NQVhfTEVOIC0gdGVtcCA8IHBmYl9sZW4gKyA2ICkKICAgICAgIHsKLSAgICAgICAgRlRfVFJBQ0UyKCggIiAgICAgICAgICAgICB0b28gbG9uZyBmcmFnbWVudCBsZW5ndGggbWFrZXMiCi0gICAgICAgICAgICAgICAgICAgICIgcGZiX2xlbiBjb25mdXNlZDogdGVtcD0weCUwOHhcbiIsIHRlbXAgKSk7CisgICAgICAgIEZUX1RSQUNFMigoICIgICAgICAgICAgICAgTWFjT1MgcmVzb3VyY2UgbGVuZ3RoIGNhbm5vdCBleGNlZWQiCisgICAgICAgICAgICAgICAgICAgICIgMHglMDh4XG4iLCBGVF9NQUNfUkZPUktfTUFYX0xFTiApKTsKICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9PZmZzZXQgKTsKICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQpAQCAtMTYyNCw3ICsxNjI4LDcgQEAKICAgICB0eXBlID0gMTsKICAgICBmb3IgKCBpID0gMDsgaSA8IHJlc291cmNlX2NudDsgKytpICkKICAgICB7Ci0gICAgICBlcnJvciA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIG9mZnNldHNbaV0gKTsKKyAgICAgIGVycm9yID0gRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgKEZUX1VMb25nKW9mZnNldHNbaV0gKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBnb3RvIEV4aXQyOwogICAgICAgaWYgKCBGVF9SRUFEX1VMT05HKCBybGVuICkgKQpAQCAtMTY2NCw3ICsxNjY4LDcgQEAKICAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgRlRfVFJBQ0UzKCggIiAgICBXcml0ZSBQT1NUIGZyYWdtZW50ICMlZCBoZWFkZXIgKDQtYnl0ZSkgdG8gYnVmZmVyIgotICAgICAgICAgICAgICAgICAgICAiIDB4JXAgKyAweCUwOHhcbiIsIGksIHBmYl9kYXRhLCBwZmJfbGVucG9zICkpOworICAgICAgICAgICAgICAgICAgICAiICVwICsgMHglMDh4XG4iLCBpLCBwZmJfZGF0YSwgcGZiX2xlbnBvcyApKTsKICAgICAgICAgaWYgKCBwZmJfbGVucG9zICsgMyA+IHBmYl9sZW4gKyAyICkKICAgICAgICAgICBnb3RvIEV4aXQyOwogICAgICAgICBwZmJfZGF0YVtwZmJfbGVucG9zICAgIF0gPSAoRlRfQnl0ZSkoIGxlbiApOwpAQCAtMTY3Niw3ICsxNjgwLDcgQEAKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBGVF9UUkFDRTMoKCAiICAgIFdyaXRlIFBPU1QgZnJhZ21lbnQgIyVkIGhlYWRlciAoNi1ieXRlKSB0byBidWZmZXIiCi0gICAgICAgICAgICAgICAgICAgICIgMHglcCArIDB4JTA4eFxuIiwgaSwgcGZiX2RhdGEsIHBmYl9wb3MgKSk7CisgICAgICAgICAgICAgICAgICAgICIgJXAgKyAweCUwOHhcbiIsIGksIHBmYl9kYXRhLCBwZmJfcG9zICkpOwogICAgICAgICBpZiAoIHBmYl9wb3MgKyA2ID4gcGZiX2xlbiArIDIgKQogICAgICAgICAgIGdvdG8gRXhpdDI7CiAgICAgICAgIHBmYl9kYXRhW3BmYl9wb3MrK10gPSAweDgwOwpAQCAtMTY5Niw3ICsxNzAwLDcgQEAKICAgICAgICAgZ290byBFeGl0MjsKIAogICAgICAgRlRfVFJBQ0UzKCggIiAgICBMb2FkIFBPU1QgZnJhZ21lbnQgIyVkICglZCBieXRlKSB0byBidWZmZXIiCi0gICAgICAgICAgICAgICAgICAiIDB4JXAgKyAweCUwOHhcbiIsIGksIHJsZW4sIHBmYl9kYXRhLCBwZmJfcG9zICkpOworICAgICAgICAgICAgICAgICAgIiAlcCArIDB4JTA4eFxuIiwgaSwgcmxlbiwgcGZiX2RhdGEsIHBmYl9wb3MgKSk7CiAgICAgICBlcnJvciA9IEZUX1N0cmVhbV9SZWFkKCBzdHJlYW0sIChGVF9CeXRlICopcGZiX2RhdGEgKyBwZmJfcG9zLCBybGVuICk7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgZ290byBFeGl0MjsKQEAgLTE3NDEsNyArMTc0NSw3IEBACiAgIC8qIFRoZSByZXNvdXJjZSBoZWFkZXIgc2F5cyB3ZSd2ZSBnb3QgcmVzb3VyY2VfY250IGBzZm50JyAgICAgICovCiAgIC8qIChUcnVlVHlwZS9PcGVuVHlwZSkgcmVzb3VyY2VzIGluIHRoaXMgZmlsZS4gIExvb2sgdGhyb3VnaCAgICovCiAgIC8qIHRoZW0gZm9yIHRoZSBvbmUgaW5kaWNhdGVkIGJ5IGZhY2VfaW5kZXgsIGxvYWQgaXQgaW50byBtZW0sICovCi0gIC8qIHBhc3MgaXQgb24gdGhlIHRoZSB0cnVldHlwZSBkcml2ZXIgYW5kIHJldHVybiBpdC4gICAgICAgICAgICovCisgIC8qIHBhc3MgaXQgb24gdG8gdGhlIHRydWV0eXBlIGRyaXZlciwgYW5kIHJldHVybiBpdC4gICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyBGVF9FcnJvcgogICBNYWNfUmVhZF9zZm50X1Jlc291cmNlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LApAQCAtMTc1NCw3ICsxNzU4LDcgQEAKICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKICAgICBGVF9CeXRlKiAgIHNmbnRfZGF0YSA9IE5VTEw7CiAgICAgRlRfRXJyb3IgICBlcnJvcjsKLSAgICBGVF9Mb25nICAgIGZsYWdfb2Zmc2V0OworICAgIEZUX1VMb25nICAgZmxhZ19vZmZzZXQ7CiAgICAgRlRfTG9uZyAgICBybGVuOwogICAgIGludCAgICAgICAgaXNfY2ZmOwogICAgIEZUX0xvbmcgICAgZmFjZV9pbmRleF9pbl9yZXNvdXJjZSA9IDA7CkBAIC0xNzY1LDcgKzE3NjksNyBAQAogICAgIGlmICggZmFjZV9pbmRleCA+PSByZXNvdXJjZV9jbnQgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9SZXNvdXJjZSApOwogCi0gICAgZmxhZ19vZmZzZXQgPSBvZmZzZXRzW2ZhY2VfaW5kZXhdOworICAgIGZsYWdfb2Zmc2V0ID0gKEZUX1VMb25nKW9mZnNldHNbZmFjZV9pbmRleF07CiAgICAgZXJyb3IgPSBGVF9TdHJlYW1fU2Vlayggc3RyZWFtLCBmbGFnX29mZnNldCApOwogICAgIGlmICggZXJyb3IgKQogICAgICAgZ290byBFeGl0OwpAQCAtMTc3NCw2ICsxNzc4LDggQEAKICAgICAgIGdvdG8gRXhpdDsKICAgICBpZiAoIHJsZW4gPT0gLTEgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9SZXNvdXJjZSApOworICAgIGlmICggKEZUX1VMb25nKXJsZW4gPiBGVF9NQUNfUkZPUktfTUFYX0xFTiApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfT2Zmc2V0ICk7CiAKICAgICBlcnJvciA9IG9wZW5fZmFjZV9QU19mcm9tX3NmbnRfc3RyZWFtKCBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwKQEAgLTE3ODcsMTYgKzE3OTMsMTggQEAKICAgICBpZiAoIEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIGZsYWdfb2Zmc2V0ICsgNCApICkKICAgICAgIGdvdG8gRXhpdDsKIAotICAgIGlmICggRlRfQUxMT0MoIHNmbnRfZGF0YSwgKEZUX0xvbmcpcmxlbiApICkKKyAgICBpZiAoIEZUX0FMTE9DKCBzZm50X2RhdGEsIHJsZW4gKSApCiAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgZXJyb3IgPSBGVF9TdHJlYW1fUmVhZCggc3RyZWFtLCAoRlRfQnl0ZSAqKXNmbnRfZGF0YSwgcmxlbiApOwotICAgIGlmICggZXJyb3IgKQorICAgIGVycm9yID0gRlRfU3RyZWFtX1JlYWQoIHN0cmVhbSwgKEZUX0J5dGUgKilzZm50X2RhdGEsIChGVF9VTG9uZylybGVuICk7CisgICAgaWYgKCBlcnJvciApIHsKKyAgICAgIEZUX0ZSRUUoIHNmbnRfZGF0YSApOwogICAgICAgZ290byBFeGl0OworICAgIH0KIAogICAgIGlzX2NmZiA9IHJsZW4gPiA0ICYmICFmdF9tZW1jbXAoIHNmbnRfZGF0YSwgIk9UVE8iLCA0ICk7CiAgICAgZXJyb3IgPSBvcGVuX2ZhY2VfZnJvbV9idWZmZXIoIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmbnRfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKXJsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VfaW5kZXhfaW5fcmVzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2NmZiA/ICJjZmYiIDogInRydWV0eXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZhY2UgKTsKQEAgLTE4OTMsMTMgKzE5MDEsMTQgQEAKICAgICBpZiAoIGVycm9yICkKICAgICAgIGdvdG8gRXhpdDsKIAotICAgIGlmICggICAgICAgICAgICBoZWFkZXJbIDBdICE9ICAwIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlYWRlcls3NF0gIT0gIDAgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVyWzgyXSAhPSAgMCB8fAotICAgICAgICAgICAgICAgICAgICBoZWFkZXJbIDFdID09ICAwIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlYWRlclsgMV0gPiAgMzMgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVyWzYzXSAhPSAgMCB8fAotICAgICAgICAgaGVhZGVyWzIgKyBoZWFkZXJbMV1dICE9ICAwICkKKyAgICBpZiAoICAgICAgICAgICAgaGVhZGVyWyAwXSAhPSAgIDAgfHwKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyWzc0XSAhPSAgIDAgfHwKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyWzgyXSAhPSAgIDAgfHwKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyWyAxXSA9PSAgIDAgfHwKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyWyAxXSA+ICAgMzMgfHwKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyWzYzXSAhPSAgIDAgfHwKKyAgICAgICAgIGhlYWRlclsyICsgaGVhZGVyWzFdXSAhPSAgIDAgfHwKKyAgICAgICAgICAgICAgICAgIGhlYWRlclsweDUzXSA+IDB4N0YgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CiAKICAgICBkbGVuID0gKCBoZWFkZXJbMHg1M10gPDwgMjQgKSB8CkBAIC0xOTEwLDcgKzE5MTksNyBAQAogICAgIHJsZW4gPSAoIGhlYWRlclsweDU3XSA8PCAyNCApIHwKICAgICAgICAgICAgKCBoZWFkZXJbMHg1OF0gPDwgMTYgKSB8CiAgICAgICAgICAgICggaGVhZGVyWzB4NTldIDw8ICA4ICkgfAotICAgICAgICAgICAgIGhlYWRlclsweDVhXTsKKyAgICAgICAgICAgICBoZWFkZXJbMHg1QV07CiAjZW5kaWYgLyogMCAqLwogICAgIG9mZnNldCA9IDEyOCArICggKCBkbGVuICsgMTI3ICkgJiB+MTI3ICk7CiAKQEAgLTE5MzQsNyArMTk0Myw3IEBACiAKICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKICAgICBGVF9FcnJvciAgIGVycm9yICA9IEZUX0VSUiggVW5rbm93bl9GaWxlX0Zvcm1hdCApOwotICAgIGludCAgICAgICAgaTsKKyAgICBGVF9VSW50ICAgIGk7CiAKICAgICBjaGFyICogICAgIGZpbGVfbmFtZXNbRlRfUkFDQ0VTU19OX1JVTEVTXTsKICAgICBGVF9Mb25nICAgIG9mZnNldHNbRlRfUkFDQ0VTU19OX1JVTEVTXTsKQEAgLTE5NDIsNyArMTk1MSw3IEBACiAgICAgRlRfQm9vbCAgICBpc19kYXJ3aW5fdmZzLCB2ZnNfcmZvcmtfaGFzX25vX2ZvbnQgPSBGQUxTRTsgLyogbm90IHRlc3RlZCAqLwogCiAgICAgRlRfT3Blbl9BcmdzICBhcmdzMjsKLSAgICBGVF9TdHJlYW0gICAgIHN0cmVhbTIgPSAwOworICAgIEZUX1N0cmVhbSAgICAgc3RyZWFtMiA9IE5VTEw7CiAKIAogICAgIEZUX1JhY2Nlc3NfR3Vlc3MoIGxpYnJhcnksIHN0cmVhbSwKQEAgLTIwMzYsNyArMjA0NSwxMSBAQAogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9yYWNjZXNzCiAKLSAgICAgIEZUX1RSQUNFMygoICJUcnkgYXMgZGZvbnQ6ICVzIC4uLiIsIGFyZ3MtPnBhdGhuYW1lICkpOworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICBGVF9UUkFDRTMoKCAiVHJ5IGFzIGRmb250OiAiICkpOworICAgICAgaWYgKCAhKCBhcmdzLT5mbGFncyAmIEZUX09QRU5fTUVNT1JZICkgKQorICAgICAgICBGVF9UUkFDRTMoKCAiJXMgLi4uIiwgYXJncy0+cGF0aG5hbWUgKSk7CisjZW5kaWYKIAogICAgICAgZXJyb3IgPSBJc01hY1Jlc291cmNlKCBsaWJyYXJ5LCBzdHJlYW0sIDAsIGZhY2VfaW5kZXgsIGFmYWNlICk7CiAKQEAgLTIxMDMsNyArMjExNiw3IEBACiAgICAgICBpZiAoIEZUX01PRFVMRV9JU19EUklWRVIoIGRyaXZlciApICkKICAgICAgIHsKICAgICAgICAgRlRfSW50ICAgICAgICAgbnVtX3BhcmFtcyA9IDA7Ci0gICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyAgICAgPSAwOworICAgICAgICBGVF9QYXJhbWV0ZXIqICBwYXJhbXMgICAgID0gTlVMTDsKIAogCiAgICAgICAgIGlmICggYXJncy0+ZmxhZ3MgJiBGVF9PUEVOX1BBUkFNUyApCkBAIC0yMTM3LDcgKzIxNTAsNyBAQAogICAgICAgICBpZiAoIEZUX01PRFVMRV9JU19EUklWRVIoIGN1clswXSApICkKICAgICAgICAgewogICAgICAgICAgIEZUX0ludCAgICAgICAgIG51bV9wYXJhbXMgPSAwOwotICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyAgICAgPSAwOworICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyAgICAgPSBOVUxMOwogCiAKICAgICAgICAgICBkcml2ZXIgPSBGVF9EUklWRVIoIGN1clswXSApOwpAQCAtMjQ0OCw4ICsyNDYxLDggQEAKICAgICBGVF9Ecml2ZXIgICAgICAgIGRyaXZlcjsKICAgICBGVF9Ecml2ZXJfQ2xhc3MgIGNsYXp6OwogCi0gICAgRlRfU2l6ZSAgICAgICAgICBzaXplID0gMDsKLSAgICBGVF9MaXN0Tm9kZSAgICAgIG5vZGUgPSAwOworICAgIEZUX1NpemUgICAgICAgICAgc2l6ZSA9IE5VTEw7CisgICAgRlRfTGlzdE5vZGUgICAgICBub2RlID0gTlVMTDsKIAogCiAgICAgaWYgKCAhZmFjZSApCkBAIC0yNDYxLDcgKzI0NzQsNyBAQAogICAgIGlmICggIWZhY2UtPmRyaXZlciApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRHJpdmVyX0hhbmRsZSApOwogCi0gICAgKmFzaXplID0gMDsKKyAgICAqYXNpemUgPSBOVUxMOwogCiAgICAgZHJpdmVyID0gZmFjZS0+ZHJpdmVyOwogICAgIGNsYXp6ICA9IGRyaXZlci0+Y2xheno7CkBAIC0yNDc0LDcgKzI0ODcsNyBAQAogICAgIHNpemUtPmZhY2UgPSBmYWNlOwogCiAgICAgLyogZm9yIG5vdywgZG8gbm90IHVzZSBhbnkgaW50ZXJuYWwgZmllbGRzIGluIHNpemUgb2JqZWN0cyAqLwotICAgIHNpemUtPmludGVybmFsID0gMDsKKyAgICBzaXplLT5pbnRlcm5hbCA9IE5VTEw7CiAKICAgICBpZiAoIGNsYXp6LT5pbml0X3NpemUgKQogICAgICAgZXJyb3IgPSBjbGF6ei0+aW5pdF9zaXplKCBzaXplICk7CkBAIC0yNTMyLDcgKzI1NDUsNyBAQAogCiAgICAgICBpZiAoIGZhY2UtPnNpemUgPT0gc2l6ZSApCiAgICAgICB7Ci0gICAgICAgIGZhY2UtPnNpemUgPSAwOworICAgICAgICBmYWNlLT5zaXplID0gTlVMTDsKICAgICAgICAgaWYgKCBmYWNlLT5zaXplc19saXN0LmhlYWQgKQogICAgICAgICAgIGZhY2UtPnNpemUgPSAoRlRfU2l6ZSkoZmFjZS0+c2l6ZXNfbGlzdC5oZWFkLT5kYXRhKTsKICAgICAgIH0KQEAgLTMwMTgsMTQgKzMwMzEsMTQgQEAKICAgICAgIHBpeGVsX2hlaWdodCA9IDE7CiAKICAgICAvKiB1c2UgYD49JyB0byBhdm9pZCBwb3RlbnRpYWwgY29tcGlsZXIgd2FybmluZyBvbiAxNmJpdCBwbGF0Zm9ybXMgKi8KLSAgICBpZiAoIHBpeGVsX3dpZHRoICA+PSAweEZGRkZVICkKLSAgICAgIHBpeGVsX3dpZHRoICA9IDB4RkZGRlU7CisgICAgaWYgKCBwaXhlbF93aWR0aCA+PSAweEZGRkZVICkKKyAgICAgIHBpeGVsX3dpZHRoID0gMHhGRkZGVTsKICAgICBpZiAoIHBpeGVsX2hlaWdodCA+PSAweEZGRkZVICkKICAgICAgIHBpeGVsX2hlaWdodCA9IDB4RkZGRlU7CiAKICAgICByZXEudHlwZSAgICAgICAgICAgPSBGVF9TSVpFX1JFUVVFU1RfVFlQRV9OT01JTkFMOwotICAgIHJlcS53aWR0aCAgICAgICAgICA9IHBpeGVsX3dpZHRoIDw8IDY7Ci0gICAgcmVxLmhlaWdodCAgICAgICAgID0gcGl4ZWxfaGVpZ2h0IDw8IDY7CisgICAgcmVxLndpZHRoICAgICAgICAgID0gKEZUX0xvbmcpKCBwaXhlbF93aWR0aCA8PCA2ICk7CisgICAgcmVxLmhlaWdodCAgICAgICAgID0gKEZUX0xvbmcpKCBwaXhlbF9oZWlnaHQgPDwgNiApOwogICAgIHJlcS5ob3JpUmVzb2x1dGlvbiA9IDA7CiAgICAgcmVxLnZlcnRSZXNvbHV0aW9uID0gMDsKIApAQCAtMzA3MiwxOCArMzA4NSwzNyBAQAogCiAgICAgICAgICAgaWYgKCBrZXJuX21vZGUgIT0gRlRfS0VSTklOR19VTkZJVFRFRCApCiAgICAgICAgICAgeworICAgICAgICAgICAgRlRfUG9zICBvcmlnX3ggPSBha2VybmluZy0+eDsKKyAgICAgICAgICAgIEZUX1BvcyAgb3JpZ195ID0gYWtlcm5pbmctPnk7CisKKwogICAgICAgICAgICAgLyogd2Ugc2NhbGUgZG93biBrZXJuaW5nIHZhbHVlcyBmb3Igc21hbGwgcHBlbSB2YWx1ZXMgKi8KICAgICAgICAgICAgIC8qIHRvIGF2b2lkIHRoYXQgcm91bmRpbmcgbWFrZXMgdGhlbSB0b28gYmlnLiAgICAgICAgICovCiAgICAgICAgICAgICAvKiBgMjUnIGhhcyBiZWVuIGRldGVybWluZWQgaGV1cmlzdGljYWxseS4gICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKCBmYWNlLT5zaXplLT5tZXRyaWNzLnhfcHBlbSA8IDI1ICkKLSAgICAgICAgICAgICAgYWtlcm5pbmctPnggPSBGVF9NdWxEaXYoIGFrZXJuaW5nLT54LAorICAgICAgICAgICAgICBha2VybmluZy0+eCA9IEZUX011bERpdiggb3JpZ194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+c2l6ZS0+bWV0cmljcy54X3BwZW0sIDI1ICk7CiAgICAgICAgICAgICBpZiAoIGZhY2UtPnNpemUtPm1ldHJpY3MueV9wcGVtIDwgMjUgKQotICAgICAgICAgICAgICBha2VybmluZy0+eSA9IEZUX011bERpdiggYWtlcm5pbmctPnksCisgICAgICAgICAgICAgIGFrZXJuaW5nLT55ID0gRlRfTXVsRGl2KCBvcmlnX3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5zaXplLT5tZXRyaWNzLnlfcHBlbSwgMjUgKTsKIAogICAgICAgICAgICAgYWtlcm5pbmctPnggPSBGVF9QSVhfUk9VTkQoIGFrZXJuaW5nLT54ICk7CiAgICAgICAgICAgICBha2VybmluZy0+eSA9IEZUX1BJWF9ST1VORCggYWtlcm5pbmctPnkgKTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX1BvcyAgb3JpZ194X3JvdW5kZWQgPSBGVF9QSVhfUk9VTkQoIG9yaWdfeCApOworICAgICAgICAgICAgICBGVF9Qb3MgIG9yaWdfeV9yb3VuZGVkID0gRlRfUElYX1JPVU5EKCBvcmlnX3kgKTsKKworCisgICAgICAgICAgICAgIGlmICggYWtlcm5pbmctPnggIT0gb3JpZ194X3JvdW5kZWQgfHwKKyAgICAgICAgICAgICAgICAgICBha2VybmluZy0+eSAhPSBvcmlnX3lfcm91bmRlZCApCisgICAgICAgICAgICAgICAgRlRfVFJBQ0U1KCggIkZUX0dldF9LZXJuaW5nOiBob3Jpem9udGFsIGtlcm5pbmciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAoJWQsICVkKSBzY2FsZWQgZG93biB0byAoJWQsICVkKSBwaXhlbHNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ194X3JvdW5kZWQgLyA2NCwgb3JpZ195X3JvdW5kZWQgLyA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBha2VybmluZy0+eCAvIDY0LCBha2VybmluZy0+eSAvIDY0ICkpOworICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CkBAIC0zMzU0LDggKzMzODYsMTIgQEAKICAgICAgICAgRlRfVFJBQ0UxKCggIkZUX0dldF9DaGFyX0luZGV4OiB0b28gbGFyZ2UgY2hhcmNvZGUiICkpOwogICAgICAgICBGVF9UUkFDRTEoKCAiIDB4JXggaXMgdHJ1bmNhdGVkXG4iLCBjaGFyY29kZSApKTsKICAgICAgIH0KKwogICAgICAgcmVzdWx0ID0gY21hcC0+Y2xhenotPmNoYXJfaW5kZXgoIGNtYXAsIChGVF9VSW50MzIpY2hhcmNvZGUgKTsKKyAgICAgIGlmICggcmVzdWx0ID49IChGVF9VSW50KWZhY2UtPm51bV9nbHlwaHMgKQorICAgICAgICByZXN1bHQgPSAwOwogICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIApAQCAtMzM3NCw3ICszNDEwLDcgQEAKICAgICBpZiAoIGZhY2UgJiYgZmFjZS0+Y2hhcm1hcCAmJiBmYWNlLT5udW1fZ2x5cGhzICkKICAgICB7CiAgICAgICBnaW5kZXggPSBGVF9HZXRfQ2hhcl9JbmRleCggZmFjZSwgMCApOwotICAgICAgaWYgKCBnaW5kZXggPT0gMCB8fCBnaW5kZXggPj0gKEZUX1VJbnQpZmFjZS0+bnVtX2dseXBocyApCisgICAgICBpZiAoIGdpbmRleCA9PSAwICkKICAgICAgICAgcmVzdWx0ID0gRlRfR2V0X05leHRfQ2hhciggZmFjZSwgMCwgJmdpbmRleCApOwogICAgIH0KIApAQCAtMzY0OCw4ICszNjg0LDEwIEBACiAgICAgLyogY2xlYW4gdXAgYnVmZmVyICovCiAgICAgKChGVF9CeXRlKilidWZmZXIpWzBdID0gJ1wwJzsKIAotICAgIGlmICggKEZUX0xvbmcpZ2x5cGhfaW5kZXggPiBmYWNlLT5udW1fZ2x5cGhzIHx8Ci0gICAgICAgICAhRlRfSEFTX0dMWVBIX05BTUVTKCBmYWNlICkgICAgICAgICAgICAgKQorICAgIGlmICggKEZUX0xvbmcpZ2x5cGhfaW5kZXggPj0gZmFjZS0+bnVtX2dseXBocyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfR2x5cGhfSW5kZXggKTsKKworICAgIGlmICggIUZUX0hBU19HTFlQSF9OQU1FUyggZmFjZSApICkKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwogCiAgICAgRlRfRkFDRV9MT09LVVBfU0VSVklDRSggZmFjZSwgc2VydmljZSwgR0xZUEhfRElDVCApOwpAQCAtMzg1MCw3ICszODg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICBGVF9MaXN0Tm9kZSogICAgIG5vZGUgKQogICB7CiAgICAgRlRfTGlzdE5vZGUgIGN1cjsKLSAgICBGVF9SZW5kZXJlciAgcmVzdWx0ID0gMDsKKyAgICBGVF9SZW5kZXJlciAgcmVzdWx0ID0gTlVMTDsKIAogCiAgICAgaWYgKCAhbGlicmFyeSApCkBAIC0zODYyLDcgKzM5MDAsNyBAQAogICAgIHsKICAgICAgIGlmICggKm5vZGUgKQogICAgICAgICBjdXIgPSAoKm5vZGUpLT5uZXh0OwotICAgICAgKm5vZGUgPSAwOworICAgICAgKm5vZGUgPSBOVUxMOwogICAgIH0KIAogICAgIHdoaWxlICggY3VyICkKQEAgLTQwODIsOCArNDEyMCw3IEBACiAKICAgICBkZWZhdWx0OgogICAgICAgewotICAgICAgICBGVF9MaXN0Tm9kZSAgbm9kZSAgID0gMDsKLSAgICAgICAgRlRfQm9vbCAgICAgIHVwZGF0ZSA9IDA7CisgICAgICAgIEZUX0xpc3ROb2RlICBub2RlID0gTlVMTDsKIAogCiAgICAgICAgIC8qIHNtYWxsIHNob3J0Y3V0IGZvciB0aGUgdmVyeSBjb21tb24gY2FzZSAqLwpAQCAtNDExMCwxNiArNDE0Nyw2IEBACiAgICAgICAgICAgLyogbm93LCBsb29rIGZvciBhbm90aGVyIHJlbmRlcmVyIHRoYXQgc3VwcG9ydHMgdGhlIHNhbWUgKi8KICAgICAgICAgICAvKiBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgIHJlbmRlcmVyID0gRlRfTG9va3VwX1JlbmRlcmVyKCBsaWJyYXJ5LCBzbG90LT5mb3JtYXQsICZub2RlICk7Ci0gICAgICAgICAgdXBkYXRlICAgPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogaWYgd2UgY2hhbmdlZCB0aGUgY3VycmVudCByZW5kZXJlciBmb3IgdGhlIGdseXBoIGltYWdlIGZvcm1hdCAqLwotICAgICAgICAvKiB3ZSBuZWVkIHRvIHNlbGVjdCBpdCBhcyB0aGUgbmV4dCBjdXJyZW50IG9uZSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGlmICggIWVycm9yICYmIHVwZGF0ZSAmJiByZW5kZXJlciApCi0gICAgICAgIHsKLSAgICAgICAgICBlcnJvciA9IEZUX1NldF9SZW5kZXJlciggbGlicmFyeSwgcmVuZGVyZXIsIDAsIDAgKTsKLSAgICAgICAgICBpZiAoIGVycm9yICkKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtNDEzNiw3ICs0MTYzLDcgQEAKICAgICAgIEZUX0Vycm9yICAgZXJyOwogCiAKLSAgICAgIEZUX0JpdG1hcF9OZXcoICZiaXRtYXAgKTsKKyAgICAgIEZUX0JpdG1hcF9Jbml0KCAmYml0bWFwICk7CiAKICAgICAgIC8qIHRoaXMgYWxzbyBjb252ZXJ0cyB0aGUgYml0bWFwIGZsb3cgdG8gYGRvd24nIChpLmUuLCBwaXRjaCA+IDApICovCiAgICAgICBlcnIgPSBGVF9CaXRtYXBfQ29udmVydCggbGlicmFyeSwgJnNsb3QtPmJpdG1hcCwgJmJpdG1hcCwgMSApOwpAQCAtNDE0NSwxNSArNDE3MiwxNyBAQAogICAgICAgICBNRDVfQ1RYICAgICAgICBjdHg7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgIG1kNVsxNl07CiAgICAgICAgIGludCAgICAgICAgICAgIGk7CisgICAgICAgIHVuc2lnbmVkIGludCAgIHJvd3MgID0gYml0bWFwLnJvd3M7CisgICAgICAgIHVuc2lnbmVkIGludCAgIHBpdGNoID0gKHVuc2lnbmVkIGludCliaXRtYXAucGl0Y2g7CiAKIAotICAgICAgICBNRDVfSW5pdCggJmN0eCk7Ci0gICAgICAgIE1ENV9VcGRhdGUoICZjdHgsIGJpdG1hcC5idWZmZXIsIGJpdG1hcC5yb3dzICogYml0bWFwLnBpdGNoICk7CisgICAgICAgIE1ENV9Jbml0KCAmY3R4ICk7CisgICAgICAgIE1ENV9VcGRhdGUoICZjdHgsIGJpdG1hcC5idWZmZXIsIHJvd3MgKiBwaXRjaCApOwogICAgICAgICBNRDVfRmluYWwoIG1kNSwgJmN0eCApOwogCiAgICAgICAgIEZUX1RSQUNFMygoICJNRDUgY2hlY2tzdW0gZm9yICVkeCVkIGJpdG1hcDpcbiIKICAgICAgICAgICAgICAgICAgICAgIiAgIiwKLSAgICAgICAgICAgICAgICAgICAgYml0bWFwLnJvd3MsIGJpdG1hcC5waXRjaCApKTsKKyAgICAgICAgICAgICAgICAgICAgcm93cywgcGl0Y2ggKSk7CiAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgMTY7IGkrKyApCiAgICAgICAgICAgRlRfVFJBQ0UzKCggIiUwMlgiLCBtZDVbaV0gKSk7CiAgICAgICAgIEZUX1RSQUNFMygoICJcbiIgKSk7CkBAIC00MjI2LDcgKzQyNTUsNyBAQAogCiAKICAgICBpZiAoIGxpYnJhcnkgJiYgbGlicmFyeS0+YXV0b19oaW50ZXIgPT0gbW9kdWxlICkKLSAgICAgIGxpYnJhcnktPmF1dG9faGludGVyID0gMDsKKyAgICAgIGxpYnJhcnktPmF1dG9faGludGVyID0gTlVMTDsKIAogICAgIC8qIGlmIHRoZSBtb2R1bGUgaXMgYSByZW5kZXJlciAqLwogICAgIGlmICggRlRfTU9EVUxFX0lTX1JFTkRFUkVSKCBtb2R1bGUgKSApCkBAIC00MzIyLDE3ICs0MzUxLDEwIEBACiAgICAgLyogaWYgdGhlIG1vZHVsZSBpcyBhIGZvbnQgZHJpdmVyICovCiAgICAgaWYgKCBGVF9NT0RVTEVfSVNfRFJJVkVSKCBtb2R1bGUgKSApCiAgICAgewotICAgICAgLyogYWxsb2NhdGUgZ2x5cGggbG9hZGVyIGlmIG5lZWRlZCAqLwogICAgICAgRlRfRHJpdmVyICBkcml2ZXIgPSBGVF9EUklWRVIoIG1vZHVsZSApOwogCiAKICAgICAgIGRyaXZlci0+Y2xhenogPSAoRlRfRHJpdmVyX0NsYXNzKW1vZHVsZS0+Y2xheno7Ci0gICAgICBpZiAoIEZUX0RSSVZFUl9VU0VTX09VVExJTkVTKCBkcml2ZXIgKSApCi0gICAgICB7Ci0gICAgICAgIGVycm9yID0gRlRfR2x5cGhMb2FkZXJfTmV3KCBtZW1vcnksICZkcml2ZXItPmdseXBoX2xvYWRlciApOwotICAgICAgICBpZiAoIGVycm9yICkKLSAgICAgICAgICBnb3RvIEZhaWw7Ci0gICAgICB9CiAgICAgfQogCiAgICAgaWYgKCBjbGF6ei0+bW9kdWxlX2luaXQgKQpAQCAtNDM0OSwxNSArNDM3MSw2IEBACiAgICAgcmV0dXJuIGVycm9yOwogCiAgIEZhaWw6Ci0gICAgaWYgKCBGVF9NT0RVTEVfSVNfRFJJVkVSKCBtb2R1bGUgKSApCi0gICAgewotICAgICAgRlRfRHJpdmVyICBkcml2ZXIgPSBGVF9EUklWRVIoIG1vZHVsZSApOwotCi0KLSAgICAgIGlmICggRlRfRFJJVkVSX1VTRVNfT1VUTElORVMoIGRyaXZlciApICkKLSAgICAgICAgRlRfR2x5cGhMb2FkZXJfRG9uZSggZHJpdmVyLT5nbHlwaF9sb2FkZXIgKTsKLSAgICB9Ci0KICAgICBpZiAoIEZUX01PRFVMRV9JU19SRU5ERVJFUiggbW9kdWxlICkgKQogICAgIHsKICAgICAgIEZUX1JlbmRlcmVyICByZW5kZXJlciA9IEZUX1JFTkRFUkVSKCBtb2R1bGUgKTsKQEAgLTQ0OTIsNyArNDUwNSw3IEBACiAgICAgICAgICAgICBjdXJbMF0gPSBjdXJbMV07CiAgICAgICAgICAgICBjdXIrKzsKICAgICAgICAgICB9Ci0gICAgICAgICAgbGltaXRbMF0gPSAwOworICAgICAgICAgIGxpbWl0WzBdID0gTlVMTDsKIAogICAgICAgICAgIC8qIGRlc3Ryb3kgdGhlIG1vZHVsZSAqLwogICAgICAgICAgIERlc3Ryb3lfTW9kdWxlKCBtb2R1bGUgKTsKQEAgLTQ2NzUsMTIgKzQ2ODgsOSBAQAogICAgICAgZ290byBGYWlsOwogI2VuZGlmCiAKLSAgICAvKiBhbGxvY2F0ZSB0aGUgcmVuZGVyIHBvb2wgKi8KLSAgICBsaWJyYXJ5LT5yYXN0ZXJfcG9vbF9zaXplID0gRlRfUkVOREVSX1BPT0xfU0laRTsKLSNpZiBGVF9SRU5ERVJfUE9PTF9TSVpFID4gMAotICAgIGlmICggRlRfQUxMT0MoIGxpYnJhcnktPnJhc3Rlcl9wb29sLCBGVF9SRU5ERVJfUE9PTF9TSVpFICkgKQotICAgICAgZ290byBGYWlsOwotI2VuZGlmCisgICAgLyogd2UgZG9uJ3QgdXNlIHJhc3Rlcl9wb29sIGFueW1vcmUuICovCisgICAgbGlicmFyeS0+cmFzdGVyX3Bvb2xfc2l6ZSA9IDA7CisgICAgbGlicmFyeS0+cmFzdGVyX3Bvb2wgICAgICA9IE5VTEw7CiAKICAgICBsaWJyYXJ5LT52ZXJzaW9uX21ham9yID0gRlJFRVRZUEVfTUFKT1I7CiAgICAgbGlicmFyeS0+dmVyc2lvbl9taW5vciA9IEZSRUVUWVBFX01JTk9SOwpAQCAtNDY5Myw4ICs0NzAzLDggQEAKIAogICAgIHJldHVybiBGVF9FcnJfT2s7CiAKLSAgRmFpbDoKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworICBGYWlsOgogICAgIGZ0X3BpY19jb250YWluZXJfZGVzdHJveSggbGlicmFyeSApOwogI2VuZGlmCiAgICAgRlRfRlJFRSggbGlicmFyeSApOwpAQCAtNDgyMywxNiArNDgzMywxMiBAQAogICAgICAgICBpZiAoIG1vZHVsZSApCiAgICAgICAgIHsKICAgICAgICAgICBEZXN0cm95X01vZHVsZSggbW9kdWxlICk7Ci0gICAgICAgICAgbGlicmFyeS0+bW9kdWxlc1tuXSA9IDA7CisgICAgICAgICAgbGlicmFyeS0+bW9kdWxlc1tuXSA9IE5VTEw7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAotICAgIC8qIERlc3Ryb3kgcmFzdGVyIG9iamVjdHMgKi8KLSAgICBGVF9GUkVFKCBsaWJyYXJ5LT5yYXN0ZXJfcG9vbCApOwotICAgIGxpYnJhcnktPnJhc3Rlcl9wb29sX3NpemUgPSAwOwotCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKICAgICAvKiBEZXN0cm95IHBpYyBjb250YWluZXIgY29udGVudHMgKi8KICAgICBmdF9waWNfY29udGFpbmVyX2Rlc3Ryb3koIGxpYnJhcnkgKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0b3R2YWwuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0b3R2YWwuYwppbmRleCA1ZmM3M2Q3Li43ODY0NTdiIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdG90dmFsLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRvdHZhbC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBPcGVuVHlwZSB0YWJsZXMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LCAyMDA2LCAyMDA4LCAyMDEwLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdG91dGxuLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdG91dGxuLmMKaW5kZXggODc0OWQ2NC4uMzVjYzlmNSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRvdXRsbi5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0b3V0bG4uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBvdXRsaW5lIG1hbmFnZW1lbnQgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA4LCAyMDEwLCAyMDEyLTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNTIsOCArNTIsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfT3V0bGluZV9GdW5jcyogIGZ1bmNfaW50ZXJmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgIHVzZXIgKQogICB7Ci0jdW5kZWYgU0NBTEVECi0jZGVmaW5lIFNDQUxFRCggeCApICAoICggKHgpIDw8IHNoaWZ0ICkgLSBkZWx0YSApCisjdW5kZWYgIFNDQUxFRAorI2RlZmluZSBTQ0FMRUQoIHggKSAgKCAoICh4KSA8IDAgPyAtKCAtKHgpIDw8IHNoaWZ0ICkgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgKCAgKHgpIDw8IHNoaWZ0ICkgKSAtIGRlbHRhICkKIAogICAgIEZUX1ZlY3RvciAgIHZfbGFzdDsKICAgICBGVF9WZWN0b3IgICB2X2NvbnRyb2w7CkBAIC0yNzksNyArMjgwLDcgQEAKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAgIGZpcnN0ID0gbGFzdCArIDE7CisgICAgICBmaXJzdCA9IChGVF9VSW50KWxhc3QgKyAxOwogICAgIH0KIAogICAgIEZUX1RSQUNFNSgoICJGVF9PdXRsaW5lX0RlY29tcG9zZTogRG9uZVxuIiwgbiApKTsKQEAgLTMyMCw3ICszMjEsNyBAQAogICAgICAgICAgRlRfTkVXX0FSUkFZKCBhbm91dGxpbmUtPmNvbnRvdXJzLCBudW1Db250b3VycyApICkKICAgICAgIGdvdG8gRmFpbDsKIAotICAgIGFub3V0bGluZS0+bl9wb2ludHMgICAgPSAoRlRfVVNob3J0KW51bVBvaW50czsKKyAgICBhbm91dGxpbmUtPm5fcG9pbnRzICAgID0gKEZUX1Nob3J0KW51bVBvaW50czsKICAgICBhbm91dGxpbmUtPm5fY29udG91cnMgID0gKEZUX1Nob3J0KW51bUNvbnRvdXJzOwogICAgIGFub3V0bGluZS0+ZmxhZ3MgICAgICB8PSBGVF9PVVRMSU5FX09XTkVSOwogCkBAIC02MTIsNyArNjEzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgIEZUX1Jhc3Rlcl9QYXJhbXMqICBwYXJhbXMgKQogICB7CiAgICAgRlRfRXJyb3IgICAgIGVycm9yOwotICAgIEZUX0Jvb2wgICAgICB1cGRhdGUgPSBGQUxTRTsKICAgICBGVF9SZW5kZXJlciAgcmVuZGVyZXI7CiAgICAgRlRfTGlzdE5vZGUgIG5vZGU7CiAKQEAgLTY0NiwxNCArNjQ2LDggQEAKICAgICAgIC8qIGZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICByZW5kZXJlciA9IEZUX0xvb2t1cF9SZW5kZXJlciggbGlicmFyeSwgRlRfR0xZUEhfRk9STUFUX09VVExJTkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5vZGUgKTsKLSAgICAgIHVwZGF0ZSAgID0gVFJVRTsKICAgICB9CiAKLSAgICAvKiBpZiB3ZSBjaGFuZ2VkIHRoZSBjdXJyZW50IHJlbmRlcmVyIGZvciB0aGUgZ2x5cGggaW1hZ2UgZm9ybWF0ICovCi0gICAgLyogd2UgbmVlZCB0byBzZWxlY3QgaXQgYXMgdGhlIG5leHQgY3VycmVudCBvbmUgICAgICAgICAgICAgICAgICAqLwotICAgIGlmICggIWVycm9yICYmIHVwZGF0ZSAmJiByZW5kZXJlciApCi0gICAgICBlcnJvciA9IEZUX1NldF9SZW5kZXJlciggbGlicmFyeSwgcmVuZGVyZXIsIDAsIDAgKTsKLQogICAgIHJldHVybiBlcnJvcjsKICAgfQogCkBAIC05MTQsOCArOTA4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgeXN0cmVuZ3RoICkKICAgewogICAgIEZUX1ZlY3RvciogIHBvaW50czsKLSAgICBGVF9WZWN0b3IgICB2X3ByZXYsIHZfZmlyc3QsIHZfbmV4dCwgdl9jdXI7Ci0gICAgRlRfSW50ICAgICAgYywgbiwgZmlyc3Q7CisgICAgRlRfSW50ICAgICAgYywgZmlyc3QsIGxhc3Q7CiAgICAgRlRfSW50ICAgICAgb3JpZW50YXRpb247CiAKIApAQCAtOTQxLDg3ICs5MzQsOTUgQEAKICAgICBmaXJzdCA9IDA7CiAgICAgZm9yICggYyA9IDA7IGMgPCBvdXRsaW5lLT5uX2NvbnRvdXJzOyBjKysgKQogICAgIHsKLSAgICAgIEZUX1ZlY3RvciAgaW4sIG91dCwgc2hpZnQ7Ci0gICAgICBGVF9GaXhlZCAgIGxfaW4sIGxfb3V0LCBsLCBxLCBkOwotICAgICAgaW50ICAgICAgICBsYXN0ID0gb3V0bGluZS0+Y29udG91cnNbY107CisgICAgICBGVF9WZWN0b3IgIGluLCBvdXQsIGFuY2hvciwgc2hpZnQ7CisgICAgICBGVF9GaXhlZCAgIGxfaW4sIGxfb3V0LCBsX2FuY2hvciA9IDAsIGwsIHEsIGQ7CisgICAgICBGVF9JbnQgICAgIGksIGosIGs7CiAKIAotICAgICAgdl9maXJzdCA9IHBvaW50c1tmaXJzdF07Ci0gICAgICB2X3ByZXYgID0gcG9pbnRzW2xhc3RdOwotICAgICAgdl9jdXIgICA9IHZfZmlyc3Q7CisgICAgICBsX2luID0gMDsKKyAgICAgIGxhc3QgPSBvdXRsaW5lLT5jb250b3Vyc1tjXTsKIAotICAgICAgLyogY29tcHV0ZSBpbmNvbWluZyBub3JtYWxpemVkIHZlY3RvciAqLwotICAgICAgaW4ueCA9IHZfY3VyLnggLSB2X3ByZXYueDsKLSAgICAgIGluLnkgPSB2X2N1ci55IC0gdl9wcmV2Lnk7Ci0gICAgICBsX2luID0gRlRfVmVjdG9yX0xlbmd0aCggJmluICk7Ci0gICAgICBpZiAoIGxfaW4gKQorICAgICAgLyogQ291bnRlciBqIGN5Y2xlcyB0aG91Z2ggdGhlIHBvaW50czsgY291bnRlciBpIGFkdmFuY2VzIG9ubHkgICovCisgICAgICAvKiB3aGVuIHBvaW50cyBhcmUgbW92ZWQ7IGFuY2hvciBrIG1hcmtzIHRoZSBmaXJzdCBtb3ZlZCBwb2ludC4gKi8KKyAgICAgIGZvciAoIGkgPSBsYXN0LCBqID0gZmlyc3QsIGsgPSAtMTsKKyAgICAgICAgICAgIGogIT0gaSAmJiBpICE9IGs7CisgICAgICAgICAgICBqID0gaiA8IGxhc3QgPyBqICsgMSA6IGZpcnN0ICkKICAgICAgIHsKLSAgICAgICAgaW4ueCA9IEZUX0RpdkZpeCggaW4ueCwgbF9pbiApOwotICAgICAgICBpbi55ID0gRlRfRGl2Rml4KCBpbi55LCBsX2luICk7Ci0gICAgICB9Ci0KLSAgICAgIGZvciAoIG4gPSBmaXJzdDsgbiA8PSBsYXN0OyBuKysgKQotICAgICAgewotICAgICAgICBpZiAoIG4gPCBsYXN0ICkKLSAgICAgICAgICB2X25leHQgPSBwb2ludHNbbiArIDFdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdl9uZXh0ID0gdl9maXJzdDsKLQotICAgICAgICAvKiBjb21wdXRlIG91dGdvaW5nIG5vcm1hbGl6ZWQgdmVjdG9yICovCi0gICAgICAgIG91dC54ID0gdl9uZXh0LnggLSB2X2N1ci54OwotICAgICAgICBvdXQueSA9IHZfbmV4dC55IC0gdl9jdXIueTsKLSAgICAgICAgbF9vdXQgPSBGVF9WZWN0b3JfTGVuZ3RoKCAmb3V0ICk7Ci0gICAgICAgIGlmICggbF9vdXQgKQorICAgICAgICBpZiAoIGogIT0gayApCiAgICAgICAgIHsKLSAgICAgICAgICBvdXQueCA9IEZUX0RpdkZpeCggb3V0LngsIGxfb3V0ICk7Ci0gICAgICAgICAgb3V0LnkgPSBGVF9EaXZGaXgoIG91dC55LCBsX291dCApOwotICAgICAgICB9CisgICAgICAgICAgb3V0LnggPSBwb2ludHNbal0ueCAtIHBvaW50c1tpXS54OworICAgICAgICAgIG91dC55ID0gcG9pbnRzW2pdLnkgLSBwb2ludHNbaV0ueTsKKyAgICAgICAgICBsX291dCA9IChGVF9GaXhlZClGVF9WZWN0b3JfTm9ybUxlbiggJm91dCApOwogCi0gICAgICAgIGQgPSBGVF9NdWxGaXgoIGluLngsIG91dC54ICkgKyBGVF9NdWxGaXgoIGluLnksIG91dC55ICk7Ci0KLSAgICAgICAgLyogc2hpZnQgb25seSBpZiB0dXJuIGlzIGxlc3MgdGhhbiB+MTYwIGRlZ3JlZXMgKi8KLSAgICAgICAgaWYgKCBkID4gLTB4RjAwMEwgKQotICAgICAgICB7Ci0gICAgICAgICAgZCA9IGQgKyAweDEwMDAwTDsKLQotICAgICAgICAgIC8qIHNoaWZ0IGNvbXBvbmVudHMgYXJlIGFsaWduZWQgYWxvbmcgbGF0ZXJhbCBiaXNlY3RvciAqLwotICAgICAgICAgIC8qIGFuZCBkaXJlY3RlZCBhY2NvcmRpbmcgdG8gdGhlIG91dGxpbmUgb3JpZW50YXRpb24uICAqLwotICAgICAgICAgIHNoaWZ0LnggPSBpbi55ICsgb3V0Lnk7Ci0gICAgICAgICAgc2hpZnQueSA9IGluLnggKyBvdXQueDsKLQotICAgICAgICAgIGlmICggb3JpZW50YXRpb24gPT0gRlRfT1JJRU5UQVRJT05fVFJVRVRZUEUgKQotICAgICAgICAgICAgc2hpZnQueCA9IC1zaGlmdC54OwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNoaWZ0LnkgPSAtc2hpZnQueTsKLQotICAgICAgICAgIC8qIHJlc3RyaWN0IHNoaWZ0IG1hZ25pdHVkZSB0byBiZXR0ZXIgaGFuZGxlIGNvbGxhcHNpbmcgc2VnbWVudHMgKi8KLSAgICAgICAgICBxID0gRlRfTXVsRml4KCBvdXQueCwgaW4ueSApIC0gRlRfTXVsRml4KCBvdXQueSwgaW4ueCApOwotICAgICAgICAgIGlmICggb3JpZW50YXRpb24gPT0gRlRfT1JJRU5UQVRJT05fVFJVRVRZUEUgKQotICAgICAgICAgICAgcSA9IC1xOwotCi0gICAgICAgICAgbCA9IEZUX01JTiggbF9pbiwgbF9vdXQgKTsKLQotICAgICAgICAgIC8qIG5vbi1zdHJpY3QgaW5lcXVhbGl0aWVzIGF2b2lkIGRpdmlkZS1ieS16ZXJvIHdoZW4gcSA9PSBsID09IDAgKi8KLSAgICAgICAgICBpZiAoIEZUX011bEZpeCggeHN0cmVuZ3RoLCBxICkgPD0gRlRfTXVsRml4KCBkLCBsICkgKQotICAgICAgICAgICAgc2hpZnQueCA9IEZUX011bERpdiggc2hpZnQueCwgeHN0cmVuZ3RoLCBkICk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2hpZnQueCA9IEZUX011bERpdiggc2hpZnQueCwgbCwgcSApOwotCi0KLSAgICAgICAgICBpZiAoIEZUX011bEZpeCggeXN0cmVuZ3RoLCBxICkgPD0gRlRfTXVsRml4KCBkLCBsICkgKQotICAgICAgICAgICAgc2hpZnQueSA9IEZUX011bERpdiggc2hpZnQueSwgeXN0cmVuZ3RoLCBkICk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2hpZnQueSA9IEZUX011bERpdiggc2hpZnQueSwgbCwgcSApOworICAgICAgICAgIGlmICggbF9vdXQgPT0gMCApCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCi0gICAgICAgICAgc2hpZnQueCA9IHNoaWZ0LnkgPSAwOworICAgICAgICB7CisgICAgICAgICAgb3V0ICAgPSBhbmNob3I7CisgICAgICAgICAgbF9vdXQgPSBsX2FuY2hvcjsKKyAgICAgICAgfQogCi0gICAgICAgIG91dGxpbmUtPnBvaW50c1tuXS54ID0gdl9jdXIueCArIHhzdHJlbmd0aCArIHNoaWZ0Lng7Ci0gICAgICAgIG91dGxpbmUtPnBvaW50c1tuXS55ID0gdl9jdXIueSArIHlzdHJlbmd0aCArIHNoaWZ0Lnk7CisgICAgICAgIGlmICggbF9pbiAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggayA8IDAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGsgICAgICAgID0gaTsKKyAgICAgICAgICAgIGFuY2hvciAgID0gaW47CisgICAgICAgICAgICBsX2FuY2hvciA9IGxfaW47CisgICAgICAgICAgfQogCi0gICAgICAgIGluICAgID0gb3V0OwotICAgICAgICBsX2luICA9IGxfb3V0OwotICAgICAgICB2X2N1ciA9IHZfbmV4dDsKKyAgICAgICAgICBkID0gRlRfTXVsRml4KCBpbi54LCBvdXQueCApICsgRlRfTXVsRml4KCBpbi55LCBvdXQueSApOworCisgICAgICAgICAgLyogc2hpZnQgb25seSBpZiB0dXJuIGlzIGxlc3MgdGhhbiB+MTYwIGRlZ3JlZXMgKi8KKyAgICAgICAgICBpZiAoIGQgPiAtMHhGMDAwTCApCisgICAgICAgICAgeworICAgICAgICAgICAgZCA9IGQgKyAweDEwMDAwTDsKKworICAgICAgICAgICAgLyogc2hpZnQgY29tcG9uZW50cyBhbG9uZyBsYXRlcmFsIGJpc2VjdG9yIGluIHByb3BlciBvcmllbnRhdGlvbiAqLworICAgICAgICAgICAgc2hpZnQueCA9IGluLnkgKyBvdXQueTsKKyAgICAgICAgICAgIHNoaWZ0LnkgPSBpbi54ICsgb3V0Lng7CisKKyAgICAgICAgICAgIGlmICggb3JpZW50YXRpb24gPT0gRlRfT1JJRU5UQVRJT05fVFJVRVRZUEUgKQorICAgICAgICAgICAgICBzaGlmdC54ID0gLXNoaWZ0Lng7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHNoaWZ0LnkgPSAtc2hpZnQueTsKKworICAgICAgICAgICAgLyogcmVzdHJpY3Qgc2hpZnQgbWFnbml0dWRlIHRvIGJldHRlciBoYW5kbGUgY29sbGFwc2luZyBzZWdtZW50cyAqLworICAgICAgICAgICAgcSA9IEZUX011bEZpeCggb3V0LngsIGluLnkgKSAtIEZUX011bEZpeCggb3V0LnksIGluLnggKTsKKyAgICAgICAgICAgIGlmICggb3JpZW50YXRpb24gPT0gRlRfT1JJRU5UQVRJT05fVFJVRVRZUEUgKQorICAgICAgICAgICAgICBxID0gLXE7CisKKyAgICAgICAgICAgIGwgPSBGVF9NSU4oIGxfaW4sIGxfb3V0ICk7CisKKyAgICAgICAgICAgIC8qIG5vbi1zdHJpY3QgaW5lcXVhbGl0aWVzIGF2b2lkIGRpdmlkZS1ieS16ZXJvIHdoZW4gcSA9PSBsID09IDAgKi8KKyAgICAgICAgICAgIGlmICggRlRfTXVsRml4KCB4c3RyZW5ndGgsIHEgKSA8PSBGVF9NdWxGaXgoIGwsIGQgKSApCisgICAgICAgICAgICAgIHNoaWZ0LnggPSBGVF9NdWxEaXYoIHNoaWZ0LngsIHhzdHJlbmd0aCwgZCApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBzaGlmdC54ID0gRlRfTXVsRGl2KCBzaGlmdC54LCBsLCBxICk7CisKKworICAgICAgICAgICAgaWYgKCBGVF9NdWxGaXgoIHlzdHJlbmd0aCwgcSApIDw9IEZUX011bEZpeCggbCwgZCApICkKKyAgICAgICAgICAgICAgc2hpZnQueSA9IEZUX011bERpdiggc2hpZnQueSwgeXN0cmVuZ3RoLCBkICk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHNoaWZ0LnkgPSBGVF9NdWxEaXYoIHNoaWZ0LnksIGwsIHEgKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hpZnQueCA9IHNoaWZ0LnkgPSAwOworCisgICAgICAgICAgZm9yICggOworICAgICAgICAgICAgICAgIGkgIT0gajsKKyAgICAgICAgICAgICAgICBpID0gaSA8IGxhc3QgPyBpICsgMSA6IGZpcnN0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBwb2ludHNbaV0ueCArPSB4c3RyZW5ndGggKyBzaGlmdC54OworICAgICAgICAgICAgcG9pbnRzW2ldLnkgKz0geXN0cmVuZ3RoICsgc2hpZnQueTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGkgPSBqOworCisgICAgICAgIGluICAgPSBvdXQ7CisgICAgICAgIGxfaW4gPSBsX291dDsKICAgICAgIH0KIAogICAgICAgZmlyc3QgPSBsYXN0ICsgMTsKQEAgLTEwNTAsNyArMTA1MSw3IEBACiAgICAgLyogV2UgdXNlIHRoZSBub256ZXJvIHdpbmRpbmcgcnVsZSB0byBmaW5kIHRoZSBvcmllbnRhdGlvbi4gICAgICAgKi8KICAgICAvKiBTaW5jZSBnbHlwaCBvdXRsaW5lcyBiZWhhdmUgbXVjaCBtb3JlIGByZWd1bGFyJyB0aGFuIGFyYml0cmFyeSAqLwogICAgIC8qIGN1YmljIG9yIHF1YWRyYXRpYyBjdXJ2ZXMsIHRoaXMgdGVzdCBkZWFscyB3aXRoIHRoZSBwb2x5Z29uICAgICovCi0gICAgLyogb25seSB3aGljaCBpcyBzcGFubmVkIHVwIGJ5IHRoZSBjb250cm9sIHBvaW50cy4gICAgICAgICAgICAgICAgKi8KKyAgICAvKiBvbmx5IHRoYXQgaXMgc3Bhbm5lZCB1cCBieSB0aGUgY29udHJvbCBwb2ludHMuICAgICAgICAgICAgICAgICAqLwogCiAgICAgRlRfT3V0bGluZV9HZXRfQ0JveCggb3V0bGluZSwgJmNib3ggKTsKIApAQCAtMTA1OCwxMCArMTA1OSwxMSBAQAogICAgIGlmICggY2JveC54TWluID09IGNib3gueE1heCB8fCBjYm94LnlNaW4gPT0gY2JveC55TWF4ICkKICAgICAgIHJldHVybiBGVF9PUklFTlRBVElPTl9OT05FOwogCi0gICAgeHNoaWZ0ID0gRlRfTVNCKCBGVF9BQlMoIGNib3gueE1heCApIHwgRlRfQUJTKCBjYm94LnhNaW4gKSApIC0gMTQ7CisgICAgeHNoaWZ0ID0gRlRfTVNCKCAoRlRfVUludDMyKSggRlRfQUJTKCBjYm94LnhNYXggKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQUJTKCBjYm94LnhNaW4gKSApICkgLSAxNDsKICAgICB4c2hpZnQgPSBGVF9NQVgoIHhzaGlmdCwgMCApOwogCi0gICAgeXNoaWZ0ID0gRlRfTVNCKCBjYm94LnlNYXggLSBjYm94LnlNaW4gKSAtIDE0OworICAgIHlzaGlmdCA9IEZUX01TQiggKEZUX1VJbnQzMikoIGNib3gueU1heCAtIGNib3gueU1pbiApICkgLSAxNDsKICAgICB5c2hpZnQgPSBGVF9NQVgoIHlzaGlmdCwgMCApOwogCiAgICAgcG9pbnRzID0gb3V0bGluZS0+cG9pbnRzOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRwYXRlbnQuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0cGF0ZW50LmMKaW5kZXggODJiNDJmMC4uYmYyYjA4NSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRwYXRlbnQuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHBhdGVudC5jCkBAIC01LDcgKzUsOCBAQAogLyogICAgRnJlZVR5cGUgQVBJIGZvciBjaGVja2luZyBwYXRlbnRlZCBUcnVlVHlwZSBieXRlY29kZSBpbnN0cnVjdGlvbnMgICAgKi8KIC8qICAgIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LCAyMDA4LCAyMDEwIGJ5IERhdmlkIFR1cm5lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCiAvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRwZnIuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0cGZyLmMKaW5kZXggNzQyNWFiZS4uMzlmMDg5ZSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRwZnIuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHBmci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFBGUi1zcGVjaWZpYyBkYXRhIChib2R5KS4gICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMDQsIDIwMDgsIDIwMTAsIDIwMTMsIDIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHBpYy5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRwaWMuYwppbmRleCA5YmQ5MmY3Li42YzRiMWNkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHBpYy5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0cGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgKGJvZHkpLiAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDksIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0cmZvcmsuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0cmZvcmsuYwppbmRleCA1MzUyOTcwLi5jMzBjNzY2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHJmb3JrLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRyZm9yay5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEVtYmVkZGVkIHJlc291cmNlIGZvcmtzIGFjY2Vzc29yIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTAsIDIwMTMsIDIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgTWFzYXRha2UgWUFNQVRPIGFuZCBSZWRoYXQgSy5LLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBGVF9SYWNjZXNzX0dldF9IZWFkZXJJbmZvKCkgYW5kIHJhY2Nlc3NfZ3Vlc3NfZGFyd2luX2hmc3BsdXMoKSBhcmUgICAgICovCkBAIC02Myw3ICs2Myw3IEBACiAgICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7CiAKIAotICAgIGVycm9yID0gRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgcmZvcmtfb2Zmc2V0ICk7CisgICAgZXJyb3IgPSBGVF9TdHJlYW1fU2Vlayggc3RyZWFtLCAoRlRfVUxvbmcpcmZvcmtfb2Zmc2V0ICk7CiAgICAgaWYgKCBlcnJvciApCiAgICAgICByZXR1cm4gZXJyb3I7CiAKQEAgLTcxLDI1ICs3MSwzNiBAQAogICAgIGlmICggZXJyb3IgKQogICAgICAgcmV0dXJuIGVycm9yOwogCi0gICAgKnJkYXRhX3BvcyA9IHJmb3JrX29mZnNldCArICggKCBoZWFkWzBdIDw8IDI0ICkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggaGVhZFsxXSA8PCAxNiApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGhlYWRbMl0gPDwgIDggKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkWzNdICAgICAgICAgKTsKLSAgICBtYXBfcG9zICAgID0gcmZvcmtfb2Zmc2V0ICsgKCAoIGhlYWRbNF0gPDwgMjQgKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBoZWFkWzVdIDw8IDE2ICkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggaGVhZFs2XSA8PCAgOCApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRbN10gICAgICAgICApOwotICAgIHJkYXRhX2xlbiA9ICggaGVhZFsgOF0gPDwgMjQgKSB8Ci0gICAgICAgICAgICAgICAgKCBoZWFkWyA5XSA8PCAxNiApIHwKLSAgICAgICAgICAgICAgICAoIGhlYWRbMTBdIDw8ICA4ICkgfAotICAgICAgICAgICAgICAgICAgaGVhZFsxMV07CisgICAgLyogZW5zdXJlIHBvc2l0aXZlIHZhbHVlcyAqLworICAgIGlmICggaGVhZFswXSA+PSAweDgwIHx8IGhlYWRbNF0gPj0gMHg4MCB8fCBoZWFkWzhdID49IDB4ODAgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisKKyAgICAqcmRhdGFfcG9zID0gKCBoZWFkWyAwXSA8PCAyNCApIHwKKyAgICAgICAgICAgICAgICAgKCBoZWFkWyAxXSA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICAgKCBoZWFkWyAyXSA8PCAgOCApIHwKKyAgICAgICAgICAgICAgICAgICBoZWFkWyAzXTsKKyAgICBtYXBfcG9zICAgID0gKCBoZWFkWyA0XSA8PCAyNCApIHwKKyAgICAgICAgICAgICAgICAgKCBoZWFkWyA1XSA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICAgKCBoZWFkWyA2XSA8PCAgOCApIHwKKyAgICAgICAgICAgICAgICAgICBoZWFkWyA3XTsKKyAgICByZGF0YV9sZW4gID0gKCBoZWFkWyA4XSA8PCAyNCApIHwKKyAgICAgICAgICAgICAgICAgKCBoZWFkWyA5XSA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICAgKCBoZWFkWzEwXSA8PCAgOCApIHwKKyAgICAgICAgICAgICAgICAgICBoZWFkWzExXTsKIAogICAgIC8qIG1hcF9sZW4gPSBoZWFkWzEyXSAuLiBoZWFkWzE1XSAqLwogCi0gICAgaWYgKCAqcmRhdGFfcG9zICsgcmRhdGFfbGVuICE9IG1hcF9wb3MgfHwgbWFwX3BvcyA9PSByZm9ya19vZmZzZXQgKQorICAgIGlmICggKnJkYXRhX3BvcyAhPSBtYXBfcG9zIC0gcmRhdGFfbGVuIHx8IG1hcF9wb3MgPT0gMCApCiAgICAgICByZXR1cm4gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKIAotICAgIGVycm9yID0gRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgbWFwX3BvcyApOworICAgIGlmICggRlRfTE9OR19NQVggLSByZm9ya19vZmZzZXQgPCAqcmRhdGFfcG9zIHx8CisgICAgICAgICBGVF9MT05HX01BWCAtIHJmb3JrX29mZnNldCA8IG1hcF9wb3MgICAgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CisKKyAgICAqcmRhdGFfcG9zICs9IHJmb3JrX29mZnNldDsKKyAgICBtYXBfcG9zICAgICs9IHJmb3JrX29mZnNldDsKKworICAgIGVycm9yID0gRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgKEZUX1VMb25nKW1hcF9wb3MgKTsKICAgICBpZiAoIGVycm9yICkKICAgICAgIHJldHVybiBlcnJvcjsKIApAQCAtMTI0LDcgKzEzNSw3IEBACiAgICAgaWYgKCB0eXBlX2xpc3QgPT0gLTEgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7CiAKLSAgICBlcnJvciA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIG1hcF9wb3MgKyB0eXBlX2xpc3QgKTsKKyAgICBlcnJvciA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIChGVF9VTG9uZykoIG1hcF9wb3MgKyB0eXBlX2xpc3QgKSApOwogICAgIGlmICggZXJyb3IgKQogICAgICAgcmV0dXJuIGVycm9yOwogCkBAIC0xNjYsNyArMTc3LDcgQEAKIAogCiAgICAgRlRfVFJBQ0UzKCggIlxuIiApKTsKLSAgICBlcnJvciA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIG1hcF9vZmZzZXQgKTsKKyAgICBlcnJvciA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIChGVF9VTG9uZyltYXBfb2Zmc2V0ICk7CiAgICAgaWYgKCBlcnJvciApCiAgICAgICByZXR1cm4gZXJyb3I7CiAKQEAgLTE4MiwxMCArMTkzLDEwIEBACiAgICAgICAgIHJldHVybiBlcnJvcjsKIAogICAgICAgRlRfVFJBQ0UyKCggIlJlc291cmNlIHRhZ3M6ICVjJWMlYyVjXG4iLAotICAgICAgICAgICAgICAgICAgKGNoYXIpKCAweGZmICYgKCB0YWdfaW50ZXJuYWwgPj4gMjQgKSApLAotICAgICAgICAgICAgICAgICAgKGNoYXIpKCAweGZmICYgKCB0YWdfaW50ZXJuYWwgPj4gMTYgKSApLAotICAgICAgICAgICAgICAgICAgKGNoYXIpKCAweGZmICYgKCB0YWdfaW50ZXJuYWwgPj4gIDggKSApLAotICAgICAgICAgICAgICAgICAgKGNoYXIpKCAweGZmICYgKCB0YWdfaW50ZXJuYWwgPj4gIDAgKSApICkpOworICAgICAgICAgICAgICAgICAgKGNoYXIpKCAweEZGICYgKCB0YWdfaW50ZXJuYWwgPj4gMjQgKSApLAorICAgICAgICAgICAgICAgICAgKGNoYXIpKCAweEZGICYgKCB0YWdfaW50ZXJuYWwgPj4gMTYgKSApLAorICAgICAgICAgICAgICAgICAgKGNoYXIpKCAweEZGICYgKCB0YWdfaW50ZXJuYWwgPj4gIDggKSApLAorICAgICAgICAgICAgICAgICAgKGNoYXIpKCAweEZGICYgKCB0YWdfaW50ZXJuYWwgPj4gIDAgKSApICkpOwogICAgICAgRlRfVFJBQ0UzKCggIiAgICAgICAgICAgICA6IHN1YmNvdW50PSVkLCBzdWJvZmZzZXQ9MHglMDR4XG4iLAogICAgICAgICAgICAgICAgICAgc3ViY250LCBycG9zICkpOwogCkBAIC0xOTQsNyArMjA1LDcgQEAKICAgICAgICAgKmNvdW50ID0gc3ViY250ICsgMTsKICAgICAgICAgcnBvcyAgKz0gbWFwX29mZnNldDsKIAotICAgICAgICBlcnJvciA9IEZUX1N0cmVhbV9TZWVrKCBzdHJlYW0sIHJwb3MgKTsKKyAgICAgICAgZXJyb3IgPSBGVF9TdHJlYW1fU2Vlayggc3RyZWFtLCAoRlRfVUxvbmcpcnBvcyApOwogICAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAKQEAgLTIyMCw3ICsyMzEsNyBAQAogCiAgICAgICAgIGlmIChzb3J0X2J5X3Jlc19pZCkKICAgICAgICAgewotICAgICAgICAgIGZ0X3Fzb3J0KCByZWYsICpjb3VudCwgc2l6ZW9mICggRlRfUkZvcmtfUmVmICksCisgICAgICAgICAgZnRfcXNvcnQoIHJlZiwgKHNpemVfdCkqY291bnQsIHNpemVvZiAoIEZUX1JGb3JrX1JlZiApLAogICAgICAgICAgICAgICAgICAgICAoIGludCgqKShjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCopICkKICAgICAgICAgICAgICAgICAgICAgZnRfcmFjY2Vzc19zb3J0X3JlZl9ieV9pZCApOwogCkBAIC03MTMsOSArNzI0LDkgQEAKICAgICBGVF9VU2hvcnQgIG5fb2ZfZW50cmllczsKIAogICAgIGludCAgICAgICAgaTsKLSAgICBGVF9VSW50MzIgIGVudHJ5X2lkLCBlbnRyeV9vZmZzZXQsIGVudHJ5X2xlbmd0aCA9IDA7CisgICAgRlRfSW50MzIgICBlbnRyeV9pZCwgZW50cnlfb2Zmc2V0LCBlbnRyeV9sZW5ndGggPSAwOwogCi0gICAgY29uc3QgRlRfVUludDMyICByZXNvdXJjZV9mb3JrX2VudHJ5X2lkID0gMHgyOworICAgIGNvbnN0IEZUX0ludDMyICByZXNvdXJjZV9mb3JrX2VudHJ5X2lkID0gMHgyOwogCiAgICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7CiAgICAgRlRfVU5VU0VEKCBiYXNlX2ZpbGVfbmFtZSApOwpAQCAtODEzLDcgKzgyNCw5IEBACiAgICAgdG1wID0gZnRfc3RycmNociggb3JpZ2luYWxfbmFtZSwgJy8nICk7CiAgICAgaWYgKCB0bXAgKQogICAgIHsKLSAgICAgIGZ0X3N0cm5jcHkoIG5ld19uYW1lLCBvcmlnaW5hbF9uYW1lLCB0bXAgLSBvcmlnaW5hbF9uYW1lICsgMSApOworICAgICAgZnRfc3RybmNweSggbmV3X25hbWUsCisgICAgICAgICAgICAgICAgICBvcmlnaW5hbF9uYW1lLAorICAgICAgICAgICAgICAgICAgKHNpemVfdCkoIHRtcCAtIG9yaWdpbmFsX25hbWUgKyAxICkgKTsKICAgICAgIG5ld19uYW1lW3RtcCAtIG9yaWdpbmFsX25hbWUgKyAxXSA9ICdcMCc7CiAgICAgICBzbGFzaCA9IHRtcCArIDE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRzbmFtZXMuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0c25hbWVzLmMKaW5kZXggMjYwZTkxYy4uODAzMDRlNSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRzbmFtZXMuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHNuYW1lcy5jCkBAIC03LDcgKzcsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoaXMgaXMgX25vdF8gdXNlZCB0byByZXRyaWV2ZSBnbHlwaCBuYW1lcyEgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDEsIDIwMDIsIDIwMDkgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHN0cmVhbS5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRzdHJlYW0uYwppbmRleCA3NTlmZDhmLi5iNjhmM2Y4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHN0cmVhbS5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0c3RyZWFtLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSS9PIHN0cmVhbSBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAwMiwgMjAwNC0yMDA2LCAyMDA4LTIwMTEsIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTM5LDkgKzM5LDkgQEAKICAgICBzdHJlYW0tPmJhc2UgICA9IChGVF9CeXRlKikgYmFzZTsKICAgICBzdHJlYW0tPnNpemUgICA9IHNpemU7CiAgICAgc3RyZWFtLT5wb3MgICAgPSAwOwotICAgIHN0cmVhbS0+Y3Vyc29yID0gMDsKLSAgICBzdHJlYW0tPnJlYWQgICA9IDA7Ci0gICAgc3RyZWFtLT5jbG9zZSAgPSAwOworICAgIHN0cmVhbS0+Y3Vyc29yID0gTlVMTDsKKyAgICBzdHJlYW0tPnJlYWQgICA9IE5VTEw7CisgICAgc3RyZWFtLT5jbG9zZSAgPSBOVUxMOwogICB9CiAKIApAQCAtOTUsMTEgKzk1LDExIEBACiAgICAgaWYgKCBkaXN0YW5jZSA8IDAgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1N0cmVhbV9PcGVyYXRpb24gKTsKIAotICAgIHJldHVybiBGVF9TdHJlYW1fU2Vlayggc3RyZWFtLCAoRlRfVUxvbmcpKCBzdHJlYW0tPnBvcyArIGRpc3RhbmNlICkgKTsKKyAgICByZXR1cm4gRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgc3RyZWFtLT5wb3MgKyAoRlRfVUxvbmcpZGlzdGFuY2UgKTsKICAgfQogCiAKLSAgRlRfQkFTRV9ERUYoIEZUX0xvbmcgKQorICBGVF9CQVNFX0RFRiggRlRfVUxvbmcgKQogICBGVF9TdHJlYW1fUG9zKCBGVF9TdHJlYW0gIHN0cmVhbSApCiAgIHsKICAgICByZXR1cm4gc3RyZWFtLT5wb3M7CkBAIC0yMDMsOCArMjAzLDggQEAKICAgICAgICpwYnl0ZXMgPSAoRlRfQnl0ZSopc3RyZWFtLT5jdXJzb3I7CiAKICAgICAgIC8qIGVxdWl2YWxlbnQgdG8gRlRfU3RyZWFtX0V4aXRGcmFtZSgpLCB3aXRoIG5vIG1lbW9yeSBibG9jayByZWxlYXNlICovCi0gICAgICBzdHJlYW0tPmN1cnNvciA9IDA7Ci0gICAgICBzdHJlYW0tPmxpbWl0ICA9IDA7CisgICAgICBzdHJlYW0tPmN1cnNvciA9IE5VTEw7CisgICAgICBzdHJlYW0tPmxpbWl0ICA9IE5VTEw7CiAgICAgfQogCiAgICAgcmV0dXJuIGVycm9yOwpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgICBGVF9GUkVFKCAqcGJ5dGVzICk7CiAjZW5kaWYKICAgICB9Ci0gICAgKnBieXRlcyA9IDA7CisgICAgKnBieXRlcyA9IE5VTEw7CiAgIH0KIAogCkBAIC0yNjAsNyArMjYwLDkgQEAKIAogI2lmZGVmIEZUX0RFQlVHX01FTU9SWQogICAgICAgLyogYXNzdW1lIF9mdF9kZWJ1Z19maWxlIGFuZCBfZnRfZGVidWdfbGluZW5vIGFyZSBhbHJlYWR5IHNldCAqLwotICAgICAgc3RyZWFtLT5iYXNlID0gKHVuc2lnbmVkIGNoYXIqKWZ0X21lbV9xYWxsb2MoIG1lbW9yeSwgY291bnQsICZlcnJvciApOworICAgICAgc3RyZWFtLT5iYXNlID0gKHVuc2lnbmVkIGNoYXIqKWZ0X21lbV9xYWxsb2MoIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZyljb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IgKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBnb3RvIEV4aXQ7CiAjZWxzZQpAQCAtMzMzLDggKzMzNSw4IEBACiAgICAgICBGVF9GUkVFKCBzdHJlYW0tPmJhc2UgKTsKICNlbmRpZgogICAgIH0KLSAgICBzdHJlYW0tPmN1cnNvciA9IDA7Ci0gICAgc3RyZWFtLT5saW1pdCAgPSAwOworICAgIHN0cmVhbS0+Y3Vyc29yID0gTlVMTDsKKyAgICBzdHJlYW0tPmxpbWl0ICA9IE5VTEw7CiAgIH0KIAogCkBAIC0zNDgsNyArMzUwLDcgQEAKIAogICAgIHJlc3VsdCA9IDA7CiAgICAgaWYgKCBzdHJlYW0tPmN1cnNvciA8IHN0cmVhbS0+bGltaXQgKQotICAgICAgcmVzdWx0ID0gKnN0cmVhbS0+Y3Vyc29yKys7CisgICAgICByZXN1bHQgPSAoRlRfQ2hhcikqc3RyZWFtLT5jdXJzb3IrKzsKIAogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KQEAgLTM1Nyw4ICszNTksOCBAQAogICBGVF9CQVNFX0RFRiggRlRfVVNob3J0ICkKICAgRlRfU3RyZWFtX0dldFVTaG9ydCggRlRfU3RyZWFtICBzdHJlYW0gKQogICB7Ci0gICAgRlRfQnl0ZSogIHA7Ci0gICAgRlRfU2hvcnQgIHJlc3VsdDsKKyAgICBGVF9CeXRlKiAgIHA7CisgICAgRlRfVVNob3J0ICByZXN1bHQ7CiAKIAogICAgIEZUX0FTU0VSVCggc3RyZWFtICYmIHN0cmVhbS0+Y3Vyc29yICk7CkBAIC0zNzYsOCArMzc4LDggQEAKICAgRlRfQkFTRV9ERUYoIEZUX1VTaG9ydCApCiAgIEZUX1N0cmVhbV9HZXRVU2hvcnRMRSggRlRfU3RyZWFtICBzdHJlYW0gKQogICB7Ci0gICAgRlRfQnl0ZSogIHA7Ci0gICAgRlRfU2hvcnQgIHJlc3VsdDsKKyAgICBGVF9CeXRlKiAgIHA7CisgICAgRlRfVVNob3J0ICByZXN1bHQ7CiAKIAogICAgIEZUX0FTU0VSVCggc3RyZWFtICYmIHN0cmVhbS0+Y3Vyc29yICk7CkBAIC0zOTYsNyArMzk4LDcgQEAKICAgRlRfU3RyZWFtX0dldFVPZmZzZXQoIEZUX1N0cmVhbSAgc3RyZWFtICkKICAgewogICAgIEZUX0J5dGUqICBwOwotICAgIEZUX0xvbmcgICByZXN1bHQ7CisgICAgRlRfVUxvbmcgIHJlc3VsdDsKIAogCiAgICAgRlRfQVNTRVJUKCBzdHJlYW0gJiYgc3RyZWFtLT5jdXJzb3IgKTsKQEAgLTQxNCw3ICs0MTYsNyBAQAogICBGVF9TdHJlYW1fR2V0VUxvbmcoIEZUX1N0cmVhbSAgc3RyZWFtICkKICAgewogICAgIEZUX0J5dGUqICBwOwotICAgIEZUX0xvbmcgICByZXN1bHQ7CisgICAgRlRfVUxvbmcgIHJlc3VsdDsKIAogCiAgICAgRlRfQVNTRVJUKCBzdHJlYW0gJiYgc3RyZWFtLT5jdXJzb3IgKTsKQEAgLTQzMiw3ICs0MzQsNyBAQAogICBGVF9TdHJlYW1fR2V0VUxvbmdMRSggRlRfU3RyZWFtICBzdHJlYW0gKQogICB7CiAgICAgRlRfQnl0ZSogIHA7Ci0gICAgRlRfTG9uZyAgIHJlc3VsdDsKKyAgICBGVF9VTG9uZyAgcmVzdWx0OwogCiAKICAgICBGVF9BU1NFUlQoIHN0cmVhbSAmJiBzdHJlYW0tPmN1cnNvciApOwpAQCAtNDcxLDcgKzQ3Myw3IEBACiAgICAgfQogICAgIHN0cmVhbS0+cG9zKys7CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiAoRlRfQ2hhcilyZXN1bHQ7CiAKICAgRmFpbDoKICAgICAqZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9TdHJlYW1fT3BlcmF0aW9uICk7CkBAIC00ODUsMTEgKzQ4NywxMSBAQAogCiAgIEZUX0JBU0VfREVGKCBGVF9VU2hvcnQgKQogICBGVF9TdHJlYW1fUmVhZFVTaG9ydCggRlRfU3RyZWFtICBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZXJyb3IgKQorICAgICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICBlcnJvciApCiAgIHsKLSAgICBGVF9CeXRlICAgcmVhZHNbMl07Ci0gICAgRlRfQnl0ZSogIHAgPSAwOwotICAgIEZUX1Nob3J0ICByZXN1bHQgPSAwOworICAgIEZUX0J5dGUgICAgcmVhZHNbMl07CisgICAgRlRfQnl0ZSogICBwICAgICAgPSAwOworICAgIEZUX1VTaG9ydCAgcmVzdWx0ID0gMDsKIAogCiAgICAgRlRfQVNTRVJUKCBzdHJlYW0gKTsKQEAgLTUwNiw5ICs1MDgsNyBAQAogICAgICAgICBwID0gcmVhZHM7CiAgICAgICB9CiAgICAgICBlbHNlCi0gICAgICB7CiAgICAgICAgIHAgPSBzdHJlYW0tPmJhc2UgKyBzdHJlYW0tPnBvczsKLSAgICAgIH0KIAogICAgICAgaWYgKCBwICkKICAgICAgICAgcmVzdWx0ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKQEAgLTUzMiwxMSArNTMyLDExIEBACiAKICAgRlRfQkFTRV9ERUYoIEZUX1VTaG9ydCApCiAgIEZUX1N0cmVhbV9SZWFkVVNob3J0TEUoIEZUX1N0cmVhbSAgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZXJyb3IgKQorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9FcnJvciogIGVycm9yICkKICAgewotICAgIEZUX0J5dGUgICByZWFkc1syXTsKLSAgICBGVF9CeXRlKiAgcCA9IDA7Ci0gICAgRlRfU2hvcnQgIHJlc3VsdCA9IDA7CisgICAgRlRfQnl0ZSAgICByZWFkc1syXTsKKyAgICBGVF9CeXRlKiAgIHAgICAgICA9IDA7CisgICAgRlRfVVNob3J0ICByZXN1bHQgPSAwOwogCiAKICAgICBGVF9BU1NFUlQoIHN0cmVhbSApOwpAQCAtNTUzLDkgKzU1Myw3IEBACiAgICAgICAgIHAgPSByZWFkczsKICAgICAgIH0KICAgICAgIGVsc2UKLSAgICAgIHsKICAgICAgICAgcCA9IHN0cmVhbS0+YmFzZSArIHN0cmVhbS0+cG9zOwotICAgICAgfQogCiAgICAgICBpZiAoIHAgKQogICAgICAgICByZXN1bHQgPSBGVF9ORVhUX1VTSE9SVF9MRSggcCApOwpAQCAtNTc5LDExICs1NzcsMTEgQEAKIAogICBGVF9CQVNFX0RFRiggRlRfVUxvbmcgKQogICBGVF9TdHJlYW1fUmVhZFVPZmZzZXQoIEZUX1N0cmVhbSAgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICBlcnJvciApCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICBlcnJvciApCiAgIHsKICAgICBGVF9CeXRlICAgcmVhZHNbM107Ci0gICAgRlRfQnl0ZSogIHAgPSAwOwotICAgIEZUX0xvbmcgICByZXN1bHQgPSAwOworICAgIEZUX0J5dGUqICBwICAgICAgPSAwOworICAgIEZUX1VMb25nICByZXN1bHQgPSAwOwogCiAKICAgICBGVF9BU1NFUlQoIHN0cmVhbSApOwpAQCAtNjAwLDkgKzU5OCw3IEBACiAgICAgICAgIHAgPSByZWFkczsKICAgICAgIH0KICAgICAgIGVsc2UKLSAgICAgIHsKICAgICAgICAgcCA9IHN0cmVhbS0+YmFzZSArIHN0cmVhbS0+cG9zOwotICAgICAgfQogCiAgICAgICBpZiAoIHAgKQogICAgICAgICByZXN1bHQgPSBGVF9ORVhUX1VPRkYzKCBwICk7CkBAIC02MjYsMTEgKzYyMiwxMSBAQAogCiAgIEZUX0JBU0VfREVGKCBGVF9VTG9uZyApCiAgIEZUX1N0cmVhbV9SZWFkVUxvbmcoIEZUX1N0cmVhbSAgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZXJyb3IgKQorICAgICAgICAgICAgICAgICAgICAgICBGVF9FcnJvciogIGVycm9yICkKICAgewogICAgIEZUX0J5dGUgICByZWFkc1s0XTsKLSAgICBGVF9CeXRlKiAgcCA9IDA7Ci0gICAgRlRfTG9uZyAgIHJlc3VsdCA9IDA7CisgICAgRlRfQnl0ZSogIHAgICAgICA9IDA7CisgICAgRlRfVUxvbmcgIHJlc3VsdCA9IDA7CiAKIAogICAgIEZUX0FTU0VSVCggc3RyZWFtICk7CkBAIC02NDcsOSArNjQzLDcgQEAKICAgICAgICAgcCA9IHJlYWRzOwogICAgICAgfQogICAgICAgZWxzZQotICAgICAgewogICAgICAgICBwID0gc3RyZWFtLT5iYXNlICsgc3RyZWFtLT5wb3M7Ci0gICAgICB9CiAKICAgICAgIGlmICggcCApCiAgICAgICAgIHJlc3VsdCA9IEZUX05FWFRfVUxPTkcoIHAgKTsKQEAgLTY3MywxMSArNjY3LDExIEBACiAKICAgRlRfQkFTRV9ERUYoIEZUX1VMb25nICkKICAgRlRfU3RyZWFtX1JlYWRVTG9uZ0xFKCBGVF9TdHJlYW0gIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZXJyb3IgKQorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZXJyb3IgKQogICB7CiAgICAgRlRfQnl0ZSAgIHJlYWRzWzRdOwotICAgIEZUX0J5dGUqICBwID0gMDsKLSAgICBGVF9Mb25nICAgcmVzdWx0ID0gMDsKKyAgICBGVF9CeXRlKiAgcCAgICAgID0gMDsKKyAgICBGVF9VTG9uZyAgcmVzdWx0ID0gMDsKIAogCiAgICAgRlRfQVNTRVJUKCBzdHJlYW0gKTsKQEAgLTY5NCw5ICs2ODgsNyBAQAogICAgICAgICBwID0gcmVhZHM7CiAgICAgICB9CiAgICAgICBlbHNlCi0gICAgICB7CiAgICAgICAgIHAgPSBzdHJlYW0tPmJhc2UgKyBzdHJlYW0tPnBvczsKLSAgICAgIH0KIAogICAgICAgaWYgKCBwICkKICAgICAgICAgcmVzdWx0ID0gRlRfTkVYVF9VTE9OR19MRSggcCApOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRzdHJva2UuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0c3Ryb2tlLmMKaW5kZXggZDEyM2UwMi4uZmVjYjNjYyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRzdHJva2UuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHN0cm9rZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHBhdGggc3Ryb2tlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMDYsIDIwMDgtMjAxMSwgMjAxMywgMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNCw2ICsyNCwxNiBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICiAKKyNpbmNsdWRlICJiYXNlcGljLmgiCisKKworICAvKiBkZWNsYXJlIGFuIGV4dGVybiB0byBhY2Nlc3MgYGZ0X291dGxpbmVfZ2x5cGhfY2xhc3MnIGdsb2JhbGx5ICAgICAqLworICAvKiBhbGxvY2F0ZWQgIGluIGBmdGdseXBoLmMnLCBhbmQgdXNlIHRoZSBGVF9PVVRMSU5FX0dMWVBIX0NMQVNTX0dFVCAqLworICAvKiBtYWNybyB0byBhY2Nlc3MgaXQgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkICAgICAgICAgICAqLworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworICBGVF9DQUxMQkFDS19UQUJMRSBjb25zdCBGVF9HbHlwaF9DbGFzcyAgZnRfb3V0bGluZV9nbHlwaF9jbGFzczsKKyNlbmRpZgorCiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHN0cm9rZS5oICovCiAKQEAgLTM0Nyw3ICszNTcsNyBAQAogICBmdF9zdHJva2VfYm9yZGVyX2Nsb3NlKCBGVF9TdHJva2VCb3JkZXIgIGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICByZXZlcnNlICkKICAgewotICAgIEZUX1VJbnQgIHN0YXJ0ID0gYm9yZGVyLT5zdGFydDsKKyAgICBGVF9VSW50ICBzdGFydCA9IChGVF9VSW50KWJvcmRlci0+c3RhcnQ7CiAgICAgRlRfVUludCAgY291bnQgPSBib3JkZXItPm51bV9wb2ludHM7CiAKIApAQCAtNTk5LDcgKzYwOSw3IEBACiAgICAgaWYgKCBib3JkZXItPnN0YXJ0ID49IDAgKQogICAgICAgZnRfc3Ryb2tlX2JvcmRlcl9jbG9zZSggYm9yZGVyLCBGQUxTRSApOwogCi0gICAgYm9yZGVyLT5zdGFydCA9IGJvcmRlci0+bnVtX3BvaW50czsKKyAgICBib3JkZXItPnN0YXJ0ID0gKEZUX0ludClib3JkZXItPm51bV9wb2ludHM7CiAgICAgYm9yZGVyLT5tb3ZhYmxlID0gRkFMU0U7CiAKICAgICByZXR1cm4gZnRfc3Ryb2tlX2JvcmRlcl9saW5ldG8oIGJvcmRlciwgdG8sIEZBTFNFICk7CkBAIC03NDIsNyArNzUyLDcgQEAKICAgICAgIH0KICAgICB9CiAKLSAgICBvdXRsaW5lLT5uX3BvaW50cyA9IChzaG9ydCkoIG91dGxpbmUtPm5fcG9pbnRzICsgYm9yZGVyLT5udW1fcG9pbnRzICk7CisgICAgb3V0bGluZS0+bl9wb2ludHMgKz0gKHNob3J0KWJvcmRlci0+bnVtX3BvaW50czsKIAogICAgIEZUX0FTU0VSVCggRlRfT3V0bGluZV9DaGVjayggb3V0bGluZSApID09IDAgKTsKICAgfQpAQCAtODM0LDggKzg0NCw4IEBACiAgICAgc3Ryb2tlci0+bWl0ZXJfbGltaXQgPSBtaXRlcl9saW1pdDsKIAogICAgIC8qIGVuc3VyZSBtaXRlciBsaW1pdCBoYXMgc2Vuc2libGUgdmFsdWUgKi8KLSAgICBpZiAoIHN0cm9rZXItPm1pdGVyX2xpbWl0IDwgMHgxMDAwMCApCi0gICAgICBzdHJva2VyLT5taXRlcl9saW1pdCA9IDB4MTAwMDA7CisgICAgaWYgKCBzdHJva2VyLT5taXRlcl9saW1pdCA8IDB4MTAwMDBMICkKKyAgICAgIHN0cm9rZXItPm1pdGVyX2xpbWl0ID0gMHgxMDAwMEw7CiAKICAgICAvKiBzYXZlIGxpbmUgam9pbiBzdHlsZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiBsaW5lIGpvaW4gc3R5bGUgY2FuIGJlIHRlbXBvcmFyaWx5IGNoYW5nZWQgd2hlbiBzdHJva2luZyBjdXJ2ZXMgKi8KQEAgLTk5OSw3ICsxMDA5LDkgQEAKIAogICAgIC8qIE9ubHkgaW50ZXJzZWN0IGJvcmRlcnMgaWYgYmV0d2VlbiB0d28gbGluZXRvJ3MgYW5kIGJvdGggKi8KICAgICAvKiBsaW5lcyBhcmUgbG9uZyBlbm91Z2ggKGxpbmVfbGVuZ3RoIGlzIHplcm8gZm9yIGN1cnZlcykuICovCi0gICAgaWYgKCAhYm9yZGVyLT5tb3ZhYmxlIHx8IGxpbmVfbGVuZ3RoID09IDAgKQorICAgIC8qIEFsc28gYXZvaWQgVS10dXJucyBvZiBuZWFybHkgMTgwIGRlZ3JlZS4gICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoICFib3JkZXItPm1vdmFibGUgfHwgbGluZV9sZW5ndGggPT0gMCAgfHwKKyAgICAgICAgIHRoZXRhID4gMHg1OUMwMDAgfHwgdGhldGEgPCAtMHg1OUMwMDAgKQogICAgICAgaW50ZXJzZWN0ID0gRkFMU0U7CiAgICAgZWxzZQogICAgIHsKQEAgLTEyMjAsMTEgKzEyMzIsOCBAQAogICAgICAgZ290byBFeGl0OwogCiAgICAgLyogd2hlbiB3ZSB0dXJuIHRvIHRoZSByaWdodCwgdGhlIGluc2lkZSBzaWRlIGlzIDAgKi8KLSAgICBpbnNpZGVfc2lkZSA9IDA7Ci0KICAgICAvKiBvdGhlcndpc2UsIHRoZSBpbnNpZGUgc2lkZSBpcyAxICovCi0gICAgaWYgKCB0dXJuIDwgMCApCi0gICAgICBpbnNpZGVfc2lkZSA9IDE7CisgICAgaW5zaWRlX3NpZGUgPSAoIHR1cm4gPCAwICk7CiAKICAgICAvKiBwcm9jZXNzIHRoZSBpbnNpZGUgc2lkZSAqLwogICAgIGVycm9yID0gZnRfc3Ryb2tlcl9pbnNpZGUoIHN0cm9rZXIsIGluc2lkZV9zaWRlLCBsaW5lX2xlbmd0aCApOwpAQCAtMTIzMiw3ICsxMjQxLDcgQEAKICAgICAgIGdvdG8gRXhpdDsKIAogICAgIC8qIHByb2Nlc3MgdGhlIG91dHNpZGUgc2lkZSAqLwotICAgIGVycm9yID0gZnRfc3Ryb2tlcl9vdXRzaWRlKCBzdHJva2VyLCAxIC0gaW5zaWRlX3NpZGUsIGxpbmVfbGVuZ3RoICk7CisgICAgZXJyb3IgPSBmdF9zdHJva2VyX291dHNpZGUoIHN0cm9rZXIsICFpbnNpZGVfc2lkZSwgbGluZV9sZW5ndGggKTsKIAogICBFeGl0OgogICAgIHJldHVybiBlcnJvcjsKQEAgLTE4MjIsNyArMTgzMSw3IEBACiAKICAgICBGVF9BU1NFUlQoIGxlZnQtPnN0YXJ0ID49IDAgKTsKIAotICAgIG5ld19wb2ludHMgPSBsZWZ0LT5udW1fcG9pbnRzIC0gbGVmdC0+c3RhcnQ7CisgICAgbmV3X3BvaW50cyA9IChGVF9JbnQpbGVmdC0+bnVtX3BvaW50cyAtIGxlZnQtPnN0YXJ0OwogICAgIGlmICggbmV3X3BvaW50cyA+IDAgKQogICAgIHsKICAgICAgIGVycm9yID0gZnRfc3Ryb2tlX2JvcmRlcl9ncm93KCByaWdodCwgKEZUX1VJbnQpbmV3X3BvaW50cyApOwpAQCAtMTg2Miw4ICsxODcxLDggQEAKICAgICAgICAgfQogICAgICAgfQogCi0gICAgICBsZWZ0LT5udW1fcG9pbnRzICAgPSBsZWZ0LT5zdGFydDsKLSAgICAgIHJpZ2h0LT5udW1fcG9pbnRzICs9IG5ld19wb2ludHM7CisgICAgICBsZWZ0LT5udW1fcG9pbnRzICAgPSAoRlRfVUludClsZWZ0LT5zdGFydDsKKyAgICAgIHJpZ2h0LT5udW1fcG9pbnRzICs9IChGVF9VSW50KW5ld19wb2ludHM7CiAKICAgICAgIHJpZ2h0LT5tb3ZhYmxlID0gRkFMU0U7CiAgICAgICBsZWZ0LT5tb3ZhYmxlICA9IEZBTFNFOwpAQCAtMTk0MSwxMSArMTk1MCw4IEBACiAgICAgICBpZiAoIHR1cm4gIT0gMCApCiAgICAgICB7CiAgICAgICAgIC8qIHdoZW4gd2UgdHVybiB0byB0aGUgcmlnaHQsIHRoZSBpbnNpZGUgc2lkZSBpcyAwICovCi0gICAgICAgIGluc2lkZV9zaWRlID0gMDsKLQogICAgICAgICAvKiBvdGhlcndpc2UsIHRoZSBpbnNpZGUgc2lkZSBpcyAxICovCi0gICAgICAgIGlmICggdHVybiA8IDAgKQotICAgICAgICAgIGluc2lkZV9zaWRlID0gMTsKKyAgICAgICAgaW5zaWRlX3NpZGUgPSAoIHR1cm4gPCAwICk7CiAKICAgICAgICAgZXJyb3IgPSBmdF9zdHJva2VyX2luc2lkZSggc3Ryb2tlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zaWRlX3NpZGUsCkBAIC0xOTU1LDcgKzE5NjEsNyBAQAogCiAgICAgICAgIC8qIHByb2Nlc3MgdGhlIG91dHNpZGUgc2lkZSAqLwogICAgICAgICBlcnJvciA9IGZ0X3N0cm9rZXJfb3V0c2lkZSggc3Ryb2tlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBpbnNpZGVfc2lkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbnNpZGVfc2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZXItPnN1YnBhdGhfbGluZV9sZW5ndGggKTsKICAgICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgICAgZ290byBFeGl0OwpAQCAtMjExOCw3ICsyMTI0LDcgQEAKICAgICAgIEZUX1VJbnQgIGxhc3Q7ICAvKiBpbmRleCBvZiBsYXN0IHBvaW50IGluIGNvbnRvdXIgKi8KIAogCi0gICAgICBsYXN0ICA9IG91dGxpbmUtPmNvbnRvdXJzW25dOworICAgICAgbGFzdCAgPSAoRlRfVUludClvdXRsaW5lLT5jb250b3Vyc1tuXTsKICAgICAgIGxpbWl0ID0gb3V0bGluZS0+cG9pbnRzICsgbGFzdDsKIAogICAgICAgLyogc2tpcCBlbXB0eSBwb2ludHM7IHdlIGRvbid0IHN0cm9rZSB0aGVzZSAqLwpAQCAtMjI4OSwxNSArMjI5NSw2IEBACiAgIH0KIAogCi0gIC8qIGRlY2xhcmUgYW4gZXh0ZXJuIHRvIGFjY2VzcyBgZnRfb3V0bGluZV9nbHlwaF9jbGFzcycgZ2xvYmFsbHkgICAgICovCi0gIC8qIGFsbG9jYXRlZCAgaW4gYGZ0Z2x5cGguYycsIGFuZCB1c2UgdGhlIEZUX09VVExJTkVfR0xZUEhfQ0xBU1NfR0VUICovCi0gIC8qIG1hY3JvIHRvIGFjY2VzcyBpdCB3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgICAgICAgICAgICovCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0gIGV4dGVybiBjb25zdCBGVF9HbHlwaF9DbGFzcyAgZnRfb3V0bGluZV9nbHlwaF9jbGFzczsKLSNlbmRpZgotI2luY2x1ZGUgImJhc2VwaWMuaCIKLQotCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRzdHJva2UuaCAqLwogCiAgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKQEAgLTIzNDcsNyArMjM0NCw5IEBACiAgICAgICBGVF9PdXRsaW5lX0RvbmUoIGdseXBoLT5saWJyYXJ5LCBvdXRsaW5lICk7CiAKICAgICAgIGVycm9yID0gRlRfT3V0bGluZV9OZXcoIGdseXBoLT5saWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3BvaW50cywgbnVtX2NvbnRvdXJzLCBvdXRsaW5lICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0ludCludW1fY29udG91cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lICk7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgZ290byBGYWlsOwogCkBAIC0yNDM3LDcgKzI0MzYsNyBAQAogCiAgICAgICBlcnJvciA9IEZUX091dGxpbmVfTmV3KCBnbHlwaC0+bGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9wb2ludHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fY29udG91cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KW51bV9jb250b3VycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUgKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBnb3RvIEZhaWw7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHN5bnRoLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHN5bnRoLmMKaW5kZXggMDU2N2JkNS4uY2Q2ODUzMyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRzeW50aC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0c3ludGguYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBzeW50aGVzaXppbmcgY29kZSBmb3IgZW1ib2xkZW5pbmcgYW5kIHNsYW50aW5nIChib2R5KS4gICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDA2LCAyMDEwLCAyMDEyLTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRzeXN0ZW0uYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0c3lzdGVtLmMKaW5kZXggMmM2ZGRhYy4uMTkzOGZkOCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnRzeXN0ZW0uYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHN5c3RlbS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFOU0ktc3BlY2lmaWMgRnJlZVR5cGUgbG93LWxldmVsIHN5c3RlbSBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDIsIDIwMDYsIDIwMDgtMjAxMSwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC03MSw3ICs3MSw3IEBACiAgIHsKICAgICBGVF9VTlVTRUQoIG1lbW9yeSApOwogCi0gICAgcmV0dXJuIGZ0X3NtYWxsb2MoIHNpemUgKTsKKyAgICByZXR1cm4gZnRfc21hbGxvYyggKHNpemVfdClzaXplICk7CiAgIH0KIAogCkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICBGVF9VTlVTRUQoIG1lbW9yeSApOwogICAgIEZUX1VOVVNFRCggY3VyX3NpemUgKTsKIAotICAgIHJldHVybiBmdF9zcmVhbGxvYyggYmxvY2ssIG5ld19zaXplICk7CisgICAgcmV0dXJuIGZ0X3NyZWFsbG9jKCBibG9jaywgKHNpemVfdCluZXdfc2l6ZSApOwogICB9CiAKIApAQCAtMTcxLDcgKzE3MSw3IEBACiAKICAgICBzdHJlYW0tPmRlc2NyaXB0b3IucG9pbnRlciA9IE5VTEw7CiAgICAgc3RyZWFtLT5zaXplICAgICAgICAgICAgICAgPSAwOwotICAgIHN0cmVhbS0+YmFzZSAgICAgICAgICAgICAgID0gMDsKKyAgICBzdHJlYW0tPmJhc2UgICAgICAgICAgICAgICA9IE5VTEw7CiAgIH0KIAogCkBAIC0yMTIsNyArMjEyLDcgQEAKICAgICBmaWxlID0gU1RSRUFNX0ZJTEUoIHN0cmVhbSApOwogCiAgICAgaWYgKCBzdHJlYW0tPnBvcyAhPSBvZmZzZXQgKQotICAgICAgZnRfZnNlZWsoIGZpbGUsIG9mZnNldCwgU0VFS19TRVQgKTsKKyAgICAgIGZ0X2ZzZWVrKCBmaWxlLCAobG9uZylvZmZzZXQsIFNFRUtfU0VUICk7CiAKICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpZnRfZnJlYWQoIGJ1ZmZlciwgMSwgY291bnQsIGZpbGUgKTsKICAgfQpAQCAtMjMyLDcgKzIzMiw3IEBACiAKICAgICBzdHJlYW0tPmRlc2NyaXB0b3IucG9pbnRlciA9IE5VTEw7CiAgICAgc3RyZWFtLT5wYXRobmFtZS5wb2ludGVyICAgPSAoY2hhciopZmlsZXBhdGhuYW1lOwotICAgIHN0cmVhbS0+YmFzZSAgICAgICAgICAgICAgID0gMDsKKyAgICBzdHJlYW0tPmJhc2UgICAgICAgICAgICAgICA9IE5VTEw7CiAgICAgc3RyZWFtLT5wb3MgICAgICAgICAgICAgICAgPSAwOwogICAgIHN0cmVhbS0+cmVhZCAgICAgICAgICAgICAgID0gTlVMTDsKICAgICBzdHJlYW0tPmNsb3NlICAgICAgICAgICAgICA9IE5VTEw7CkBAIC0yNDcsNyArMjQ3LDcgQEAKICAgICB9CiAKICAgICBmdF9mc2VlayggZmlsZSwgMCwgU0VFS19FTkQgKTsKLSAgICBzdHJlYW0tPnNpemUgPSBmdF9mdGVsbCggZmlsZSApOworICAgIHN0cmVhbS0+c2l6ZSA9ICh1bnNpZ25lZCBsb25nKWZ0X2Z0ZWxsKCBmaWxlICk7CiAgICAgaWYgKCAhc3RyZWFtLT5zaXplICkKICAgICB7CiAgICAgICBGVF9FUlJPUigoICJGVF9TdHJlYW1fT3BlbjoiICkpOwpAQCAtMjkyLDcgKzI5Miw3IEBACiAgICAgbWVtb3J5ID0gKEZUX01lbW9yeSlmdF9zbWFsbG9jKCBzaXplb2YgKCAqbWVtb3J5ICkgKTsKICAgICBpZiAoIG1lbW9yeSApCiAgICAgewotICAgICAgbWVtb3J5LT51c2VyICAgID0gMDsKKyAgICAgIG1lbW9yeS0+dXNlciAgICA9IE5VTEw7CiAgICAgICBtZW1vcnktPmFsbG9jICAgPSBmdF9hbGxvYzsKICAgICAgIG1lbW9yeS0+cmVhbGxvYyA9IGZ0X3JlYWxsb2M7CiAgICAgICBtZW1vcnktPmZyZWUgICAgPSBmdF9mcmVlOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnR0cmlnb24uYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0dHJpZ29uLmMKaW5kZXggOWIyY2NkNS4uNWIyNDMwNCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnR0cmlnb24uYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHRyaWdvbi5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHRyaWdvbm9tZXRyaWMgZnVuY3Rpb25zIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMDUsIDIwMTItMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC03Myw3ICs3Myw3IEBACiAgICAgLyogYW5kIENPUkRJQyBoeXBvdGVudXNlLCBzbyBpdCBtaW5pbWl6ZXMgdGhlIGVycm9yICAgICAgICovCiAgICAgdmFsID0gKEZUX0ZpeGVkKSggKCAoRlRfSW50NjQpdmFsICogRlRfVFJJR19TQ0FMRSArIDB4NDAwMDAwMDBVTCApID4+IDMyICk7CiAKLSAgICByZXR1cm4gKCBzID49IDAgKSA/IHZhbCA6IC12YWw7CisgICAgcmV0dXJuIHMgPCAwID8gLXZhbCA6IHZhbDsKICAgfQogCiAjZWxzZSAvKiAhRlRfTE9ORzY0ICovCkBAIC05Miw4ICs5Miw4IEBACiAgICAgICAgcyA9IC0xOwogICAgIH0KIAotICAgIGxvMSA9IHZhbCAmIDB4MDAwMEZGRkZVOwotICAgIGhpMSA9IHZhbCA+PiAxNjsKKyAgICBsbzEgPSAoRlRfVUludDMyKXZhbCAmIDB4MDAwMEZGRkZVOworICAgIGhpMSA9IChGVF9VSW50MzIpdmFsID4+IDE2OwogICAgIGxvMiA9IEZUX1RSSUdfU0NBTEUgJiAweDAwMDBGRkZGVTsKICAgICBoaTIgPSBGVF9UUklHX1NDQUxFID4+IDE2OwogCkBAIC0xMTcsMTIgKzExNywxMiBAQAogICAgIC8qIGFuZCBDT1JESUMgaHlwb3RlbnVzZSwgc28gaXQgbWluaW1pemVzIHRoZSBlcnJvciAgICAgICAqLwogCiAgICAgLyogQ2hlY2sgY2Fycnkgb3ZlcmZsb3cgb2YgbG8gKyAweDQwMDAwMDAwICovCi0gICAgbG8gKz0gMHg0MDAwMDAwMFU7Ci0gICAgaGkgKz0gKCBsbyA8IDB4NDAwMDAwMDBVICk7CisgICAgbG8gKz0gMHg0MDAwMDAwMFVMOworICAgIGhpICs9ICggbG8gPCAweDQwMDAwMDAwVUwgKTsKIAotICAgIHZhbCAgPSAoRlRfRml4ZWQpaGk7CisgICAgdmFsID0gKEZUX0ZpeGVkKWhpOwogCi0gICAgcmV0dXJuICggcyA+PSAwICkgPyB2YWwgOiAtdmFsOworICAgIHJldHVybiBzIDwgMCA/IC12YWwgOiB2YWw7CiAgIH0KIAogI2VuZGlmIC8qICFGVF9MT05HNjQgKi8KQEAgLTEzOSw3ICsxMzksNyBAQAogICAgIHggPSB2ZWMtPng7CiAgICAgeSA9IHZlYy0+eTsKIAotICAgIHNoaWZ0ID0gRlRfTVNCKCBGVF9BQlMoIHggKSB8IEZUX0FCUyggeSApICk7CisgICAgc2hpZnQgPSBGVF9NU0IoIChGVF9VSW50MzIpKCBGVF9BQlMoIHggKSB8IEZUX0FCUyggeSApICkgKTsKIAogICAgIGlmICggc2hpZnQgPD0gRlRfVFJJR19TQUZFX01TQiApCiAgICAgewpAQCAtMjk5LDExICsyOTksOSBAQAogICAgIEZUX1ZlY3RvciAgdjsKIAogCi0gICAgdi54ID0gRlRfVFJJR19TQ0FMRSA+PiA4OwotICAgIHYueSA9IDA7Ci0gICAgZnRfdHJpZ19wc2V1ZG9fcm90YXRlKCAmdiwgYW5nbGUgKTsKKyAgICBGVF9WZWN0b3JfVW5pdCggJnYsIGFuZ2xlICk7CiAKLSAgICByZXR1cm4gKCB2LnggKyAweDgwTCApID4+IDg7CisgICAgcmV0dXJuIHYueDsKICAgfQogCiAKQEAgLTMxMiw3ICszMTAsMTIgQEAKICAgRlRfRVhQT1JUX0RFRiggRlRfRml4ZWQgKQogICBGVF9TaW4oIEZUX0FuZ2xlICBhbmdsZSApCiAgIHsKLSAgICByZXR1cm4gRlRfQ29zKCBGVF9BTkdMRV9QSTIgLSBhbmdsZSApOworICAgIEZUX1ZlY3RvciAgdjsKKworCisgICAgRlRfVmVjdG9yX1VuaXQoICZ2LCBhbmdsZSApOworCisgICAgcmV0dXJuIHYueTsKICAgfQogCiAKQEAgLTMyNCw5ICszMjcsNyBAQAogICAgIEZUX1ZlY3RvciAgdjsKIAogCi0gICAgdi54ID0gRlRfVFJJR19TQ0FMRSA+PiA4OwotICAgIHYueSA9IDA7Ci0gICAgZnRfdHJpZ19wc2V1ZG9fcm90YXRlKCAmdiwgYW5nbGUgKTsKKyAgICBGVF9WZWN0b3JfVW5pdCggJnYsIGFuZ2xlICk7CiAKICAgICByZXR1cm4gRlRfRGl2Rml4KCB2LnksIHYueCApOwogICB9CkBAIC0zODgsMzMgKzM4OSwzMiBAQAogICAgIEZUX1ZlY3RvciAgdjsKIAogCi0gICAgaWYgKCAhdmVjICkKKyAgICBpZiAoICF2ZWMgfHwgIWFuZ2xlICkKICAgICAgIHJldHVybjsKIAotICAgIHYueCAgID0gdmVjLT54OwotICAgIHYueSAgID0gdmVjLT55OworICAgIHYgPSAqdmVjOwogCi0gICAgaWYgKCBhbmdsZSAmJiAoIHYueCAhPSAwIHx8IHYueSAhPSAwICkgKQorICAgIGlmICggdi54ID09IDAgJiYgdi55ID09IDAgKQorICAgICAgcmV0dXJuOworCisgICAgc2hpZnQgPSBmdF90cmlnX3ByZW5vcm0oICZ2ICk7CisgICAgZnRfdHJpZ19wc2V1ZG9fcm90YXRlKCAmdiwgYW5nbGUgKTsKKyAgICB2LnggPSBmdF90cmlnX2Rvd25zY2FsZSggdi54ICk7CisgICAgdi55ID0gZnRfdHJpZ19kb3duc2NhbGUoIHYueSApOworCisgICAgaWYgKCBzaGlmdCA+IDAgKQogICAgIHsKLSAgICAgIHNoaWZ0ID0gZnRfdHJpZ19wcmVub3JtKCAmdiApOwotICAgICAgZnRfdHJpZ19wc2V1ZG9fcm90YXRlKCAmdiwgYW5nbGUgKTsKLSAgICAgIHYueCA9IGZ0X3RyaWdfZG93bnNjYWxlKCB2LnggKTsKLSAgICAgIHYueSA9IGZ0X3RyaWdfZG93bnNjYWxlKCB2LnkgKTsKLQotICAgICAgaWYgKCBzaGlmdCA+IDAgKQotICAgICAgewotICAgICAgICBGVF9JbnQzMiAgaGFsZiA9IChGVF9JbnQzMikxTCA8PCAoIHNoaWZ0IC0gMSApOworICAgICAgRlRfSW50MzIgIGhhbGYgPSAoRlRfSW50MzIpMUwgPDwgKCBzaGlmdCAtIDEgKTsKIAogCi0gICAgICAgIHZlYy0+eCA9ICggdi54ICsgaGFsZiArIEZUX1NJR05fTE9ORyggdi54ICkgKSA+PiBzaGlmdDsKLSAgICAgICAgdmVjLT55ID0gKCB2LnkgKyBoYWxmICsgRlRfU0lHTl9MT05HKCB2LnkgKSApID4+IHNoaWZ0OwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzaGlmdCAgPSAtc2hpZnQ7Ci0gICAgICAgIHZlYy0+eCA9IChGVF9Qb3MpKCAoRlRfVUxvbmcpdi54IDw8IHNoaWZ0ICk7Ci0gICAgICAgIHZlYy0+eSA9IChGVF9Qb3MpKCAoRlRfVUxvbmcpdi55IDw8IHNoaWZ0ICk7Ci0gICAgICB9CisgICAgICB2ZWMtPnggPSAoIHYueCArIGhhbGYgKyBGVF9TSUdOX0xPTkcoIHYueCApICkgPj4gc2hpZnQ7CisgICAgICB2ZWMtPnkgPSAoIHYueSArIGhhbGYgKyBGVF9TSUdOX0xPTkcoIHYueSApICkgPj4gc2hpZnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBzaGlmdCAgPSAtc2hpZnQ7CisgICAgICB2ZWMtPnggPSAoRlRfUG9zKSggKEZUX1VMb25nKXYueCA8PCBzaGlmdCApOworICAgICAgdmVjLT55ID0gKEZUX1BvcykoIChGVF9VTG9uZyl2LnkgPDwgc2hpZnQgKTsKICAgICB9CiAgIH0KIApAQCAtNDUwLDcgKzQ1MCw3IEBACiAgICAgdi54ID0gZnRfdHJpZ19kb3duc2NhbGUoIHYueCApOwogCiAgICAgaWYgKCBzaGlmdCA+IDAgKQotICAgICAgcmV0dXJuICggdi54ICsgKCAxIDw8ICggc2hpZnQgLSAxICkgKSApID4+IHNoaWZ0OworICAgICAgcmV0dXJuICggdi54ICsgKCAxTCA8PCAoIHNoaWZ0IC0gMSApICkgKSA+PiBzaGlmdDsKIAogICAgIHJldHVybiAoRlRfRml4ZWQpKCAoRlRfVUludDMyKXYueCA8PCAtc2hpZnQgKTsKICAgfQpAQCAtNDgwLDggKzQ4MCw4IEBACiAKICAgICB2LnggPSBmdF90cmlnX2Rvd25zY2FsZSggdi54ICk7CiAKLSAgICAqbGVuZ3RoID0gKCBzaGlmdCA+PSAwICkgPyAgICAgICAgICAgICAgICAgICAgICAoIHYueCA+PiAgc2hpZnQgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChGVF9GaXhlZCkoIChGVF9VSW50MzIpdi54IDw8IC1zaGlmdCApOworICAgICpsZW5ndGggPSBzaGlmdCA+PSAwID8gICAgICAgICAgICAgICAgICAgICAgKCB2LnggPj4gIHNoaWZ0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICA6IChGVF9GaXhlZCkoIChGVF9VSW50MzIpdi54IDw8IC1zaGlmdCApOwogICAgICphbmdsZSAgPSB2Lnk7CiAgIH0KIApAQCAtNTEyLDExICs1MTIsMTAgQEAKICAgICBGVF9BbmdsZSAgZGVsdGEgPSBhbmdsZTIgLSBhbmdsZTE7CiAKIAotICAgIGRlbHRhICU9IEZUX0FOR0xFXzJQSTsKLSAgICBpZiAoIGRlbHRhIDwgMCApCisgICAgd2hpbGUgKCBkZWx0YSA8PSAtRlRfQU5HTEVfUEkgKQogICAgICAgZGVsdGEgKz0gRlRfQU5HTEVfMlBJOwogCi0gICAgaWYgKCBkZWx0YSA+IEZUX0FOR0xFX1BJICkKKyAgICB3aGlsZSAoIGRlbHRhID4gRlRfQU5HTEVfUEkgKQogICAgICAgZGVsdGEgLT0gRlRfQU5HTEVfMlBJOwogCiAgICAgcmV0dXJuIGRlbHRhOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnR0eXBlMS5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnR0eXBlMS5jCmluZGV4IDQ3YWYxOWEuLmM1NDkzODIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0dHlwZTEuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHR5cGUxLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgdXRpbGl0eSBmaWxlIGZvciBQUyBuYW1lcyBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAwNCwgMjAxMSwgMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0dXRpbC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnR1dGlsLmMKaW5kZXggNTZlMjgwMC4uZjViNzJkYiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnR1dGlsLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnR1dGlsLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgdXRpbGl0eSBmaWxlIGZvciBtZW1vcnkgYW5kIGxpc3QgbWFuYWdlbWVudCAoYm9keSkuICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDIsIDIwMDQtMjAwNywgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE4MCw3ICsxODAsNyBAQAogICAgICAgICAgICAgICBGVF9FcnJvciAgICAqcF9lcnJvciApCiAgIHsKICAgICBGVF9FcnJvciAgICBlcnJvcjsKLSAgICBGVF9Qb2ludGVyICBwID0gZnRfbWVtX3FhbGxvYyggbWVtb3J5LCBzaXplLCAmZXJyb3IgKTsKKyAgICBGVF9Qb2ludGVyICBwID0gZnRfbWVtX3FhbGxvYyggbWVtb3J5LCAoRlRfTG9uZylzaXplLCAmZXJyb3IgKTsKIAogCiAgICAgaWYgKCAhZXJyb3IgJiYgYWRkcmVzcyApCkBAIC0yNzUsNyArMjc1LDcgQEAKIAogICAgIGJlZm9yZSA9IGxpc3QtPnRhaWw7CiAKLSAgICBub2RlLT5uZXh0ID0gMDsKKyAgICBub2RlLT5uZXh0ID0gTlVMTDsKICAgICBub2RlLT5wcmV2ID0gYmVmb3JlOwogCiAgICAgaWYgKCBiZWZvcmUgKQpAQCAtMzAyLDcgKzMwMiw3IEBACiAgICAgYWZ0ZXIgPSBsaXN0LT5oZWFkOwogCiAgICAgbm9kZS0+bmV4dCA9IGFmdGVyOwotICAgIG5vZGUtPnByZXYgPSAwOworICAgIG5vZGUtPnByZXYgPSBOVUxMOwogCiAgICAgaWYgKCAhYWZ0ZXIgKQogICAgICAgbGlzdC0+dGFpbCA9IG5vZGU7CkBAIC0zNjYsNyArMzY2LDcgQEAKICAgICBlbHNlCiAgICAgICBsaXN0LT50YWlsID0gYmVmb3JlOwogCi0gICAgbm9kZS0+cHJldiAgICAgICA9IDA7CisgICAgbm9kZS0+cHJldiAgICAgICA9IE5VTEw7CiAgICAgbm9kZS0+bmV4dCAgICAgICA9IGxpc3QtPmhlYWQ7CiAgICAgbGlzdC0+aGVhZC0+cHJldiA9IG5vZGU7CiAgICAgbGlzdC0+aGVhZCAgICAgICA9IG5vZGU7CkBAIC00MzMsOCArNDMzLDggQEAKICAgICAgIGN1ciA9IG5leHQ7CiAgICAgfQogCi0gICAgbGlzdC0+aGVhZCA9IDA7Ci0gICAgbGlzdC0+dGFpbCA9IDA7CisgICAgbGlzdC0+aGVhZCA9IE5VTEw7CisgICAgbGlzdC0+dGFpbCA9IE5VTEw7CiAgIH0KIAogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHdpbmZudC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2Jhc2UvZnR3aW5mbnQuYwppbmRleCA4ZTMzN2ZiLi43NmExOWFmIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvYmFzZS9mdHdpbmZudC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9iYXNlL2Z0d2luZm50LmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgV2luZG93cyBGTlQgc3BlY2lmaWMgaW5mbyAoYm9keSkuICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMsIDIwMDQsIDIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvSmFtZmlsZSBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvSmFtZmlsZQppbmRleCA2NzA1ZDNjLi5kZWVjMDc5IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL0phbWZpbGUKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy9jZmYgSmFtZmlsZQogIwotIyBDb3B5cmlnaHQgMjAwMSwgMjAwMiBieQorIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTE2LDcgKzE2LDIzIEBACiAKICAgaWYgJChGVDJfTVVMVEkpCiAgIHsKLSAgICBfc291cmNlcyA9IGNmZmRyaXZyIGNmZmdsb2FkIGNmZmxvYWQgY2Zmb2JqcyBjZmZwYXJzZSBjZmZjbWFwIGNmZnBpYyA7CisgICAgX3NvdXJjZXMgPSBjZmZjbWFwCisgICAgICAgICAgICAgICBjZmZkcml2cgorICAgICAgICAgICAgICAgY2ZmZ2xvYWQKKyAgICAgICAgICAgICAgIGNmZmxvYWQKKyAgICAgICAgICAgICAgIGNmZm9ianMKKyAgICAgICAgICAgICAgIGNmZnBhcnNlCisgICAgICAgICAgICAgICBjZmZwaWMKKyAgICAgICAgICAgICAgIGNmMmFycnN0CisgICAgICAgICAgICAgICBjZjJibHVlcworICAgICAgICAgICAgICAgY2YyZXJyb3IKKyAgICAgICAgICAgICAgIGNmMmZvbnQKKyAgICAgICAgICAgICAgIGNmMmZ0CisgICAgICAgICAgICAgICBjZjJoaW50cworICAgICAgICAgICAgICAgY2YyaW50cnAKKyAgICAgICAgICAgICAgIGNmMnJlYWQKKyAgICAgICAgICAgICAgIGNmMnN0YWNrCisgICAgICAgICAgICAgICA7CiAgIH0KICAgZWxzZQogICB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmMmFycnN0LmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmMmFycnN0LmMKaW5kZXggYzhkNmYxMy4uODlmM2U5ZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZjJhcnJzdC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2YyYXJyc3QuYwpAQCAtMTAxLDEwICsxMDEsMTAgQEAKICAgICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOyAgICAgICAgLyogZm9yIEZUX1JFQUxMT0MgKi8KICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gYXJyc3RhY2stPm1lbW9yeTsgLyogZm9yIEZUX1JFQUxMT0MgKi8KIAotICAgICAgRlRfTG9uZyAgbmV3U2l6ZSA9IChGVF9Mb25nKSggbnVtRWxlbWVudHMgKiBhcnJzdGFjay0+c2l6ZUl0ZW0gKTsKKyAgICAgIHNpemVfdCAgbmV3U2l6ZSA9IG51bUVsZW1lbnRzICogYXJyc3RhY2stPnNpemVJdGVtOwogCiAKLSAgICAgIGlmICggbnVtRWxlbWVudHMgPiBMT05HX01BWCAvIGFycnN0YWNrLT5zaXplSXRlbSApCisgICAgICBpZiAoIG51bUVsZW1lbnRzID4gRlRfTE9OR19NQVggLyBhcnJzdGFjay0+c2l6ZUl0ZW0gKQogICAgICAgICBnb3RvIGV4aXQ7CiAKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZjJmaXhlZC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZjJmaXhlZC5oCmluZGV4IGVkMTQ1MmEuLmQ2ZDlmYWYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2YyZml4ZWQuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmMmZpeGVkLmgKQEAgLTU3LDIyICs1NywyMiBAQAogICAvKiBpbiBDIDg5LCBsZWZ0IGFuZCByaWdodCBzaGlmdCBvZiBuZWdhdGl2ZSBudW1iZXJzIGlzICAqLwogICAvKiBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBiZWhhdmlvdXIgaW4gdGhlIGdlbmVyYWwgY2FzZSAqLwogCi0jZGVmaW5lIGNmMl9pbnRUb0ZpeGVkKCBpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGNmMl9pbnRUb0ZpeGVkKCBpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggKENGMl9GaXhlZCkoIChGVF9VSW50MzIpKGkpIDw8IDE2ICkgKQotI2RlZmluZSBjZjJfZml4ZWRUb0ludCggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjZjJfZml4ZWRUb0ludCggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoIChGVF9TaG9ydCkoICggKEZUX1VJbnQzMikoeCkgKyAweDgwMDBVICkgPj4gMTYgKSApCi0jZGVmaW5lIGNmMl9maXhlZFJvdW5kKCB4ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCAoQ0YyX0ZpeGVkKSggKCAoeCkgKyAweDgwMDAgKSAmIDB4RkZGRjAwMDBMICkgKQotI2RlZmluZSBjZjJfZmxvYXRUb0ZpeGVkKCBmICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjZjJfZml4ZWRSb3VuZCggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoIChDRjJfRml4ZWQpKCAoIChGVF9VSW50MzIpKHgpICsgMHg4MDAwVSApICYgMHhGRkZGMDAwMFVMICkgKQorI2RlZmluZSBjZjJfZmxvYXRUb0ZpeGVkKCBmICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoIChDRjJfRml4ZWQpKCAoZikgKiA2NTUzNi4wICsgMC41ICkgKQotI2RlZmluZSBjZjJfZml4ZWRBYnMoIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjZjJfZml4ZWRBYnMoIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoICh4KSA8IDAgPyAtKHgpIDogKHgpICkKLSNkZWZpbmUgY2YyX2ZpeGVkRmxvb3IoIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoIChDRjJfRml4ZWQpKCAoeCkgJiAweEZGRkYwMDAwTCApICkKLSNkZWZpbmUgY2YyX2ZpeGVkRnJhY3Rpb24oIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY2YyX2ZpeGVkRmxvb3IoIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoQ0YyX0ZpeGVkKSggKEZUX1VJbnQzMikoeCkgJiAweEZGRkYwMDAwVUwgKSApCisjZGVmaW5lIGNmMl9maXhlZEZyYWN0aW9uKCB4ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggKHgpIC0gY2YyX2ZpeGVkRmxvb3IoIHggKSApCi0jZGVmaW5lIGNmMl9mcmFjVG9GaXhlZCggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCAoeCkgPCAwID8gLSggKCAtKHgpICsgMHgyMDAwICkgPj4gMTQgKSAgICAgICAgICAgICBcCisjZGVmaW5lIGNmMl9mcmFjVG9GaXhlZCggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggKHgpIDwgMCA/IC0oICggLSh4KSArIDB4MjAwMCApID4+IDE0ICkgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgOiAgKCAoICAoeCkgKyAweDIwMDAgKSA+PiAxNCApICkKIAogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmMmZvbnQuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2YyZm9udC5jCmluZGV4IGE0NmI3NDguLjgzZmQzNDggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2YyZm9udC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2YyZm9udC5jCkBAIC0xNTAsOCArMTUwLDggQEAKICAgICAgIC8qIGxvZ2FyaXRobXM7IHJlbWVtYmVyaW5nIHRoYXQgdGhlIDE2IGxvd2VzdCBiaXRzIG9mIHRoZSBmcmFjdGlvbiAqLwogICAgICAgLyogYXJlIGRyb3BwZWQgdGhpcyBpcyBjb3JyZWN0IHRvIHdpdGhpbiBhIGZhY3RvciBvZiBhbG1vc3QgNC4gICAgICovCiAgICAgICAvKiBGb3IgZXhhbXBsZSwgMHg4MC4wMDAwICogMHg4MC4wMDAwID0gMHg0MDAwLjAwMDAgaXMgMjMrMjMgYW5kICAgKi8KLSAgICAgIC8qIGlzIGZsYWdnZWQgYXMgcG9zc2libGUgb3ZlcmZsb3cgYmVjYXVzZSAweGZmLmZmZmYgKiAweGZmLmZmZmYgPSAqLwotICAgICAgLyogMHhmZmZmLmZlMDAgaXMgYWxzbyAyMysyMy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBpcyBmbGFnZ2VkIGFzIHBvc3NpYmxlIG92ZXJmbG93IGJlY2F1c2UgMHhGRi5GRkZGICogMHhGRi5GRkZGID0gKi8KKyAgICAgIC8qIDB4RkZGRi5GRTAwIGlzIGFsc28gMjMrMjMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAgICAgICBsb2dCYXNlMiA9IEZUX01TQiggKEZUX1VJbnQzMilzdGVtV2lkdGhQZXIxMDAwICkgKwogICAgICAgICAgICAgICAgICAgIEZUX01TQiggKEZUX1VJbnQzMilwcGVtICk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmMmZvbnQuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2YyZm9udC5oCmluZGV4IGQ4ODYwY2UuLjg2Y2YwMmYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2YyZm9udC5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2YyZm9udC5oCkBAIC00OCw3ICs0OCwxMiBAQAogCiAKICNkZWZpbmUgQ0YyX09QRVJBTkRfU1RBQ0tfU0laRSAgNDgKLSNkZWZpbmUgQ0YyX01BWF9TVUJSICAgICAgICAgICAgMTAgLyogbWF4aW11bSBzdWJyb3V0aW5lIG5lc3RpbmcgKi8KKyNkZWZpbmUgQ0YyX01BWF9TVUJSICAgICAgICAgICAgMTYgLyogbWF4aW11bSBzdWJyb3V0aW5lIG5lc3Rpbmc7ICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb25seSAxMCBhcmUgYWxsb3dlZCBidXQgdGhlcmUgZXhpc3QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9udHMgbGlrZSBgSGlyYUtha3VQcm9OLVczLnR0ZicgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKEhpcmFnaW5vIEtha3UgR290aGljIFByb04gVzM7ICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOC4yZDZlMTsgMjAxNC0xMi0xOSkgdGhhdCBleGNlZWQgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhpcyBsaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogCiAgIC8qIHR5cGVkZWYgaXMgaW4gYGNmMmdsdWUuaCcgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2YyZnQuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2YyZnQuYwppbmRleCBlYmJhNDY5Li5kMjU0NGEyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmMmZ0LmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZjJmdC5jCkBAIC01NTEsNyArNTUxLDcgQEAKIAogICAgIEZUX1pFUk8oIGJ1ZiApOwogCi0gICAgaWR4ICs9IGRlY29kZXItPmdsb2JhbHNfYmlhczsKKyAgICBpZHggKz0gKENGMl9VSW50KWRlY29kZXItPmdsb2JhbHNfYmlhczsKICAgICBpZiAoIGlkeCA+PSBkZWNvZGVyLT5udW1fZ2xvYmFscyApCiAgICAgICByZXR1cm4gVFJVRTsgICAgIC8qIGVycm9yICovCiAKQEAgLTU2OSw3ICs1NjksNyBAQAogICAvKiB1c2VkIGZvciBzZWFjIGNvbXBvbmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBjZjJfZ2V0U2VhY0NvbXBvbmVudCggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgICAgICBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICAgICBjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgICBidWYgKQogICB7CiAgICAgQ0YyX0ludCAgIGdpZDsKQEAgLTU4MiwxMiArNTgyLDIxIEBACiAKICAgICBGVF9aRVJPKCBidWYgKTsKIAotICAgIGdpZCA9IGNmZl9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGUoIGRlY29kZXItPmNmZiwgY29kZSApOwotICAgIGlmICggZ2lkIDwgMCApCi0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7CisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorICAgIC8qIEluY3JlbWVudGFsIGZvbnRzIGRvbid0IG5lY2Vzc2FyaWx5IGhhdmUgdmFsaWQgY2hhcnNldHMuICAgICAgICAqLworICAgIC8qIFRoZXkgdXNlIHRoZSBjaGFyYWN0ZXIgY29kZSwgbm90IHRoZSBnbHlwaCBpbmRleCwgaW4gdGhpcyBjYXNlLiAqLworICAgIGlmICggZGVjb2Rlci0+YnVpbGRlci5mYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UgKQorICAgICAgZ2lkID0gY29kZTsKKyAgICBlbHNlCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTCAqLworICAgIHsKKyAgICAgIGdpZCA9IGNmZl9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGUoIGRlY29kZXItPmNmZiwgY29kZSApOworICAgICAgaWYgKCBnaWQgPCAwICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOworICAgIH0KIAogICAgIGVycm9yID0gY2ZmX2dldF9nbHlwaF9kYXRhKCBkZWNvZGVyLT5idWlsZGVyLmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENGMl9VSW50KWdpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYXJzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW4gKTsKICAgICAvKiBUT0RPOiBmb3Igbm93LCBqdXN0IHBhc3MgdGhlIEZyZWVUeXBlIGVycm9yIHRocm91Z2ggKi8KQEAgLTYyNiw3ICs2MzUsNyBAQAogCiAgICAgRlRfWkVSTyggYnVmICk7CiAKLSAgICBpZHggKz0gZGVjb2Rlci0+bG9jYWxzX2JpYXM7CisgICAgaWR4ICs9IChDRjJfVUludClkZWNvZGVyLT5sb2NhbHNfYmlhczsKICAgICBpZiAoIGlkeCA+PSBkZWNvZGVyLT5udW1fbG9jYWxzICkKICAgICAgIHJldHVybiBUUlVFOyAgICAgLyogZXJyb3IgKi8KIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZjJmdC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZjJmdC5oCmluZGV4IDczMWRhM2MuLjMwNzNkZjMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2YyZnQuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmMmZ0LmgKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgICBidWYgKTsKICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKICAgY2YyX2dldFNlYWNDb21wb25lbnQoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIENGMl9VSW50ICAgICAgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENGMl9JbnQgICAgICAgY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICAgYnVmICk7CiAgIEZUX0xPQ0FMKCB2b2lkICkKICAgY2YyX2ZyZWVTZWFjQ29tcG9uZW50KCBDRkZfRGVjb2RlciogIGRlY29kZXIsCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmMmhpbnRzLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmMmhpbnRzLmMKaW5kZXggMDQwZDE5My4uMGUyNzAwMCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZjJoaW50cy5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2YyaGludHMuYwpAQCAtNjk3LDEwICs2OTcsMTAgQEAKIAogICAgIC8qIG1ha2Ugcm9vbSB0byBpbnNlcnQgKi8KICAgICB7Ci0gICAgICBDRjJfSW50ICBpU3JjID0gaGludG1hcC0+Y291bnQgLSAxOwotICAgICAgQ0YyX0ludCAgaURzdCA9IGlzUGFpciA/IGhpbnRtYXAtPmNvdW50ICsgMSA6IGhpbnRtYXAtPmNvdW50OworICAgICAgQ0YyX1VJbnQgIGlTcmMgPSBoaW50bWFwLT5jb3VudCAtIDE7CisgICAgICBDRjJfVUludCAgaURzdCA9IGlzUGFpciA/IGhpbnRtYXAtPmNvdW50ICsgMSA6IGhpbnRtYXAtPmNvdW50OwogCi0gICAgICBDRjJfSW50ICBjb3VudCA9IGhpbnRtYXAtPmNvdW50IC0gaW5kZXhJbnNlcnQ7CisgICAgICBDRjJfVUludCAgY291bnQgPSBoaW50bWFwLT5jb3VudCAtIGluZGV4SW5zZXJ0OwogCiAKICAgICAgIGlmICggaURzdCA+PSBDRjJfTUFYX0hJTlRfRURHRVMgKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZjJpbnRycC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZjJpbnRycC5jCmluZGV4IGEyNjk2MDYuLmZmM2ZhOWEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2YyaW50cnAuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmMmludHJwLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJjZjJmb250LmgiCiAjaW5jbHVkZSAiY2Yyc3RhY2suaCIKICNpbmNsdWRlICJjZjJoaW50cy5oIgorI2luY2x1ZGUgImNmMmludHJwLmgiCiAKICNpbmNsdWRlICJjZjJlcnJvci5oIgogCkBAIC03NjAsMTYgKzc2MSwxOSBAQAogCiAgICAgICAgICAgLyogcHVzaCBvdXIgY3VycmVudCBDRkYgY2hhcnN0cmluZyByZWdpb24gb24gc3ViclN0YWNrICovCiAgICAgICAgICAgY2hhcnN0cmluZyA9IChDRjJfQnVmZmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9hcnJzdGFja19nZXRQb2ludGVyKCAmc3ViclN0YWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nSW5kZXggKyAxICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX2FycnN0YWNrX2dldFBvaW50ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3ViclN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCljaGFyc3RyaW5nSW5kZXggKyAxICk7CiAKICAgICAgICAgICAvKiBzZXQgdXAgdGhlIG5ldyBDRkYgcmVnaW9uIGFuZCBwb2ludGVyICovCi0gICAgICAgICAgc3VickluZGV4ID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworICAgICAgICAgIHN1YnJJbmRleCA9IChDRjJfVUludCljZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7CiAKICAgICAgICAgICBzd2l0Y2ggKCBvcDEgKQogICAgICAgICAgIHsKICAgICAgICAgICBjYXNlIGNmMl9jbWRDQUxMR1NVQlI6Ci0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiKCVkKVxuIiwgc3VickluZGV4ICsgZGVjb2Rlci0+Z2xvYmFsc19iaWFzICkpOworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAoaWR4ICVkLCBlbnRlcmluZyBsZXZlbCAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJySW5kZXggKyAoQ0YyX1VJbnQpZGVjb2Rlci0+Z2xvYmFsc19iaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ0luZGV4ICsgMSApKTsKIAogICAgICAgICAgICAgaWYgKCBjZjJfaW5pdEdsb2JhbFJlZ2lvbkJ1ZmZlciggZGVjb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJJbmRleCwKQEAgLTc4Miw3ICs3ODYsOSBAQAogCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8qIGNmMl9jbWRDQUxMU1VCUiAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiglZClcbiIsIHN1YnJJbmRleCArIGRlY29kZXItPmxvY2Fsc19iaWFzICkpOworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAoaWR4ICVkLCBlbnRlcmluZyBsZXZlbCAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJySW5kZXggKyAoQ0YyX1VJbnQpZGVjb2Rlci0+bG9jYWxzX2JpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nSW5kZXggKyAxICkpOwogCiAgICAgICAgICAgICBpZiAoIGNmMl9pbml0TG9jYWxSZWdpb25CdWZmZXIoIGRlY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJJbmRleCwKQEAgLTc5OCw3ICs4MDQsNyBAQAogICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwogCiAgICAgICBjYXNlIGNmMl9jbWRSRVRVUk46Ci0gICAgICAgIEZUX1RSQUNFNCgoICIgcmV0dXJuXG4iICkpOworICAgICAgICBGVF9UUkFDRTQoKCAiIHJldHVybiAobGVhdmluZyBsZXZlbCAlZClcbiIsIGNoYXJzdHJpbmdJbmRleCApKTsKIAogICAgICAgICBpZiAoIGNoYXJzdHJpbmdJbmRleCA8IDEgKQogICAgICAgICB7CkBAIC04MDksOCArODE1LDkgQEAKIAogICAgICAgICAvKiByZXN0b3JlIHBvc2l0aW9uIGluIHByZXZpb3VzIGNoYXJzdHJpbmcgKi8KICAgICAgICAgY2hhcnN0cmluZyA9IChDRjJfQnVmZmVyKQotICAgICAgICAgICAgICAgICAgICAgICBjZjJfYXJyc3RhY2tfZ2V0UG9pbnRlciggJnN1YnJTdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tY2hhcnN0cmluZ0luZGV4ICk7CisgICAgICAgICAgICAgICAgICAgICAgIGNmMl9hcnJzdGFja19nZXRQb2ludGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICZzdWJyU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgKENGMl9VSW50KS0tY2hhcnN0cmluZ0luZGV4ICk7CiAgICAgICAgIGNvbnRpbnVlOyAgICAgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwogCiAgICAgICBjYXNlIGNmMl9jbWRFU0M6CkBAIC0xMDg4LDggKzEwOTUsOCBAQAogICAgICAgICAgIC8qIG11c3QgYmUgZWl0aGVyIDQgb3IgNSAtLSAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAvKiB0aGlzIGlzIGEgKGRlcHJlY2F0ZWQpIGltcGxpZWQgYHNlYWMnIG9wZXJhdG9yICovCiAKLSAgICAgICAgICBDRjJfVUludCAgICAgICBhY2hhcjsKLSAgICAgICAgICBDRjJfVUludCAgICAgICBiY2hhcjsKKyAgICAgICAgICBDRjJfSW50ICAgICAgICBhY2hhcjsKKyAgICAgICAgICBDRjJfSW50ICAgICAgICBiY2hhcjsKICAgICAgICAgICBDRjJfQnVmZmVyUmVjICBjb21wb25lbnQ7CiAgICAgICAgICAgQ0YyX0ZpeGVkICAgICAgZHVtbXlXaWR0aDsgICAvKiBpZ25vcmUgY29tcG9uZW50IHdpZHRoICovCiAgICAgICAgICAgRlRfRXJyb3IgICAgICAgZXJyb3IyOwpAQCAtMTI5MSwxMCArMTI5OCwxNiBAQAogCiAgICAgICBjYXNlIGNmMl9jbWRWVkNVUlZFVE86CiAgICAgICAgIHsKLSAgICAgICAgICBDRjJfVUludCAgY291bnQgPSBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKTsKKyAgICAgICAgICBDRjJfVUludCAgY291bnQsIGNvdW50MSA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOwogICAgICAgICAgIENGMl9VSW50ICBpbmRleCA9IDA7CiAKIAorICAgICAgICAgIC8qIGlmIGBjZjJfc3RhY2tfY291bnQnIGlzbid0IG9mIHRoZSBmb3JtIDRuIG9yIDRuKzEsICovCisgICAgICAgICAgLyogd2UgZW5mb3JjZSBpdCBieSBjbGVhcmluZyB0aGUgc2Vjb25kIGJpdCAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAoYW5kIHNvcnRpbmcgdGhlIHN0YWNrIGluZGV4aW5nIHRvIHN1aXQpICAgICAgICAgICAqLworICAgICAgICAgIGNvdW50ICA9IGNvdW50MSAmIH4yVTsKKyAgICAgICAgICBpbmRleCArPSBjb3VudDEgLSBjb3VudDsKKwogICAgICAgICAgIEZUX1RSQUNFNCgoICIgdnZjdXJ2ZXRvXG4iICkpOwogCiAgICAgICAgICAgd2hpbGUgKCBpbmRleCA8IGNvdW50ICkKQEAgLTEzMzAsMTAgKzEzNDMsMTYgQEAKIAogICAgICAgY2FzZSBjZjJfY21kSEhDVVJWRVRPOgogICAgICAgICB7Ci0gICAgICAgICAgQ0YyX1VJbnQgIGNvdW50ID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICk7CisgICAgICAgICAgQ0YyX1VJbnQgIGNvdW50LCBjb3VudDEgPSBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKTsKICAgICAgICAgICBDRjJfVUludCAgaW5kZXggPSAwOwogCiAKKyAgICAgICAgICAvKiBpZiBgY2YyX3N0YWNrX2NvdW50JyBpc24ndCBvZiB0aGUgZm9ybSA0biBvciA0bisxLCAqLworICAgICAgICAgIC8qIHdlIGVuZm9yY2UgaXQgYnkgY2xlYXJpbmcgdGhlIHNlY29uZCBiaXQgICAgICAgICAgICovCisgICAgICAgICAgLyogKGFuZCBzb3J0aW5nIHRoZSBzdGFjayBpbmRleGluZyB0byBzdWl0KSAgICAgICAgICAgKi8KKyAgICAgICAgICBjb3VudCAgPSBjb3VudDEgJiB+MlU7CisgICAgICAgICAgaW5kZXggKz0gY291bnQxIC0gY291bnQ7CisKICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhoY3VydmV0b1xuIiApKTsKIAogICAgICAgICAgIHdoaWxlICggaW5kZXggPCBjb3VudCApCkBAIC0xMzcwLDEyICsxMzg5LDE5IEBACiAgICAgICBjYXNlIGNmMl9jbWRWSENVUlZFVE86CiAgICAgICBjYXNlIGNmMl9jbWRIVkNVUlZFVE86CiAgICAgICAgIHsKLSAgICAgICAgICBDRjJfVUludCAgY291bnQgPSBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKTsKKyAgICAgICAgICBDRjJfVUludCAgY291bnQsIGNvdW50MSA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOwogICAgICAgICAgIENGMl9VSW50ICBpbmRleCA9IDA7CiAKICAgICAgICAgICBGVF9Cb29sICBhbHRlcm5hdGUgPSBvcDEgPT0gY2YyX2NtZEhWQ1VSVkVUTzsKIAogCisgICAgICAgICAgLyogaWYgYGNmMl9zdGFja19jb3VudCcgaXNuJ3Qgb2YgdGhlIGZvcm0gOG4sIDhuKzEsICovCisgICAgICAgICAgLyogOG4rNCwgb3IgOG4rNSwgd2UgZW5mb3JjZSBpdCBieSBjbGVhcmluZyB0aGUgICAgICovCisgICAgICAgICAgLyogc2Vjb25kIGJpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogKGFuZCBzb3J0aW5nIHRoZSBzdGFjayBpbmRleGluZyB0byBzdWl0KSAgICAgICAgICovCisgICAgICAgICAgY291bnQgID0gY291bnQxICYgfjJVOworICAgICAgICAgIGluZGV4ICs9IGNvdW50MSAtIGNvdW50OworCiAgICAgICAgICAgRlRfVFJBQ0U0KCggYWx0ZXJuYXRlID8gIiBodmN1cnZldG9cbiIgOiAiIHZoY3VydmV0b1xuIiApKTsKIAogICAgICAgICAgIHdoaWxlICggaW5kZXggPCBjb3VudCApCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZi5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmYuYwppbmRleCBjMzg0MGI1Li5iYjJjZmI1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZi5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgT3BlblR5cGUgZHJpdmVyIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMiwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmY21hcC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZjbWFwLmMKaW5kZXggNTIyNDhiMi4uZTc1MzhlOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZjbWFwLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZjbWFwLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQ0ZGIGNoYXJhY3RlciBtYXBwaW5nIHRhYmxlIChjbWFwKSBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAwNywgMjAxMCwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmY21hcC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZjbWFwLmgKaW5kZXggM2Y3ZjY3Yi4uNmVhZWQ2MyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZjbWFwLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZjbWFwLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQ0ZGIGNoYXJhY3RlciBtYXBwaW5nIHRhYmxlIChjbWFwKSBzdXBwb3J0IChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDIsIDIwMDMsIDIwMDYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmZHJpdnIuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmZHJpdnIuYwppbmRleCBkZGU3ZDQ0Li5hNzE4YjdhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZmRyaXZyLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZkcml2ci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9wZW5UeXBlIGZvbnQgZHJpdmVyIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiY2ZmZXJycy5oIgogI2luY2x1ZGUgImNmZnBpYy5oIgogCi0jaW5jbHVkZSBGVF9TRVJWSUNFX1hGUkVFODZfTkFNRV9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX0ZPTlRfRk9STUFUX0gKICNpbmNsdWRlIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ICiAjaW5jbHVkZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSAogI2luY2x1ZGUgRlRfQ0ZGX0RSSVZFUl9ICkBAIC02NCwxMSArNjQsNiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jdW5kZWYgIFBBSVJfVEFHCi0jZGVmaW5lIFBBSVJfVEFHKCBsZWZ0LCByaWdodCApICAoICggKEZUX1VMb25nKWxlZnQgPDwgMTYgKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUxvbmcpcmlnaHQgICAgICAgICkKLQotCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMjEsOSArMTE2LDYgQEAKICAgfQogCiAKLSN1bmRlZiBQQUlSX1RBRwotCi0KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTIwMyw2ICsxOTUsNjggQEAKICAgICBGVF9HbHlwaFNsb3QgIHNsb3QgID0gZmFjZS0+Z2x5cGg7CiAKIAorICAgIGlmICggRlRfSVNfU0ZOVCggZmFjZSApICkKKyAgICB7CisgICAgICAvKiBPcGVuVHlwZSAxLjcgbWFuZGF0ZXMgdGhhdCB0aGUgZGF0YSBmcm9tIGBobXR4JyB0YWJsZSBiZSB1c2VkOyAqLworICAgICAgLyogaXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0aGF0IHRob3NlIHZhbHVlcyBhcmUgaWRlbnRpY2FsIHRvICAgKi8KKyAgICAgIC8qIHRoZSB2YWx1ZXMgaW4gdGhlIGBDRkYnIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIFRUX0ZhY2UgICB0dGZhY2UgPSAoVFRfRmFjZSlmYWNlOworICAgICAgRlRfU2hvcnQgIGR1bW15OworCisKKyAgICAgIGlmICggZmxhZ3MgJiBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCApCisgICAgICB7CisgICAgICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBkYXRhIGZyb20gdGhlIGB2bXR4JyB0YWJsZSBhdCBhbGw7ICovCisgICAgICAgIC8qIG90aGVyd2lzZSB3ZSBleHRyYWN0IHRoZSBpbmZvIGZyb20gdGhlIENGRiBnbHlwaHN0cmluZ3MgICovCisgICAgICAgIC8qIChpbnN0ZWFkIG9mIHN5bnRoZXNpemluZyBhIGdsb2JhbCB2YWx1ZSB1c2luZyB0aGUgYE9TLzInICovCisgICAgICAgIC8qIHRhYmxlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggIXR0ZmFjZS0+dmVydGljYWxfaW5mbyApCisgICAgICAgICAgZ290byBNaXNzaW5nX1RhYmxlOworCisgICAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBjb3VudDsgbm4rKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9VU2hvcnQgIGFoOworCisKKyAgICAgICAgICAoIChTRk5UX1NlcnZpY2UpdHRmYWNlLT5zZm50ICktPmdldF9tZXRyaWNzKCB0dGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArIG5uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWggKTsKKworICAgICAgICAgIEZUX1RSQUNFNSgoICIgIGlkeCAlZDogYWR2YW5jZSBoZWlnaHQgJWQgZm9udCB1bml0c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICBzdGFydCArIG5uLCBhaCApKTsKKyAgICAgICAgICBhZHZhbmNlc1tubl0gPSBhaDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGhhdmUgZGF0YSBmcm9tIHRoZSBgaG10eCcgdGFibGUgYXQgYWxsICovCisgICAgICAgIGlmICggIXR0ZmFjZS0+aG9yaXpvbnRhbC5udW1iZXJfT2ZfSE1ldHJpY3MgKQorICAgICAgICAgIGdvdG8gTWlzc2luZ19UYWJsZTsKKworICAgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgY291bnQ7IG5uKysgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVVNob3J0ICBhdzsKKworCisgICAgICAgICAgKCAoU0ZOVF9TZXJ2aWNlKXR0ZmFjZS0+c2ZudCApLT5nZXRfbWV0cmljcyggdHRmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKyBubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF3ICk7CisKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBpZHggJWQ6IGFkdmFuY2Ugd2lkdGggJWQgZm9udCB1bml0c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICBzdGFydCArIG5uLCBhdyApKTsKKyAgICAgICAgICBhZHZhbmNlc1tubl0gPSBhdzsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgIE1pc3NpbmdfVGFibGU6CiAgICAgZmxhZ3MgfD0gKEZUX1VJbnQzMilGVF9MT0FEX0FEVkFOQ0VfT05MWTsKIAogICAgIGZvciAoIG5uID0gMDsgbm4gPCBjb3VudDsgbm4rKyApCkBAIC0zNTIsNyArNDA2LDcgQEAKICAgICAgIGZvbnRfaW5mby0+aXRhbGljX2FuZ2xlICAgICAgICA9IGRpY3QtPml0YWxpY19hbmdsZTsKICAgICAgIGZvbnRfaW5mby0+aXNfZml4ZWRfcGl0Y2ggICAgICA9IGRpY3QtPmlzX2ZpeGVkX3BpdGNoOwogICAgICAgZm9udF9pbmZvLT51bmRlcmxpbmVfcG9zaXRpb24gID0gKEZUX1Nob3J0KWRpY3QtPnVuZGVybGluZV9wb3NpdGlvbjsKLSAgICAgIGZvbnRfaW5mby0+dW5kZXJsaW5lX3RoaWNrbmVzcyA9IChGVF9TaG9ydClkaWN0LT51bmRlcmxpbmVfdGhpY2tuZXNzOworICAgICAgZm9udF9pbmZvLT51bmRlcmxpbmVfdGhpY2tuZXNzID0gKEZUX1VTaG9ydClkaWN0LT51bmRlcmxpbmVfdGhpY2tuZXNzOwogCiAgICAgICBjZmYtPmZvbnRfaW5mbyA9IGZvbnRfaW5mbzsKICAgICB9CkBAIC0zODMsOSArNDM3LDI3IEBACiAgIHN0YXRpYyBjb25zdCBjaGFyKgogICBjZmZfZ2V0X3BzX25hbWUoIENGRl9GYWNlICBmYWNlICkKICAgewotICAgIENGRl9Gb250ICBjZmYgPSAoQ0ZGX0ZvbnQpZmFjZS0+ZXh0cmEuZGF0YTsKKyAgICBDRkZfRm9udCAgICAgIGNmZiAgPSAoQ0ZGX0ZvbnQpZmFjZS0+ZXh0cmEuZGF0YTsKKyAgICBTRk5UX1NlcnZpY2UgIHNmbnQgPSAoU0ZOVF9TZXJ2aWNlKWZhY2UtPnNmbnQ7CiAKIAorICAgIC8qIGZvbGxvd2luZyB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbiAxLjcsIHdlIHJldHVybiB0aGUgbmFtZSBzdG9yZWQgKi8KKyAgICAvKiBpbiB0aGUgYG5hbWUnIHRhYmxlIGZvciBhIENGRiB3cmFwcGVkIGludG8gYW4gU0ZOVCBjb250YWluZXIgICAgICAgICovCisKKyAgICBpZiAoIHNmbnQgKQorICAgIHsKKyAgICAgIEZUX0xpYnJhcnkgICAgICAgICAgICAgbGlicmFyeSAgICAgPSBGVF9GQUNFX0xJQlJBUlkoIGZhY2UgKTsKKyAgICAgIEZUX01vZHVsZSAgICAgICAgICAgICAgc2ZudF9tb2R1bGUgPSBGVF9HZXRfTW9kdWxlKCBsaWJyYXJ5LCAic2ZudCIgKTsKKyAgICAgIEZUX1NlcnZpY2VfUHNGb250TmFtZSAgc2VydmljZSAgICAgPQorICAgICAgICAoRlRfU2VydmljZV9Qc0ZvbnROYW1lKWZ0X21vZHVsZV9nZXRfc2VydmljZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmbnRfbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSApOworCisKKyAgICAgIGlmICggc2VydmljZSAmJiBzZXJ2aWNlLT5nZXRfcHNfZm9udF9uYW1lICkKKyAgICAgICAgcmV0dXJuIHNlcnZpY2UtPmdldF9wc19mb250X25hbWUoIEZUX0ZBQ0UoIGZhY2UgKSApOworICAgIH0KKwogICAgIHJldHVybiAoY29uc3QgY2hhciopY2ZmLT5mb250X25hbWU7CiAgIH0KIApAQCAtNzIzLDcgKzc5NSw3IEBACiAjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fTk9fR0xZUEhfTkFNRVMKICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNygKICAgICBjZmZfc2VydmljZXMsCi0gICAgRlRfU0VSVklDRV9JRF9YRjg2X05BTUUsICAgICAgICAgICAgRlRfWEY4Nl9GT1JNQVRfQ0ZGLAorICAgIEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQsICAgICAgICAgIEZUX0ZPTlRfRk9STUFUX0NGRiwKICAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfSU5GTywgICAgICAmQ0ZGX1NFUlZJQ0VfUFNfSU5GT19HRVQsCiAgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJkNGRl9TRVJWSUNFX1BTX05BTUVfR0VULAogICAgIEZUX1NFUlZJQ0VfSURfR0xZUEhfRElDVCwgICAgICAgICAgICZDRkZfU0VSVklDRV9HTFlQSF9ESUNUX0dFVCwKQEAgLTczNCw3ICs4MDYsNyBAQAogI2Vsc2UKICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNigKICAgICBjZmZfc2VydmljZXMsCi0gICAgRlRfU0VSVklDRV9JRF9YRjg2X05BTUUsICAgICAgICAgICAgRlRfWEY4Nl9GT1JNQVRfQ0ZGLAorICAgIEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQsICAgICAgICAgIEZUX0ZPTlRfRk9STUFUX0NGRiwKICAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfSU5GTywgICAgICAmQ0ZGX1NFUlZJQ0VfUFNfSU5GT19HRVQsCiAgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJkNGRl9TRVJWSUNFX1BTX05BTUVfR0VULAogICAgIEZUX1NFUlZJQ0VfSURfVFRfQ01BUCwgICAgICAgICAgICAgICZDRkZfU0VSVklDRV9HRVRfQ01BUF9JTkZPX0dFVCwKQEAgLTc1Myw3ICs4MjUsNyBAQAogICAgIEZUX01vZHVsZV9JbnRlcmZhY2UgIHJlc3VsdDsKIAogCi0gICAgLyogQ0ZGX1NFUlZJQ0VTX0dFVCBkZXJlZmVycyBgbGlicmFyeScgaW4gUElDIG1vZGUgKi8KKyAgICAvKiBDRkZfU0VSVklDRVNfR0VUIGRlcmVmZXJlbmNlcyBgbGlicmFyeScgaW4gUElDIG1vZGUgKi8KICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwogICAgIGlmICggIWRyaXZlciApCiAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmZHJpdnIuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmZHJpdnIuaAppbmRleCA1MGU4MTM4Li45NTI3ZjVlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZmRyaXZyLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZkcml2ci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgT3BlblR5cGUgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDEsIDIwMDIgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZmVycnMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmZXJycy5oCmluZGV4IDgwMWQ3M2UuLjU0M2JkYjAgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmZXJycy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmZXJycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENGRiBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLCAyMDEyIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZmdsb2FkLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZmdsb2FkLmMKaW5kZXggNzU4YTNkMy4uNWY1NzQwMyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZnbG9hZC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmZ2xvYWQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBHbHlwaCBMb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjczLDggKzI3Myw4IEBACiAgICAgICBidWlsZGVyLT5jdXJyZW50ID0gJmxvYWRlci0+Y3VycmVudC5vdXRsaW5lOwogICAgICAgRlRfR2x5cGhMb2FkZXJfUmV3aW5kKCBsb2FkZXIgKTsKIAotICAgICAgYnVpbGRlci0+aGludHNfZ2xvYmFscyA9IDA7Ci0gICAgICBidWlsZGVyLT5oaW50c19mdW5jcyAgID0gMDsKKyAgICAgIGJ1aWxkZXItPmhpbnRzX2dsb2JhbHMgPSBOVUxMOworICAgICAgYnVpbGRlci0+aGludHNfZnVuY3MgICA9IE5VTEw7CiAKICAgICAgIGlmICggaGludGluZyAmJiBzaXplICkKICAgICAgIHsKQEAgLTY0Niw3ICs2NDYsNyBAQAogICAgIGZvciAoIG4gPSAwOyBuIDwgY2ZmLT5udW1fZ2x5cGhzOyBuKysgKQogICAgIHsKICAgICAgIGlmICggY2ZmLT5jaGFyc2V0LnNpZHNbbl0gPT0gZ2x5cGhfc2lkICkKLSAgICAgICAgcmV0dXJuIG47CisgICAgICAgIHJldHVybiAoRlRfSW50KW47CiAgICAgfQogCiAgICAgcmV0dXJuIC0xOwpAQCAtNjcyLDcgKzY3Miw3IEBACiAKIAogICAgICAgKnBvaW50ZXIgPSAoRlRfQnl0ZSopZGF0YS5wb2ludGVyOwotICAgICAgKmxlbmd0aCA9IGRhdGEubGVuZ3RoOworICAgICAgKmxlbmd0aCAgPSAoRlRfVUxvbmcpZGF0YS5sZW5ndGg7CiAKICAgICAgIHJldHVybiBlcnJvcjsKICAgICB9CkBAIC03MDcsNyArNzA3LDcgQEAKIAogCiAgICAgICBkYXRhLnBvaW50ZXIgPSAqcG9pbnRlcjsKLSAgICAgIGRhdGEubGVuZ3RoICA9IGxlbmd0aDsKKyAgICAgIGRhdGEubGVuZ3RoICA9IChGVF9JbnQpbGVuZ3RoOwogCiAgICAgICBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UtPmZ1bmNzLT5mcmVlX2dseXBoX2RhdGEoCiAgICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+b2JqZWN0LCAmZGF0YSApOwpAQCAtODE5LDcgKzgxOSw3IEBACiAgICAgRlRfR2x5cGhMb2FkZXJfUHJlcGFyZSggYnVpbGRlci0+bG9hZGVyICk7CiAKICAgICAvKiBGaXJzdCBsb2FkIGBiY2hhcicgaW4gYnVpbGRlciAqLwotICAgIGVycm9yID0gY2ZmX2dldF9nbHlwaF9kYXRhKCBmYWNlLCBiY2hhcl9pbmRleCwKKyAgICBlcnJvciA9IGNmZl9nZXRfZ2x5cGhfZGF0YSggZmFjZSwgKEZUX1VJbnQpYmNoYXJfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc3RyaW5nLCAmY2hhcnN0cmluZ19sZW4gKTsKICAgICBpZiAoICFlcnJvciApCiAgICAgewpAQCAtODQ5LDcgKzg0OSw3IEBACiAgICAgYnVpbGRlci0+cG9zX3kgPSBhZHk7CiAKICAgICAvKiBOb3cgbG9hZCBgYWNoYXInIG9uIHRvcCBvZiB0aGUgYmFzZSBvdXRsaW5lLiAqLwotICAgIGVycm9yID0gY2ZmX2dldF9nbHlwaF9kYXRhKCBmYWNlLCBhY2hhcl9pbmRleCwKKyAgICBlcnJvciA9IGNmZl9nZXRfZ2x5cGhfZGF0YSggZmFjZSwgKEZUX1VJbnQpYWNoYXJfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc3RyaW5nLCAmY2hhcnN0cmluZ19sZW4gKTsKICAgICBpZiAoICFlcnJvciApCiAgICAgewpAQCAtOTIyLDEwICs5MjIsMTAgQEAKICAgICBkZWNvZGVyLT5yZWFkX3dpZHRoID0gMTsKIAogICAgIC8qIGNvbXB1dGUgcmFuZG9tIHNlZWQgZnJvbSBzdGFjayBhZGRyZXNzIG9mIHBhcmFtZXRlciAqLwotICAgIHNlZWQgPSAoRlRfRml4ZWQpKCAoIChGVF9QdHJEaXN0KShjaGFyKikmc2VlZCAgICAgICAgICAgICAgXgotICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9QdHJEaXN0KShjaGFyKikmZGVjb2RlciAgICAgICAgICAgXgotICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9QdHJEaXN0KShjaGFyKikmY2hhcnN0cmluZ19iYXNlICkgJgotICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMT05HX01BWCApIDsKKyAgICBzZWVkID0gKEZUX0ZpeGVkKSggKCAoRlRfT2Zmc2V0KShjaGFyKikmc2VlZCAgICAgICAgICAgIF4KKyAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfT2Zmc2V0KShjaGFyKikmZGVjb2RlciAgICAgICAgIF4KKyAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfT2Zmc2V0KShjaGFyKikmY2hhcnN0cmluZ19iYXNlICkgJgorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMT05HX01BWCAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgIHNlZWQgPSAoIHNlZWQgXiAoIHNlZWQgPj4gMTAgKSBeICggc2VlZCA+PiAyMCApICkgJiAweEZGRkZMOwogICAgIGlmICggc2VlZCA9PSAwICkKICAgICAgIHNlZWQgPSAweDczODQ7CkBAIC0xMzczLDEyICsxMzczLDEyIEBACiAgICAgICAgICAgewogICAgICAgICAgICAgaWYgKCBvcCA9PSBjZmZfb3BfaGludG1hc2sgKQogICAgICAgICAgICAgICBoaW50ZXItPmhpbnRtYXNrKCBoaW50ZXItPmhpbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLT5jdXJyZW50LT5uX3BvaW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+bnVtX2hpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClidWlsZGVyLT5jdXJyZW50LT5uX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpZGVjb2Rlci0+bnVtX2hpbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcCApOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICBoaW50ZXItPmNvdW50ZXIoIGhpbnRlci0+aGludHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+bnVtX2hpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWRlY29kZXItPm51bV9oaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcCApOwogICAgICAgICAgIH0KIApAQCAtMTk5NSw3ICsxOTk1LDcgQEAKICAgICAgICAgICAgIGlmICggaGludGVyICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgaWYgKCBoaW50ZXItPmNsb3NlKCBoaW50ZXItPmhpbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXItPmN1cnJlbnQtPm5fcG9pbnRzICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWJ1aWxkZXItPmN1cnJlbnQtPm5fcG9pbnRzICkgKQogICAgICAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOwogCiAgICAgICAgICAgICAgIC8qIGFwcGx5IGhpbnRzIHRvIHRoZSBsb2FkZWQgZ2x5cGggb3V0bGluZSBub3cgKi8KQEAgLTIzODksNyArMjM4OSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmxvY2Fsc19iaWFzICk7CiAKIAotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBjYWxsc3ViciglZClcbiIsIGlkeCApKTsKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgY2FsbHN1YnIgKGlkeCAlZCwgZW50ZXJpbmcgbGV2ZWwgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgem9uZSAtIGRlY29kZXItPnpvbmVzICsgMSApKTsKIAogICAgICAgICAgICAgaWYgKCBpZHggPj0gZGVjb2Rlci0+bnVtX2xvY2FscyApCiAgICAgICAgICAgICB7CkBAIC0yNDMxLDcgKzI0MzMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLT5nbG9iYWxzX2JpYXMgKTsKIAogCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGNhbGxnc3ViciglZClcbiIsIGlkeCApKTsKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgY2FsbGdzdWJyIChpZHggJWQsIGVudGVyaW5nIGxldmVsICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHpvbmUgLSBkZWNvZGVyLT56b25lcyArIDEgKSk7CiAKICAgICAgICAgICAgIGlmICggaWR4ID49IGRlY29kZXItPm51bV9nbG9iYWxzICkKICAgICAgICAgICAgIHsKQEAgLTI0NjgsNyArMjQ3Miw4IEBACiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBjZmZfb3BfcmV0dXJuOgotICAgICAgICAgIEZUX1RSQUNFNCgoICIgcmV0dXJuXG4iICkpOworICAgICAgICAgIEZUX1RSQUNFNCgoICIgcmV0dXJuIChsZWF2aW5nIGxldmVsICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLT56b25lIC0gZGVjb2Rlci0+em9uZXMgKSk7CiAKICAgICAgICAgICBpZiAoIGRlY29kZXItPnpvbmUgPD0gZGVjb2Rlci0+em9uZXMgKQogICAgICAgICAgIHsKQEAgLTI2NjksNyArMjY3NCw3IEBACiAgICAgICAgIGVycm9yID0gc2ZudC0+bG9hZF9zYml0X2ltYWdlKCBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+c3RyaWtlX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KWxvYWRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClsb2FkX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoLT5yb290LmJpdG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZXRyaWNzICk7CkBAIC0yNzIwLDcgKzI3MjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT52ZXJ0aWNhbF9pbmZvICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnZlcnRpY2FsLm51bWJlcl9PZl9WTWV0cmljcyA+IDAgKTsKIAotICAgICAgICAgIC8qIGdldCB0aGUgdmVydGljYWwgbWV0cmljcyBmcm9tIHRoZSB2dG14IHRhYmxlIGlmIHdlIGhhdmUgb25lICovCisgICAgICAgICAgLyogZ2V0IHRoZSB2ZXJ0aWNhbCBtZXRyaWNzIGZyb20gdGhlIHZtdHggdGFibGUgaWYgd2UgaGF2ZSBvbmUgKi8KICAgICAgICAgICBpZiAoIGhhc192ZXJ0aWNhbF9pbmZvICkKICAgICAgICAgICB7CiAgICAgICAgICAgICAodm9pZCkoIChTRk5UX1NlcnZpY2UpZmFjZS0+c2ZudCApLT5nZXRfbWV0cmljcyggZmFjZSwgMSwKQEAgLTI3NTcsMTYgKzI3NjIsMTYgQEAKICAgICAvKiB0aGlzIHNjYWxpbmcgaXMgb25seSByZWxldmFudCBpZiB0aGUgUFMgaGludGVyIGlzbid0IGFjdGl2ZSAqLwogICAgIGlmICggY2ZmLT5udW1fc3ViZm9udHMgKQogICAgIHsKLSAgICAgIEZUX1VMb25nICB0b3BfdXBtLCBzdWJfdXBtOwotICAgICAgRlRfQnl0ZSAgIGZkX2luZGV4ID0gY2ZmX2ZkX3NlbGVjdF9nZXQoICZjZmYtPmZkX3NlbGVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCApOworICAgICAgRlRfTG9uZyAgdG9wX3VwbSwgc3ViX3VwbTsKKyAgICAgIEZUX0J5dGUgIGZkX2luZGV4ID0gY2ZmX2ZkX3NlbGVjdF9nZXQoICZjZmYtPmZkX3NlbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4ICk7CiAKIAogICAgICAgaWYgKCBmZF9pbmRleCA+PSBjZmYtPm51bV9zdWJmb250cyApCiAgICAgICAgIGZkX2luZGV4ID0gKEZUX0J5dGUpKCBjZmYtPm51bV9zdWJmb250cyAtIDEgKTsKIAotICAgICAgdG9wX3VwbSA9IGNmZi0+dG9wX2ZvbnQuZm9udF9kaWN0LnVuaXRzX3Blcl9lbTsKLSAgICAgIHN1Yl91cG0gPSBjZmYtPnN1YmZvbnRzW2ZkX2luZGV4XS0+Zm9udF9kaWN0LnVuaXRzX3Blcl9lbTsKKyAgICAgIHRvcF91cG0gPSAoRlRfTG9uZyljZmYtPnRvcF9mb250LmZvbnRfZGljdC51bml0c19wZXJfZW07CisgICAgICBzdWJfdXBtID0gKEZUX0xvbmcpY2ZmLT5zdWJmb250c1tmZF9pbmRleF0tPmZvbnRfZGljdC51bml0c19wZXJfZW07CiAKIAogICAgICAgZm9udF9tYXRyaXggPSBjZmYtPnN1YmZvbnRzW2ZkX2luZGV4XS0+Zm9udF9kaWN0LmZvbnRfbWF0cml4OwpAQCAtMjg2Nyw3ICsyODcyLDcgQEAKICAgICAgIC8qIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgaWYgKCBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UgKQogICAgICAgewotICAgICAgICBnbHlwaC0+cm9vdC5jb250cm9sX2RhdGEgPSAwOworICAgICAgICBnbHlwaC0+cm9vdC5jb250cm9sX2RhdGEgPSBOVUxMOwogICAgICAgICBnbHlwaC0+cm9vdC5jb250cm9sX2xlbiA9IDA7CiAgICAgICB9CiAgICAgICBlbHNlCkBAIC0yODg0LDcgKzI4ODksNyBAQAogICAgICAgICB7CiAgICAgICAgICAgZ2x5cGgtPnJvb3QuY29udHJvbF9kYXRhID0gY3NpbmRleC0+Ynl0ZXMgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzaW5kZXgtPm9mZnNldHNbZ2x5cGhfaW5kZXhdIC0gMTsKLSAgICAgICAgICBnbHlwaC0+cm9vdC5jb250cm9sX2xlbiAgPSBjaGFyc3RyaW5nX2xlbjsKKyAgICAgICAgICBnbHlwaC0+cm9vdC5jb250cm9sX2xlbiAgPSAoRlRfTG9uZyljaGFyc3RyaW5nX2xlbjsKICAgICAgICAgfQogICAgICAgfQogCkBAIC0yOTQ0LDI5ICsyOTQ5LDQ2IEBACiAgICAgICB7CiAgICAgICAgIEZUX0JCb3ggICAgICAgICAgICBjYm94OwogICAgICAgICBGVF9HbHlwaF9NZXRyaWNzKiAgbWV0cmljcyA9ICZnbHlwaC0+cm9vdC5tZXRyaWNzOwotICAgICAgICBGVF9WZWN0b3IgICAgICAgICAgYWR2YW5jZTsKICAgICAgICAgRlRfQm9vbCAgICAgICAgICAgIGhhc192ZXJ0aWNhbF9pbmZvOwogCiAKLSAgICAgICAgLyogY29weSB0aGUgX3Vuc2NhbGVkXyBhZHZhbmNlIHdpZHRoICovCi0gICAgICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlICAgICAgICAgICAgICAgICAgICA9IGRlY29kZXIuZ2x5cGhfd2lkdGg7Ci0gICAgICAgIGdseXBoLT5yb290LmxpbmVhckhvcmlBZHZhbmNlICAgICAgICAgICA9IGRlY29kZXIuZ2x5cGhfd2lkdGg7CisgICAgICAgIGlmICggZmFjZS0+aG9yaXpvbnRhbC5udW1iZXJfT2ZfSE1ldHJpY3MgKQorICAgICAgICB7CisgICAgICAgICAgRlRfU2hvcnQgICBob3JpQmVhcmluZ1ggPSAwOworICAgICAgICAgIEZUX1VTaG9ydCAgaG9yaUFkdmFuY2UgID0gMDsKKworCisgICAgICAgICAgKCAoU0ZOVF9TZXJ2aWNlKWZhY2UtPnNmbnQgKS0+Z2V0X21ldHJpY3MoIGZhY2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9yaUJlYXJpbmdYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9yaUFkdmFuY2UgKTsKKyAgICAgICAgICBtZXRyaWNzLT5ob3JpQWR2YW5jZSAgICAgICAgICA9IGhvcmlBZHZhbmNlOworICAgICAgICAgIG1ldHJpY3MtPmhvcmlCZWFyaW5nWCAgICAgICAgID0gaG9yaUJlYXJpbmdYOworICAgICAgICAgIGdseXBoLT5yb290LmxpbmVhckhvcmlBZHZhbmNlID0gaG9yaUFkdmFuY2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogY29weSB0aGUgX3Vuc2NhbGVkXyBhZHZhbmNlIHdpZHRoICovCisgICAgICAgICAgbWV0cmljcy0+aG9yaUFkdmFuY2UgICAgICAgICAgPSBkZWNvZGVyLmdseXBoX3dpZHRoOworICAgICAgICAgIGdseXBoLT5yb290LmxpbmVhckhvcmlBZHZhbmNlID0gZGVjb2Rlci5nbHlwaF93aWR0aDsKKyAgICAgICAgfQorCiAgICAgICAgIGdseXBoLT5yb290LmludGVybmFsLT5nbHlwaF90cmFuc2Zvcm1lZCA9IDA7CiAKICAgICAgICAgaGFzX3ZlcnRpY2FsX2luZm8gPSBGVF9CT09MKCBmYWNlLT52ZXJ0aWNhbF9pbmZvICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+dmVydGljYWwubnVtYmVyX09mX1ZNZXRyaWNzID4gMCApOwogCi0gICAgICAgIC8qIGdldCB0aGUgdmVydGljYWwgbWV0cmljcyBmcm9tIHRoZSB2dG14IHRhYmxlIGlmIHdlIGhhdmUgb25lICovCisgICAgICAgIC8qIGdldCB0aGUgdmVydGljYWwgbWV0cmljcyBmcm9tIHRoZSB2bXR4IHRhYmxlIGlmIHdlIGhhdmUgb25lICovCiAgICAgICAgIGlmICggaGFzX3ZlcnRpY2FsX2luZm8gKQogICAgICAgICB7CiAgICAgICAgICAgRlRfU2hvcnQgICB2ZXJ0QmVhcmluZ1kgPSAwOwogICAgICAgICAgIEZUX1VTaG9ydCAgdmVydEFkdmFuY2UgID0gMDsKIAogCi0gICAgICAgICAgKHZvaWQpKCAoU0ZOVF9TZXJ2aWNlKWZhY2UtPnNmbnQgKS0+Z2V0X21ldHJpY3MoIGZhY2UsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmVydEJlYXJpbmdZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmVydEFkdmFuY2UgKTsKKyAgICAgICAgICAoIChTRk5UX1NlcnZpY2UpZmFjZS0+c2ZudCApLT5nZXRfbWV0cmljcyggZmFjZSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2ZXJ0QmVhcmluZ1ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2ZXJ0QWR2YW5jZSApOwogICAgICAgICAgIG1ldHJpY3MtPnZlcnRCZWFyaW5nWSA9IHZlcnRCZWFyaW5nWTsKICAgICAgICAgICBtZXRyaWNzLT52ZXJ0QWR2YW5jZSAgPSB2ZXJ0QWR2YW5jZTsKICAgICAgICAgfQpAQCAtMjk5MSwyNiArMzAxMywyNyBAQAogCiAgICAgICAgIGdseXBoLT5yb290Lm91dGxpbmUuZmxhZ3MgfD0gRlRfT1VUTElORV9SRVZFUlNFX0ZJTEw7CiAKLSAgICAgICAgaWYgKCAhKCBmb250X21hdHJpeC54eCA9PSAweDEwMDAwTCAmJgotICAgICAgICAgICAgICAgIGZvbnRfbWF0cml4Lnl5ID09IDB4MTAwMDBMICYmCi0gICAgICAgICAgICAgICAgZm9udF9tYXRyaXgueHkgPT0gMCAgICAgICAgJiYKLSAgICAgICAgICAgICAgICBmb250X21hdHJpeC55eCA9PSAwICAgICAgICApICkKKyAgICAgICAgLyogYXBwbHkgdGhlIGZvbnQgbWF0cml4LCBpZiBhbnkgKi8KKyAgICAgICAgaWYgKCBmb250X21hdHJpeC54eCAhPSAweDEwMDAwTCB8fCBmb250X21hdHJpeC55eSAhPSAweDEwMDAwTCB8fAorICAgICAgICAgICAgIGZvbnRfbWF0cml4Lnh5ICE9IDAgICAgICAgIHx8IGZvbnRfbWF0cml4Lnl4ICE9IDAgICAgICAgICkKKyAgICAgICAgewogICAgICAgICAgIEZUX091dGxpbmVfVHJhbnNmb3JtKCAmZ2x5cGgtPnJvb3Qub3V0bGluZSwgJmZvbnRfbWF0cml4ICk7CiAKLSAgICAgICAgaWYgKCAhKCBmb250X29mZnNldC54ID09IDAgJiYKLSAgICAgICAgICAgICAgICBmb250X29mZnNldC55ID09IDAgKSApCisgICAgICAgICAgbWV0cmljcy0+aG9yaUFkdmFuY2UgPSBGVF9NdWxGaXgoIG1ldHJpY3MtPmhvcmlBZHZhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250X21hdHJpeC54eCApOworICAgICAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlID0gRlRfTXVsRml4KCBtZXRyaWNzLT52ZXJ0QWR2YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udF9tYXRyaXgueXkgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZm9udF9vZmZzZXQueCB8fCBmb250X29mZnNldC55ICkKKyAgICAgICAgewogICAgICAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCAmZ2x5cGgtPnJvb3Qub3V0bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udF9vZmZzZXQueCwgZm9udF9vZmZzZXQueSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250X29mZnNldC54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250X29mZnNldC55ICk7CiAKLSAgICAgICAgYWR2YW5jZS54ID0gbWV0cmljcy0+aG9yaUFkdmFuY2U7Ci0gICAgICAgIGFkdmFuY2UueSA9IDA7Ci0gICAgICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0oICZhZHZhbmNlLCAmZm9udF9tYXRyaXggKTsKLSAgICAgICAgbWV0cmljcy0+aG9yaUFkdmFuY2UgPSBhZHZhbmNlLnggKyBmb250X29mZnNldC54OwotCi0gICAgICAgIGFkdmFuY2UueCA9IDA7Ci0gICAgICAgIGFkdmFuY2UueSA9IG1ldHJpY3MtPnZlcnRBZHZhbmNlOwotICAgICAgICBGVF9WZWN0b3JfVHJhbnNmb3JtKCAmYWR2YW5jZSwgJmZvbnRfbWF0cml4ICk7Ci0gICAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlID0gYWR2YW5jZS55ICsgZm9udF9vZmZzZXQueTsKKyAgICAgICAgICBtZXRyaWNzLT5ob3JpQWR2YW5jZSArPSBmb250X29mZnNldC54OworICAgICAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlICs9IGZvbnRfb2Zmc2V0Lnk7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSA9PSAwIHx8IGZvcmNlX3NjYWxpbmcgKQogICAgICAgICB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZmdsb2FkLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZmdsb2FkLmgKaW5kZXggNDFkZjdkYi4uNWYyNjU1ZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZnbG9hZC5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmZ2xvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBHbHlwaCBMb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA0LCAyMDA2LTIwMDksIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjksNyArMjksMTIgQEAKIAogCiAjZGVmaW5lIENGRl9NQVhfT1BFUkFORFMgICAgICAgIDQ4Ci0jZGVmaW5lIENGRl9NQVhfU1VCUlNfQ0FMTFMgICAgIDMyCisjZGVmaW5lIENGRl9NQVhfU1VCUlNfQ0FMTFMgICAgIDE2ICAvKiBtYXhpbXVtIHN1YnJvdXRpbmUgbmVzdGluZzsgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb25seSAxMCBhcmUgYWxsb3dlZCBidXQgdGhlcmUgZXhpc3QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvbnRzIGxpa2UgYEhpcmFLYWt1UHJvTi1XMy50dGYnICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvTiBXMzsgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOC4yZDZlMTsgMjAxNC0xMi0xOSkgdGhhdCBleGNlZWQgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIENGRl9NQVhfVFJBTlNfRUxFTUVOVFMgIDMyCiAKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZsb2FkLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZmxvYWQuYwppbmRleCBkOWJlYzU5Li5jNjEyMjJkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZmxvYWQuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZmxvYWQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBhbmQgQ0ZGIGRhdGEvcHJvZ3JhbSB0YWJsZXMgbG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzU3LDcgKzM1Nyw3IEBACiAKICAgICAgIGNhc2UgMzoKICAgICAgICAgZm9yICggOyBwIDwgcF9lbmQ7IHAgKz0gMywgcG9mZisrICkKLSAgICAgICAgICBwb2ZmWzBdID0gRlRfUEVFS19PRkYzKCBwICk7CisgICAgICAgICAgcG9mZlswXSA9IEZUX1BFRUtfVU9GRjMoIHAgKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGRlZmF1bHQ6CkBAIC04MDksNyArODA5LDcgQEAKICAgICAvKiBXaGVuIG11bHRpcGxlIEdJRHMgbWFwIHRvIHRoZSBzYW1lIENJRCwgd2UgY2hvb3NlIHRoZSBsb3dlc3QgKi8KICAgICAvKiBHSUQuICBUaGlzIGlzIG5vdCBkZXNjcmliZWQgaW4gYW55IHNwZWMsIGJ1dCBpdCBtYXRjaGVzIHRoZSAgKi8KICAgICAvKiBiZWhhdmlvdXIgb2YgcmVjZW50IEFjcm9yZWFkIHZlcnNpb25zLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBmb3IgKCBqID0gbnVtX2dseXBocyAtIDE7IGogPj0gMCA7IGotLSApCisgICAgZm9yICggaiA9IChGVF9Mb25nKW51bV9nbHlwaHMgLSAxOyBqID49IDAgOyBqLS0gKQogICAgICAgY2hhcnNldC0+Y2lkc1tjaGFyc2V0LT5zaWRzW2pdXSA9IChGVF9VU2hvcnQpajsKIAogICAgIGNoYXJzZXQtPm1heF9jaWQgICAgPSBtYXhfY2lkOwpAQCAtMTQ0Nyw3ICsxNDQ3LDcgQEAKICAgICBGVF9VTG9uZyAgICAgICAgIGJhc2Vfb2Zmc2V0OwogICAgIENGRl9Gb250UmVjRGljdCAgZGljdDsKICAgICBDRkZfSW5kZXhSZWMgICAgIHN0cmluZ19pbmRleDsKLSAgICBGVF9JbnQgICAgICAgICAgIHN1YmZvbnRfaW5kZXg7CisgICAgRlRfVUludCAgICAgICAgICBzdWJmb250X2luZGV4OwogCiAKICAgICBGVF9aRVJPKCBmb250ICk7CkBAIC0xNDk1LDkgKzE0OTUsOSBAQAogICAgIGlmICggcHVyZV9jZmYgKQogICAgIHsKICAgICAgIC8qIHdlbGwsIHdlIGRvbid0IHJlYWxseSBmb3JnZXQgdGhlIGBkaXNhYmxlZCcgZm9udHMuLi4gKi8KLSAgICAgIHN1YmZvbnRfaW5kZXggPSBmYWNlX2luZGV4OworICAgICAgc3ViZm9udF9pbmRleCA9IChGVF9VSW50KSggZmFjZV9pbmRleCAmIDB4RkZGRiApOwogCi0gICAgICBpZiAoIHN1YmZvbnRfaW5kZXggPj0gKEZUX0ludClmb250LT5uYW1lX2luZGV4LmNvdW50ICkKKyAgICAgIGlmICggZmFjZV9pbmRleCA+IDAgJiYgc3ViZm9udF9pbmRleCA+PSBmb250LT5uYW1lX2luZGV4LmNvdW50ICkKICAgICAgIHsKICAgICAgICAgRlRfRVJST1IoKCAiY2ZmX2ZvbnRfbG9hZDoiCiAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIHN1YmZvbnQgaW5kZXggZm9yIHB1cmUgQ0ZGIGZvbnQgKCVkKVxuIiwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmbG9hZC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZsb2FkLmgKaW5kZXggODA0OTYxOS4uNDU5ZTdiMCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZsb2FkLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZsb2FkLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgJiBDRkYgZGF0YS9wcm9ncmFtIHRhYmxlcyBsb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMiwgMjAwMywgMjAwNywgMjAwOCwgMjAxMCBieSAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2Zmb2Jqcy5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZvYmpzLmMKaW5kZXggZGEzZDAxOS4uMGUwZDViMCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZvYmpzLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZvYmpzLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgb2JqZWN0cyBtYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIyNiw4ICsyMjYsOCBAQAogICAgICAgQ0ZGX0ZvbnQgICAgICBmb250ICAgICA9IChDRkZfRm9udClmYWNlLT5leHRyYS5kYXRhOwogICAgICAgQ0ZGX0ludGVybmFsICBpbnRlcm5hbCA9IChDRkZfSW50ZXJuYWwpc2l6ZS0+aW50ZXJuYWw7CiAKLSAgICAgIEZUX1VMb25nICB0b3BfdXBtICA9IGZvbnQtPnRvcF9mb250LmZvbnRfZGljdC51bml0c19wZXJfZW07Ci0gICAgICBGVF9VSW50ICAgaTsKKyAgICAgIEZUX0xvbmcgIHRvcF91cG0gID0gKEZUX0xvbmcpZm9udC0+dG9wX2ZvbnQuZm9udF9kaWN0LnVuaXRzX3Blcl9lbTsKKyAgICAgIEZUX1VJbnQgIGk7CiAKIAogICAgICAgZnVuY3MtPnNldF9zY2FsZSggaW50ZXJuYWwtPnRvcGZvbnQsCkBAIC0yMzcsNyArMjM3LDcgQEAKICAgICAgIGZvciAoIGkgPSBmb250LT5udW1fc3ViZm9udHM7IGkgPiAwOyBpLS0gKQogICAgICAgewogICAgICAgICBDRkZfU3ViRm9udCAgc3ViICAgICA9IGZvbnQtPnN1YmZvbnRzW2kgLSAxXTsKLSAgICAgICAgRlRfVUxvbmcgICAgIHN1Yl91cG0gPSBzdWItPmZvbnRfZGljdC51bml0c19wZXJfZW07CisgICAgICAgIEZUX0xvbmcgICAgICBzdWJfdXBtID0gKEZUX0xvbmcpc3ViLT5mb250X2RpY3QudW5pdHNfcGVyX2VtOwogICAgICAgICBGVF9Qb3MgICAgICAgeF9zY2FsZSwgeV9zY2FsZTsKIAogCkBAIC0yOTgsOCArMjk4LDggQEAKICAgICAgIENGRl9Gb250ICAgICAgZm9udCAgICAgPSAoQ0ZGX0ZvbnQpY2ZmZmFjZS0+ZXh0cmEuZGF0YTsKICAgICAgIENGRl9JbnRlcm5hbCAgaW50ZXJuYWwgPSAoQ0ZGX0ludGVybmFsKXNpemUtPmludGVybmFsOwogCi0gICAgICBGVF9VTG9uZyAgdG9wX3VwbSAgPSBmb250LT50b3BfZm9udC5mb250X2RpY3QudW5pdHNfcGVyX2VtOwotICAgICAgRlRfVUludCAgIGk7CisgICAgICBGVF9Mb25nICB0b3BfdXBtICA9IChGVF9Mb25nKWZvbnQtPnRvcF9mb250LmZvbnRfZGljdC51bml0c19wZXJfZW07CisgICAgICBGVF9VSW50ICBpOwogCiAKICAgICAgIGZ1bmNzLT5zZXRfc2NhbGUoIGludGVybmFsLT50b3Bmb250LApAQCAtMzA5LDcgKzMwOSw3IEBACiAgICAgICBmb3IgKCBpID0gZm9udC0+bnVtX3N1YmZvbnRzOyBpID4gMDsgaS0tICkKICAgICAgIHsKICAgICAgICAgQ0ZGX1N1YkZvbnQgIHN1YiAgICAgPSBmb250LT5zdWJmb250c1tpIC0gMV07Ci0gICAgICAgIEZUX1VMb25nICAgICBzdWJfdXBtID0gc3ViLT5mb250X2RpY3QudW5pdHNfcGVyX2VtOworICAgICAgICBGVF9Mb25nICAgICAgc3ViX3VwbSA9IChGVF9Mb25nKXN1Yi0+Zm9udF9kaWN0LnVuaXRzX3Blcl9lbTsKICAgICAgICAgRlRfUG9zICAgICAgIHhfc2NhbGUsIHlfc2NhbGU7CiAKIApAQCAtMzQyLDcgKzM0Miw3IEBACiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIGNmZl9zbG90X2RvbmUoIEZUX0dseXBoU2xvdCAgc2xvdCApCiAgIHsKLSAgICBzbG90LT5pbnRlcm5hbC0+Z2x5cGhfaGludHMgPSAwOworICAgIHNsb3QtPmludGVybmFsLT5nbHlwaF9oaW50cyA9IE5VTEw7CiAgIH0KIAogCkBAIC01ODMsMTYgKzU4MywyMSBAQAogICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgIGdvdG8gRXhpdDsKIAorICAgICAgLyogaWYgd2UgYXJlIHBlcmZvcm1pbmcgYSBzaW1wbGUgZm9udCBmb3JtYXQgY2hlY2ssIGV4aXQgaW1tZWRpYXRlbHkgKi8KKyAgICAgIC8qICh0aGlzIGlzIGhlcmUgZm9yIHB1cmUgQ0ZGKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIGZhY2VfaW5kZXggPCAwICkKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKwogICAgICAgY2ZmLT5wc2hpbnRlciA9IHBzaGludGVyOwogICAgICAgY2ZmLT5wc25hbWVzICA9IHBzbmFtZXM7CiAKLSAgICAgIGNmZmZhY2UtPmZhY2VfaW5kZXggPSBmYWNlX2luZGV4OworICAgICAgY2ZmZmFjZS0+ZmFjZV9pbmRleCA9IGZhY2VfaW5kZXggJiAweEZGRkY7CiAKICAgICAgIC8qIENvbXBsZW1lbnQgdGhlIHJvb3QgZmxhZ3Mgd2l0aCBzb21lIGludGVyZXN0aW5nIGluZm9ybWF0aW9uLiAqLwogICAgICAgLyogTm90ZSB0aGF0IHRoaXMgaXMgb25seSBuZWNlc3NhcnkgZm9yIHB1cmUgQ0ZGIGFuZCBDRUYgZm9udHM7ICovCiAgICAgICAvKiBTRk5UIGJhc2VkIGZvbnRzIHVzZSB0aGUgYG5hbWUnIHRhYmxlIGluc3RlYWQuICAgICAgICAgICAgICAgKi8KIAotICAgICAgY2ZmZmFjZS0+bnVtX2dseXBocyA9IGNmZi0+bnVtX2dseXBoczsKKyAgICAgIGNmZmZhY2UtPm51bV9nbHlwaHMgPSAoRlRfTG9uZyljZmYtPm51bV9nbHlwaHM7CiAKICAgICAgIGRpY3QgPSAmY2ZmLT50b3BfZm9udC5mb250X2RpY3Q7CiAKQEAgLTYyOSw3ICs2MzQsNyBAQAogICAgICAgaWYgKCAhZGljdC0+aGFzX2ZvbnRfbWF0cml4ICkKICAgICAgICAgZGljdC0+dW5pdHNfcGVyX2VtID0gcHVyZV9jZmYgPyAxMDAwIDogZmFjZS0+cm9vdC51bml0c19wZXJfRU07CiAKLSAgICAgIC8qIE5vcm1hbGl6ZSB0aGUgZm9udCBtYXRyaXggc28gdGhhdCBgbWF0cml4LT54eCcgaXMgMTsgdGhlICovCisgICAgICAvKiBOb3JtYWxpemUgdGhlIGZvbnQgbWF0cml4IHNvIHRoYXQgYG1hdHJpeC0+eXknIGlzIDE7IHRoZSAqLwogICAgICAgLyogc2NhbGluZyBpcyBkb25lIHdpdGggYHVuaXRzX3Blcl9lbScgdGhlbiAoYXQgdGhpcyBwb2ludCwgKi8KICAgICAgIC8qIGl0IGFscmVhZHkgY29udGFpbnMgdGhlIHNjYWxpbmcgZmFjdG9yLCBidXQgd2l0aG91dCAgICAgICovCiAgICAgICAvKiBub3JtYWxpemF0aW9uIG9mIHRoZSBtYXRyaXgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNjQ2LDcgKzY1MSw3IEBACiAKICAgICAgICAgaWYgKCB0ZW1wICE9IDB4MTAwMDBMICkKICAgICAgICAgewotICAgICAgICAgICp1cG0gPSBGVF9EaXZGaXgoICp1cG0sIHRlbXAgKTsKKyAgICAgICAgICAqdXBtID0gKEZUX1VMb25nKUZUX0RpdkZpeCggKEZUX0xvbmcpKnVwbSwgdGVtcCApOwogCiAgICAgICAgICAgbWF0cml4LT54eCA9IEZUX0RpdkZpeCggbWF0cml4LT54eCwgdGVtcCApOwogICAgICAgICAgIG1hdHJpeC0+eXggPSBGVF9EaXZGaXgoIG1hdHJpeC0+eXgsIHRlbXAgKTsKQEAgLTY4Miw3ICs2ODcsOCBAQAogICAgICAgICAgIGlmICggdG9wLT5oYXNfZm9udF9tYXRyaXggKQogICAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggdG9wLT51bml0c19wZXJfZW0gPiAxICYmIHN1Yi0+dW5pdHNfcGVyX2VtID4gMSApCi0gICAgICAgICAgICAgIHNjYWxpbmcgPSBGVF9NSU4oIHRvcC0+dW5pdHNfcGVyX2VtLCBzdWItPnVuaXRzX3Blcl9lbSApOworICAgICAgICAgICAgICBzY2FsaW5nID0gKEZUX0xvbmcpRlRfTUlOKCB0b3AtPnVuaXRzX3Blcl9lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViLT51bml0c19wZXJfZW0gKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgc2NhbGluZyA9IDE7CiAKQEAgLTY5Myw5ICs2OTksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG9wLT5mb250X21hdHJpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsaW5nICk7CiAKLSAgICAgICAgICAgIHN1Yi0+dW5pdHNfcGVyX2VtID0gRlRfTXVsRGl2KCBzdWItPnVuaXRzX3Blcl9lbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AtPnVuaXRzX3Blcl9lbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsaW5nICk7CisgICAgICAgICAgICBzdWItPnVuaXRzX3Blcl9lbSA9IChGVF9VTG9uZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxEaXYoIChGVF9Mb25nKXN1Yi0+dW5pdHNfcGVyX2VtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpdG9wLT51bml0c19wZXJfZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsaW5nICk7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTcxMyw3ICs3MjAsNyBAQAogCiAgICAgICAgIGlmICggdGVtcCAhPSAweDEwMDAwTCApCiAgICAgICAgIHsKLSAgICAgICAgICAqdXBtID0gRlRfRGl2Rml4KCAqdXBtLCB0ZW1wICk7CisgICAgICAgICAgKnVwbSA9IChGVF9VTG9uZylGVF9EaXZGaXgoIChGVF9Mb25nKSp1cG0sIHRlbXAgKTsKIAogICAgICAgICAgIG1hdHJpeC0+eHggPSBGVF9EaXZGaXgoIG1hdHJpeC0+eHgsIHRlbXAgKTsKICAgICAgICAgICBtYXRyaXgtPnl4ID0gRlRfRGl2Rml4KCBtYXRyaXgtPnl4LCB0ZW1wICk7CkBAIC03MzMsMTMgKzc0MCwxMyBAQAogCiAKICAgICAgICAgLyogc2V0IHVwIG51bV9mYWNlcyAqLwotICAgICAgICBjZmZmYWNlLT5udW1fZmFjZXMgPSBjZmYtPm51bV9mYWNlczsKKyAgICAgICAgY2ZmZmFjZS0+bnVtX2ZhY2VzID0gKEZUX0xvbmcpY2ZmLT5udW1fZmFjZXM7CiAKICAgICAgICAgLyogY29tcHV0ZSBudW1iZXIgb2YgZ2x5cGhzICovCiAgICAgICAgIGlmICggZGljdC0+Y2lkX3JlZ2lzdHJ5ICE9IDB4RkZGRlUgKQotICAgICAgICAgIGNmZmZhY2UtPm51bV9nbHlwaHMgPSBjZmYtPmNoYXJzZXQubWF4X2NpZCArIDE7CisgICAgICAgICAgY2ZmZmFjZS0+bnVtX2dseXBocyA9IChGVF9Mb25nKSggY2ZmLT5jaGFyc2V0Lm1heF9jaWQgKyAxICk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICBjZmZmYWNlLT5udW1fZ2x5cGhzID0gY2ZmLT5jaGFyc3RyaW5nc19pbmRleC5jb3VudDsKKyAgICAgICAgICBjZmZmYWNlLT5udW1fZ2x5cGhzID0gKEZUX0xvbmcpY2ZmLT5jaGFyc3RyaW5nc19pbmRleC5jb3VudDsKIAogICAgICAgICAvKiBzZXQgZ2xvYmFsIGJib3gsIGFzIHdlbGwgYXMgRU0gc2l6ZSAqLwogICAgICAgICBjZmZmYWNlLT5iYm94LnhNaW4gPSAgIGRpY3QtPmZvbnRfYmJveC54TWluICAgICAgICAgICAgPj4gMTY7CkBAIC03NjMsNyArNzcwLDkgQEAKICAgICAgICAgICAoRlRfU2hvcnQpKCBkaWN0LT51bmRlcmxpbmVfdGhpY2tuZXNzID4+IDE2ICk7CiAKICAgICAgICAgLyogcmV0cmlldmUgZm9udCBmYW1pbHkgJiBzdHlsZSBuYW1lICovCi0gICAgICAgIGNmZmZhY2UtPmZhbWlseV9uYW1lID0gY2ZmX2luZGV4X2dldF9uYW1lKCBjZmYsIGZhY2VfaW5kZXggKTsKKyAgICAgICAgY2ZmZmFjZS0+ZmFtaWx5X25hbWUgPSBjZmZfaW5kZXhfZ2V0X25hbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludCkoIGZhY2VfaW5kZXggJiAweEZGRkYgKSApOwogICAgICAgICBpZiAoIGNmZmZhY2UtPmZhbWlseV9uYW1lICkKICAgICAgICAgewogICAgICAgICAgIGNoYXIqICBmdWxsICAgPSBjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcoIGNmZiwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2Zmb2Jqcy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZvYmpzLmgKaW5kZXggZGZiZjlhOS4uM2NjOTUzMSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZvYmpzLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgb2JqZWN0cyBtYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwNCwgMjAwNi0yMDA4LCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmcGFyc2UuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmcGFyc2UuYwppbmRleCA5MWJkNTMyLi4wNjNiMzUxIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZnBhcnNlLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZwYXJzZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENGRiB0b2tlbiBzdHJlYW0gcGFyc2VyIChib2R5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDQsIDIwMDctMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICBzY2FsaW5nICkKICAgewogICAgIEZUX0J5dGUqICBwID0gc3RhcnQ7Ci0gICAgRlRfVUludCAgIG5pYjsKKyAgICBGVF9JbnQgICAgbmliOwogICAgIEZUX1VJbnQgICBwaGFzZTsKIAogICAgIEZUX0xvbmcgICByZXN1bHQsIG51bWJlciwgZXhwb25lbnQ7CkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICAgIH0KIAogICAgICAgLyogR2V0IHRoZSBuaWJibGUuICovCi0gICAgICBuaWIgICA9ICggcFswXSA+PiBwaGFzZSApICYgMHhGOworICAgICAgbmliICAgPSAoRlRfSW50KSggcFswXSA+PiBwaGFzZSApICYgMHhGOwogICAgICAgcGhhc2UgPSA0IC0gcGhhc2U7CiAKICAgICAgIGlmICggbmliID09IDB4RSApCkBAIC0xODgsNyArMTg4LDcgQEAKICAgICB9CiAKICAgICAvKiBSZWFkIGZyYWN0aW9uIHBhcnQsIGlmIGFueS4gKi8KLSAgICBpZiAoIG5pYiA9PSAweGEgKQorICAgIGlmICggbmliID09IDB4QSApCiAgICAgICBmb3IgKDs7KQogICAgICAgewogICAgICAgICAvKiBJZiB3ZSBlbnRlcmVkIHRoaXMgaXRlcmF0aW9uIHdpdGggcGhhc2UgPT0gNCwgd2UgbmVlZCAqLwpAQCAtNTU5LDcgKzU1OSw3IEBACiAgICAgICBvZmZzZXQtPnggID0gY2ZmX3BhcnNlX2ZpeGVkX3NjYWxlZCggZGF0YSsrLCBzY2FsaW5nICk7CiAgICAgICBvZmZzZXQtPnkgID0gY2ZmX3BhcnNlX2ZpeGVkX3NjYWxlZCggZGF0YSwgICBzY2FsaW5nICk7CiAKLSAgICAgICp1cG0gPSBwb3dlcl90ZW5zW3NjYWxpbmddOworICAgICAgKnVwbSA9IChGVF9VTG9uZylwb3dlcl90ZW5zW3NjYWxpbmddOwogCiAgICAgICBGVF9UUkFDRTQoKCAiIFslZiAlZiAlZiAlZiAlZiAlZl1cbiIsCiAgICAgICAgICAgICAgICAgICAoZG91YmxlKW1hdHJpeC0+eHggLyAqdXBtIC8gNjU1MzYsCkBAIC02MTcsMTQgKzYxNywzNCBAQAogCiAgICAgaWYgKCBwYXJzZXItPnRvcCA+PSBwYXJzZXItPnN0YWNrICsgMiApCiAgICAgewotICAgICAgZGljdC0+cHJpdmF0ZV9zaXplICAgPSBjZmZfcGFyc2VfbnVtKCBkYXRhKysgKTsKLSAgICAgIGRpY3QtPnByaXZhdGVfb2Zmc2V0ID0gY2ZmX3BhcnNlX251bSggZGF0YSAgICk7CisgICAgICBGVF9Mb25nICB0bXA7CisKKworICAgICAgdG1wID0gY2ZmX3BhcnNlX251bSggZGF0YSsrICk7CisgICAgICBpZiAoIHRtcCA8IDAgKQorICAgICAgeworICAgICAgICBGVF9FUlJPUigoICJjZmZfcGFyc2VfcHJpdmF0ZV9kaWN0OiBJbnZhbGlkIGRpY3Rpb25hcnkgc2l6ZVxuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgICBnb3RvIEZhaWw7CisgICAgICB9CisgICAgICBkaWN0LT5wcml2YXRlX3NpemUgPSAoRlRfVUxvbmcpdG1wOworCisgICAgICB0bXAgPSBjZmZfcGFyc2VfbnVtKCBkYXRhICk7CisgICAgICBpZiAoIHRtcCA8IDAgKQorICAgICAgeworICAgICAgICBGVF9FUlJPUigoICJjZmZfcGFyc2VfcHJpdmF0ZV9kaWN0OiBJbnZhbGlkIGRpY3Rpb25hcnkgb2Zmc2V0XG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgIH0KKyAgICAgIGRpY3QtPnByaXZhdGVfb2Zmc2V0ID0gKEZUX1VMb25nKXRtcDsKKwogICAgICAgRlRfVFJBQ0U0KCggIiAlbHUgJWx1XG4iLAogICAgICAgICAgICAgICAgICAgZGljdC0+cHJpdmF0ZV9zaXplLCBkaWN0LT5wcml2YXRlX29mZnNldCApKTsKIAogICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CiAgICAgfQogCisgIEZhaWw6CiAgICAgcmV0dXJuIGVycm9yOwogICB9CiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmcGFyc2UuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmcGFyc2UuaAppbmRleCA2MWQ5MWVkLi44YWQwMmVhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZnBhcnNlLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZwYXJzZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENGRiB0b2tlbiBzdHJlYW0gcGFyc2VyIChzcGVjaWZpY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDMsIDIwMTEgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZnBpYy5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZwaWMuYwppbmRleCBmMjJlNGYwLi5kNDBkZWM1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZnBpYy5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmcGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIGNmZiBtb2R1bGUuICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmcGljLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZnBpYy5oCmluZGV4IDUwYmFiNGMuLjlhMjIxYTcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmcGljLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgY2ZmIG1vZHVsZS4gICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOSwgMjAxMiwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjAsOCArMjAsNiBAQAogI2RlZmluZSBfX0NGRlBJQ19IX18KIAogCi1GVF9CRUdJTl9IRUFERVIKLQogI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKIAogCkBAIC00OSw2ICs0Nyw4IEBACiAjaW5jbHVkZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSAogCiAKK0ZUX0JFR0lOX0hFQURFUgorCiAgIHR5cGVkZWYgc3RydWN0ICBDZmZNb2R1bGVQSUNfCiAgIHsKICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogICAgICAgIGNmZl9zZXJ2aWNlczsKQEAgLTk2LDEyICs5NiwxMiBAQAogICBGVF9FcnJvcgogICBjZmZfZHJpdmVyX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CiAKK0ZUX0VORF9IRUFERVIKKwogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCiAKICAvKiAqLwogCi1GVF9FTkRfSEVBREVSCi0KICNlbmRpZiAvKiBfX0NGRlBJQ19IX18gKi8KIAogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZnRva2VuLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZnRva2VuLmgKaW5kZXggYmNiNDI3Ni4uNWIzMjA3NiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZ0b2tlbi5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmdG9rZW4uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDRkYgdG9rZW4gZGVmaW5pdGlvbnMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAzLCAyMDExIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZ0eXBlcy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NmZi9jZmZ0eXBlcy5oCmluZGV4IDg3Mjc0NDYuLmRlOGE1ZWUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jZmYvY2ZmdHlwZXMuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2ZmL2NmZnR5cGVzLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBCYXNpYyBPcGVuVHlwZS9DRkYgdHlwZSBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uICAgICAqLwogLyogICAgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMywgMjAwNi0yMDA4LCAyMDEwLTIwMTEsIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvSmFtZmlsZSBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvSmFtZmlsZQppbmRleCBlYmVhZWQ1Li42NGUxNTIzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL0phbWZpbGUKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy9jaWQgSmFtZmlsZQogIwotIyBDb3B5cmlnaHQgMjAwMSBieQorIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTE2LDcgKzE2LDEyIEBACiAKICAgaWYgJChGVDJfTVVMVEkpCiAgIHsKLSAgICBfc291cmNlcyA9IGNpZG9ianMgY2lkbG9hZCBjaWRnbG9hZCBjaWRyaXZlciBjaWRwYXJzZSA7CisgICAgX3NvdXJjZXMgPSBjaWRnbG9hZAorICAgICAgICAgICAgICAgY2lkbG9hZAorICAgICAgICAgICAgICAgY2lkb2JqcworICAgICAgICAgICAgICAgY2lkcGFyc2UKKyAgICAgICAgICAgICAgIGNpZHJpdmVyCisgICAgICAgICAgICAgICA7CiAgIH0KICAgZWxzZQogICB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZGVycnMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkZXJycy5oCmluZGV4IGVmMTMxNTUuLjVlMGU3NzYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkZXJycy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkZXJycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENJRCBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLCAyMDEyIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZGdsb2FkLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZGdsb2FkLmMKaW5kZXggN2ZlYmFiOC4uZDAwNjc0ZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC9jaWRnbG9hZC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkZ2xvYWQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDSUQta2V5ZWQgVHlwZTEgR2x5cGggTG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA3LCAyMDA5LCAyMDEwLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNDQsMTAgKzQ0LDEwIEBACiAgICAgQ0lEX0ZhY2UgICAgICAgZmFjZSA9IChDSURfRmFjZSlkZWNvZGVyLT5idWlsZGVyLmZhY2U7CiAgICAgQ0lEX0ZhY2VJbmZvICAgY2lkICA9ICZmYWNlLT5jaWQ7CiAgICAgRlRfQnl0ZSogICAgICAgcDsKLSAgICBGVF9VSW50ICAgICAgICBmZF9zZWxlY3Q7CisgICAgRlRfVUxvbmcgICAgICAgZmRfc2VsZWN0OwogICAgIEZUX1N0cmVhbSAgICAgIHN0cmVhbSAgICAgICA9IGZhY2UtPmNpZF9zdHJlYW07CiAgICAgRlRfRXJyb3IgICAgICAgZXJyb3IgICAgICAgID0gRlRfRXJyX09rOwotICAgIEZUX0J5dGUqICAgICAgIGNoYXJzdHJpbmcgICA9IDA7CisgICAgRlRfQnl0ZSogICAgICAgY2hhcnN0cmluZyAgID0gTlVMTDsKICAgICBGVF9NZW1vcnkgICAgICBtZW1vcnkgICAgICAgPSBmYWNlLT5yb290Lm1lbW9yeTsKICAgICBGVF9VTG9uZyAgICAgICBnbHlwaF9sZW5ndGggPSAwOwogICAgIFBTQXV4X1NlcnZpY2UgIHBzYXV4ICAgICAgICA9IChQU0F1eF9TZXJ2aWNlKWZhY2UtPnBzYXV4OwpAQCAtNzUsMTEgKzc1LDExIEBACiAgICAgICAgIGdvdG8gRXhpdDsKIAogICAgICAgcCAgICAgICAgID0gKEZUX0J5dGUqKWdseXBoX2RhdGEucG9pbnRlcjsKLSAgICAgIGZkX3NlbGVjdCA9IChGVF9VSW50KWNpZF9nZXRfb2Zmc2V0KCAmcCwgKEZUX0J5dGUpY2lkLT5mZF9ieXRlcyApOworICAgICAgZmRfc2VsZWN0ID0gY2lkX2dldF9vZmZzZXQoICZwLCAoRlRfQnl0ZSljaWQtPmZkX2J5dGVzICk7CiAKICAgICAgIGlmICggZ2x5cGhfZGF0YS5sZW5ndGggIT0gMCApCiAgICAgICB7Ci0gICAgICAgIGdseXBoX2xlbmd0aCA9IGdseXBoX2RhdGEubGVuZ3RoIC0gY2lkLT5mZF9ieXRlczsKKyAgICAgICAgZ2x5cGhfbGVuZ3RoID0gKEZUX1VMb25nKSggZ2x5cGhfZGF0YS5sZW5ndGggLSBjaWQtPmZkX2J5dGVzICk7CiAgICAgICAgICh2b2lkKUZUX0FMTE9DKCBjaGFyc3RyaW5nLCBnbHlwaF9sZW5ndGggKTsKICAgICAgICAgaWYgKCAhZXJyb3IgKQogICAgICAgICAgIGZ0X21lbWNweSggY2hhcnN0cmluZywgZ2x5cGhfZGF0YS5wb2ludGVyICsgY2lkLT5mZF9ieXRlcywKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAvKiBGb3Igb3JkaW5hcnkgZm9udHMgcmVhZCB0aGUgQ0lEIGZvbnQgZGljdGlvbmFyeSBpbmRleCAqLwogICAgIC8qIGFuZCBjaGFyc3RyaW5nIG9mZnNldCBmcm9tIHRoZSBDSURNYXAuICAgICAgICAgICAgICAgICovCiAgICAgewotICAgICAgRlRfVUludCAgIGVudHJ5X2xlbiA9IGNpZC0+ZmRfYnl0ZXMgKyBjaWQtPmdkX2J5dGVzOworICAgICAgRlRfVUludCAgIGVudHJ5X2xlbiA9IChGVF9VSW50KSggY2lkLT5mZF9ieXRlcyArIGNpZC0+Z2RfYnl0ZXMgKTsKICAgICAgIEZUX1VMb25nICBvZmYxOwogCiAKQEAgLTEwOSwxMyArMTA5LDEzIEBACiAgICAgICAgIGdvdG8gRXhpdDsKIAogICAgICAgcCAgICAgICAgICAgID0gKEZUX0J5dGUqKXN0cmVhbS0+Y3Vyc29yOwotICAgICAgZmRfc2VsZWN0ICAgID0gKEZUX1VJbnQpIGNpZF9nZXRfb2Zmc2V0KCAmcCwgKEZUX0J5dGUpY2lkLT5mZF9ieXRlcyApOwotICAgICAgb2ZmMSAgICAgICAgID0gKEZUX1VMb25nKWNpZF9nZXRfb2Zmc2V0KCAmcCwgKEZUX0J5dGUpY2lkLT5nZF9ieXRlcyApOworICAgICAgZmRfc2VsZWN0ICAgID0gY2lkX2dldF9vZmZzZXQoICZwLCAoRlRfQnl0ZSljaWQtPmZkX2J5dGVzICk7CisgICAgICBvZmYxICAgICAgICAgPSBjaWRfZ2V0X29mZnNldCggJnAsIChGVF9CeXRlKWNpZC0+Z2RfYnl0ZXMgKTsKICAgICAgIHAgICAgICAgICAgICs9IGNpZC0+ZmRfYnl0ZXM7CiAgICAgICBnbHlwaF9sZW5ndGggPSBjaWRfZ2V0X29mZnNldCggJnAsIChGVF9CeXRlKWNpZC0+Z2RfYnl0ZXMgKSAtIG9mZjE7CiAgICAgICBGVF9GUkFNRV9FWElUKCk7CiAKLSAgICAgIGlmICggZmRfc2VsZWN0ID49IChGVF9VSW50KWNpZC0+bnVtX2RpY3RzICkKKyAgICAgIGlmICggZmRfc2VsZWN0ID49IChGVF9VTG9uZyljaWQtPm51bV9kaWN0cyApCiAgICAgICB7CiAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfT2Zmc2V0ICk7CiAgICAgICAgIGdvdG8gRXhpdDsKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgIHsKICAgICAgIENJRF9GYWNlRGljdCAgZGljdDsKICAgICAgIENJRF9TdWJycyAgICAgY2lkX3N1YnJzID0gZmFjZS0+c3VicnMgKyBmZF9zZWxlY3Q7Ci0gICAgICBGVF9JbnQgICAgICAgIGNzX29mZnNldDsKKyAgICAgIEZUX1VJbnQgICAgICAgY3Nfb2Zmc2V0OwogCiAKICAgICAgIC8qIFNldCB1cCBzdWJycyAqLwpAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgICAvKiBEZWNvZGUgdGhlIGNoYXJzdHJpbmcuICovCiAKICAgICAgIC8qIEFkanVzdG1lbnQgZm9yIHNlZWQgYnl0ZXMuICovCi0gICAgICBjc19vZmZzZXQgPSAoIGRlY29kZXItPmxlbklWID49IDAgPyBkZWNvZGVyLT5sZW5JViA6IDAgKTsKKyAgICAgIGNzX29mZnNldCA9IGRlY29kZXItPmxlbklWID49IDAgPyAoRlRfVUludClkZWNvZGVyLT5sZW5JViA6IDA7CiAKICAgICAgIC8qIERlY3J5cHQgb25seSBpZiBsZW5JViA+PSAwLiAqLwogICAgICAgaWYgKCBkZWNvZGVyLT5sZW5JViA+PSAwICkKQEAgLTE1OSw3ICsxNTksNyBAQAogCiAgICAgICBlcnJvciA9IGRlY29kZXItPmZ1bmNzLnBhcnNlX2NoYXJzdHJpbmdzKAogICAgICAgICAgICAgICAgIGRlY29kZXIsIGNoYXJzdHJpbmcgKyBjc19vZmZzZXQsCi0gICAgICAgICAgICAgICAgKEZUX0ludClnbHlwaF9sZW5ndGggLSBjc19vZmZzZXQgKTsKKyAgICAgICAgICAgICAgICBnbHlwaF9sZW5ndGggLSBjc19vZmZzZXQgKTsKICAgICB9CiAKICAgICBGVF9GUkVFKCBjaGFyc3RyaW5nICk7CkBAIC0zNTcsNyArMzU3LDYgQEAKICAgICB7CiAgICAgICBGVF9CQm94ICAgICAgICAgICAgY2JveDsKICAgICAgIEZUX0dseXBoX01ldHJpY3MqICBtZXRyaWNzID0gJmNpZGdseXBoLT5tZXRyaWNzOwotICAgICAgRlRfVmVjdG9yICAgICAgICAgIGFkdmFuY2U7CiAKIAogICAgICAgLyogY29weSB0aGUgX3Vuc2NhbGVkXyBhZHZhbmNlIHdpZHRoICovCkBAIC0zNzcsMjIgKzM3NiwyNyBAQAogICAgICAgaWYgKCBjaWRzaXplLT5tZXRyaWNzLnlfcHBlbSA8IDI0ICkKICAgICAgICAgY2lkZ2x5cGgtPm91dGxpbmUuZmxhZ3MgfD0gRlRfT1VUTElORV9ISUdIX1BSRUNJU0lPTjsKIAotICAgICAgLyogYXBwbHkgdGhlIGZvbnQgbWF0cml4ICovCi0gICAgICBGVF9PdXRsaW5lX1RyYW5zZm9ybSggJmNpZGdseXBoLT5vdXRsaW5lLCAmZm9udF9tYXRyaXggKTsKKyAgICAgIC8qIGFwcGx5IHRoZSBmb250IG1hdHJpeCwgaWYgYW55ICovCisgICAgICBpZiAoIGZvbnRfbWF0cml4Lnh4ICE9IDB4MTAwMDBMIHx8IGZvbnRfbWF0cml4Lnl5ICE9IDB4MTAwMDBMIHx8CisgICAgICAgICAgIGZvbnRfbWF0cml4Lnh5ICE9IDAgICAgICAgIHx8IGZvbnRfbWF0cml4Lnl4ICE9IDAgICAgICAgICkKKyAgICAgIHsKKyAgICAgICAgRlRfT3V0bGluZV9UcmFuc2Zvcm0oICZjaWRnbHlwaC0+b3V0bGluZSwgJmZvbnRfbWF0cml4ICk7CiAKLSAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCAmY2lkZ2x5cGgtPm91dGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udF9vZmZzZXQueCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250X29mZnNldC55ICk7CisgICAgICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlID0gRlRfTXVsRml4KCBtZXRyaWNzLT5ob3JpQWR2YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfbWF0cml4Lnh4ICk7CisgICAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlID0gRlRfTXVsRml4KCBtZXRyaWNzLT52ZXJ0QWR2YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfbWF0cml4Lnl5ICk7CisgICAgICB9CiAKLSAgICAgIGFkdmFuY2UueCA9IG1ldHJpY3MtPmhvcmlBZHZhbmNlOwotICAgICAgYWR2YW5jZS55ID0gMDsKLSAgICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0oICZhZHZhbmNlLCAmZm9udF9tYXRyaXggKTsKLSAgICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlID0gYWR2YW5jZS54ICsgZm9udF9vZmZzZXQueDsKKyAgICAgIGlmICggZm9udF9vZmZzZXQueCB8fCBmb250X29mZnNldC55ICkKKyAgICAgIHsKKyAgICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoICZjaWRnbHlwaC0+b3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfb2Zmc2V0LngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250X29mZnNldC55ICk7CiAKLSAgICAgIGFkdmFuY2UueCA9IDA7Ci0gICAgICBhZHZhbmNlLnkgPSBtZXRyaWNzLT52ZXJ0QWR2YW5jZTsKLSAgICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0oICZhZHZhbmNlLCAmZm9udF9tYXRyaXggKTsKLSAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlID0gYWR2YW5jZS55ICsgZm9udF9vZmZzZXQueTsKKyAgICAgICAgbWV0cmljcy0+aG9yaUFkdmFuY2UgKz0gZm9udF9vZmZzZXQueDsKKyAgICAgICAgbWV0cmljcy0+dmVydEFkdmFuY2UgKz0gZm9udF9vZmZzZXQueTsKKyAgICAgIH0KIAogICAgICAgaWYgKCAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkgPT0gMCApCiAgICAgICB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZGdsb2FkLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZGdsb2FkLmgKaW5kZXggYTBhOTFiZi4uNGExMGNlNSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC9jaWRnbG9hZC5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkZ2xvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBHbHlwaCBMb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDAyLCAyMDA0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC9jaWRsb2FkLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZGxvYWQuYwppbmRleCAxY2RhMGVlLi5lMjNiODJmIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZGxvYWQuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZGxvYWQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDSUQta2V5ZWQgVHlwZTEgZm9udCBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA2LCAyMDA5LCAyMDExLTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzgsNyArMzgsNyBAQAogCiAKICAgLyogcmVhZCBhIHNpbmdsZSBvZmZzZXQgKi8KLSAgRlRfTE9DQUxfREVGKCBGVF9Mb25nICkKKyAgRlRfTE9DQUxfREVGKCBGVF9VTG9uZyApCiAgIGNpZF9nZXRfb2Zmc2V0KCBGVF9CeXRlKiAgKnN0YXJ0LAogICAgICAgICAgICAgICAgICAgRlRfQnl0ZSAgICBvZmZzaXplICkKICAgewpAQCAtNTMsNyArNTMsNyBAQAogICAgIH0KIAogICAgICpzdGFydCA9IHA7Ci0gICAgcmV0dXJuIChGVF9Mb25nKXJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKIApAQCAtMTY3LDYgKzE2Nyw3IEBACiAgICAgICBtYXRyaXggPSAmZGljdC0+Zm9udF9tYXRyaXg7CiAgICAgICBvZmZzZXQgPSAmZGljdC0+Zm9udF9vZmZzZXQ7CiAKKyAgICAgIC8qIGlucHV0IGlzIHNjYWxlZCBieSAxMDAwIHRvIGFjY29tbW9kYXRlIGRlZmF1bHQgRm9udE1hdHJpeCAqLwogICAgICAgcmVzdWx0ID0gY2lkX3BhcnNlcl90b19maXhlZF9hcnJheSggcGFyc2VyLCA2LCB0ZW1wLCAzICk7CiAKICAgICAgIGlmICggcmVzdWx0IDwgNiApCkBAIC0xODAsMTUgKzE4MSwxMiBAQAogICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKICAgICAgIH0KIAotICAgICAgLyogU2V0IFVuaXRzIHBlciBFTSBiYXNlZCBvbiBGb250TWF0cml4IHZhbHVlcy4gIFdlIHNldCB0aGUgdmFsdWUgdG8gKi8KLSAgICAgIC8qIDEwMDAgLyB0ZW1wX3NjYWxlLCBiZWNhdXNlIHRlbXBfc2NhbGUgd2FzIGFscmVhZHkgbXVsdGlwbGllZCBieSAgICovCi0gICAgICAvKiAxMDAwIChpbiB0MV90b2ZpeGVkLCBmcm9tIHBzb2Jqcy5jKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICByb290LT51bml0c19wZXJfRU0gPSAoRlRfVVNob3J0KUZUX0RpdkZpeCggMTAwMCwgdGVtcF9zY2FsZSApOwotCi0gICAgICAvKiB3ZSBuZWVkIHRvIHNjYWxlIHRoZSB2YWx1ZXMgYnkgMS4wL3RlbXBbM10gKi8KKyAgICAgIC8qIGF0eXBpY2FsIGNhc2UgKi8KICAgICAgIGlmICggdGVtcF9zY2FsZSAhPSAweDEwMDAwTCApCiAgICAgICB7CisgICAgICAgIC8qIHNldCB1bml0cyBwZXIgRU0gYmFzZWQgb24gRm9udE1hdHJpeCB2YWx1ZXMgKi8KKyAgICAgICAgcm9vdC0+dW5pdHNfcGVyX0VNID0gKEZUX1VTaG9ydClGVF9EaXZGaXgoIDEwMDAsIHRlbXBfc2NhbGUgKTsKKwogICAgICAgICB0ZW1wWzBdID0gRlRfRGl2Rml4KCB0ZW1wWzBdLCB0ZW1wX3NjYWxlICk7CiAgICAgICAgIHRlbXBbMV0gPSBGVF9EaXZGaXgoIHRlbXBbMV0sIHRlbXBfc2NhbGUgKTsKICAgICAgICAgdGVtcFsyXSA9IEZUX0RpdkZpeCggdGVtcFsyXSwgdGVtcF9zY2FsZSApOwpAQCAtMjIyLDYgKzIyMCwxMiBAQAogCiAKICAgICBudW1fZGljdHMgPSBjaWRfcGFyc2VyX3RvX2ludCggcGFyc2VyICk7CisgICAgaWYgKCBudW1fZGljdHMgPCAwICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJwYXJzZV9mZF9hcnJheTogaW52YWxpZCBudW1iZXIgb2YgZGljdGlvbmFyaWVzXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgZ290byBFeGl0OworICAgIH0KIAogICAgIGlmICggIWNpZC0+Zm9udF9kaWN0cyApCiAgICAgewpAQCAtMjMxLDcgKzIzNSw3IEBACiAgICAgICBpZiAoIEZUX05FV19BUlJBWSggY2lkLT5mb250X2RpY3RzLCBudW1fZGljdHMgKSApCiAgICAgICAgIGdvdG8gRXhpdDsKIAotICAgICAgY2lkLT5udW1fZGljdHMgPSAoRlRfVUludCludW1fZGljdHM7CisgICAgICBjaWQtPm51bV9kaWN0cyA9IG51bV9kaWN0czsKIAogICAgICAgLyogZG9uJ3QgZm9yZ2V0IHRvIHNldCBhIGZldyBkZWZhdWx0cyAqLwogICAgICAgZm9yICggbiA9IDA7IG4gPCBjaWQtPm51bV9kaWN0czsgbisrICkKQEAgLTI5MCw3ICsyOTQsNyBAQAogICBjaWRfcGFyc2VfZGljdCggQ0lEX0ZhY2UgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICBDSURfTG9hZGVyKiAgbG9hZGVyLAogICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgIGJhc2UsCi0gICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgc2l6ZSApCisgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgc2l6ZSApCiAgIHsKICAgICBDSURfUGFyc2VyKiAgcGFyc2VyID0gJmxvYWRlci0+cGFyc2VyOwogCkBAIC0zNDIsMTEgKzM0NiwxMSBAQAogICAgICAgICAvKiBsb29rIGZvciBpbW1lZGlhdGVzICovCiAgICAgICAgIGlmICggKmN1ciA9PSAnLycgJiYgY3VyICsgMiA8IGxpbWl0ICkKICAgICAgICAgewotICAgICAgICAgIEZUX1B0ckRpc3QgIGxlbjsKKyAgICAgICAgICBGVF9VSW50ICBsZW47CiAKIAogICAgICAgICAgIGN1cisrOwotICAgICAgICAgIGxlbiA9IHBhcnNlci0+cm9vdC5jdXJzb3IgLSBjdXI7CisgICAgICAgICAgbGVuID0gKEZUX1VJbnQpKCBwYXJzZXItPnJvb3QuY3Vyc29yIC0gY3VyICk7CiAKICAgICAgICAgICBpZiAoIGxlbiA+IDAgJiYgbGVuIDwgMjIgKQogICAgICAgICAgIHsKQEAgLTM2MywxMCArMzY3LDEwIEBACiAgICAgICAgICAgICAgIGlmICggIW5hbWUgKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgIGlmICggY3VyWzBdID09IG5hbWVbMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICAgICAgIGxlbiA9PSAoRlRfUHRyRGlzdClmdF9zdHJsZW4oIChjb25zdCBjaGFyKiluYW1lICkgKQorICAgICAgICAgICAgICBpZiAoIGN1clswXSA9PSBuYW1lWzBdICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICBsZW4gPT0gZnRfc3RybGVuKCAoY29uc3QgY2hhciopbmFtZSApICkKICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEZUX1B0ckRpc3QgIG47CisgICAgICAgICAgICAgICAgRlRfVUludCAgbjsKIAogCiAgICAgICAgICAgICAgICAgZm9yICggbiA9IDE7IG4gPCBsZW47IG4rKyApCkBAIC00MDcsNyArNDExLDcgQEAKICAgICBGVF9JbnQgICAgICAgICBuOwogICAgIENJRF9TdWJycyAgICAgIHN1YnI7CiAgICAgRlRfVUludCAgICAgICAgbWF4X29mZnNldHMgPSAwOwotICAgIEZUX1VMb25nKiAgICAgIG9mZnNldHMgPSAwOworICAgIEZUX1VMb25nKiAgICAgIG9mZnNldHMgPSBOVUxMOwogICAgIFBTQXV4X1NlcnZpY2UgIHBzYXV4ID0gKFBTQXV4X1NlcnZpY2UpZmFjZS0+cHNhdXg7CiAKIApAQCAtNDUwLDggKzQ1NCw4IEBACiAgICAgICB9CiAKICAgICAgIC8qIHJlYWQgdGhlIHN1YnJtYXAncyBvZmZzZXRzICovCi0gICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBjaWQtPmRhdGFfb2Zmc2V0ICsgZGljdC0+c3Vicm1hcF9vZmZzZXQgKSB8fAotICAgICAgICAgICBGVF9GUkFNRV9FTlRFUiggKCBudW1fc3VicnMgKyAxICkgKiBkaWN0LT5zZF9ieXRlcyApICAgICAgKQorICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggY2lkLT5kYXRhX29mZnNldCArIGRpY3QtPnN1YnJtYXBfb2Zmc2V0ICkgICAgIHx8CisgICAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCAoIG51bV9zdWJycyArIDEgKSAqIChGVF9VSW50KWRpY3QtPnNkX2J5dGVzICkgKQogICAgICAgICBnb3RvIEZhaWw7CiAKICAgICAgIHAgPSAoRlRfQnl0ZSopc3RyZWFtLT5jdXJzb3I7CkBAIC01MDAsNyArNTA0LDcgQEAKICAgICAgICAgfQogICAgICAgfQogCi0gICAgICBzdWJyLT5udW1fc3VicnMgPSBudW1fc3VicnM7CisgICAgICBzdWJyLT5udW1fc3VicnMgPSAoRlRfSW50KW51bV9zdWJyczsKICAgICB9CiAKICAgRXhpdDoKQEAgLTU0Niw3ICs1NTAsNyBAQAogCiAgIHN0YXRpYyBGVF9FcnJvcgogICBjaWRfaGV4X3RvX2JpbmFyeSggRlRfQnl0ZSogIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgZGF0YV9sZW4sCisgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgZGF0YV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgQ0lEX0ZhY2UgIGZhY2UgKQogICB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZGxvYWQuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkbG9hZC5oCmluZGV4IDhjMTcyZmYuLmQ3Nzc2ZDIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkbG9hZC5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkbG9hZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENJRC1rZXllZCBUeXBlMSBmb250IGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zNiw3ICszNiw3IEBACiAgIH0gQ0lEX0xvYWRlcjsKIAogCi0gIEZUX0xPQ0FMKCBGVF9Mb25nICkKKyAgRlRfTE9DQUwoIEZUX1VMb25nICkKICAgY2lkX2dldF9vZmZzZXQoIEZUX0J5dGUqKiAgc3RhcnQsCiAgICAgICAgICAgICAgICAgICBGVF9CeXRlICAgIG9mZnNpemUgKTsKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC9jaWRvYmpzLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZG9ianMuYwppbmRleCA1OTMyZmZhLi5iZjE1MTliIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZG9ianMuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZG9ianMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDSUQgb2JqZWN0cyBtYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA2LCAyMDA4LCAyMDEwLTIwMTEsIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNDksNyArNDksNyBAQAogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQogICBjaWRfc2xvdF9kb25lKCBGVF9HbHlwaFNsb3QgIHNsb3QgKQogICB7Ci0gICAgc2xvdC0+aW50ZXJuYWwtPmdseXBoX2hpbnRzID0gMDsKKyAgICBzbG90LT5pbnRlcm5hbC0+Z2x5cGhfaGludHMgPSBOVUxMOwogICB9CiAKIApAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICBpZiAoIGZ1bmNzICkKICAgICAgICAgZnVuY3MtPmRlc3Ryb3koIChQU0hfR2xvYmFscyljaWRzaXplLT5pbnRlcm5hbCApOwogCi0gICAgICBjaWRzaXplLT5pbnRlcm5hbCA9IDA7CisgICAgICBjaWRzaXplLT5pbnRlcm5hbCA9IE5VTEw7CiAgICAgfQogICB9CiAKQEAgLTI0Myw4ICsyNDMsOCBAQAogICAgIEZUX0ZSRUUoIGNpZC0+cmVnaXN0cnkgKTsKICAgICBGVF9GUkVFKCBjaWQtPm9yZGVyaW5nICk7CiAKLSAgICBjaWRmYWNlLT5mYW1pbHlfbmFtZSA9IDA7Ci0gICAgY2lkZmFjZS0+c3R5bGVfbmFtZSAgPSAwOworICAgIGNpZGZhY2UtPmZhbWlseV9uYW1lID0gTlVMTDsKKyAgICBjaWRmYWNlLT5zdHlsZV9uYW1lICA9IE5VTEw7CiAKICAgICBGVF9GUkVFKCBmYWNlLT5iaW5hcnlfZGF0YSApOwogICAgIEZUX0ZSRUUoIGZhY2UtPmNpZF9zdHJlYW0gKTsKQEAgLTMzNCw3ICszMzQsNyBAQAogCiAgICAgLyogY2hlY2sgdGhlIGZhY2UgaW5kZXggKi8KICAgICAvKiBYWFg6IGhhbmRsZSBDSUQgZm9udHMgd2l0aCBtb3JlIHRoYW4gYSBzaW5nbGUgZmFjZSAqLwotICAgIGlmICggZmFjZV9pbmRleCAhPSAwICkKKyAgICBpZiAoICggZmFjZV9pbmRleCAmIDB4RkZGRiApICE9IDAgKQogICAgIHsKICAgICAgIEZUX0VSUk9SKCggImNpZF9mYWNlX2luaXQ6IGludmFsaWQgZmFjZSBpbmRleFxuIiApKTsKICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKQEAgLTM1MSwxMCArMzUxLDEwIEBACiAgICAgICBQU19Gb250SW5mbyAgIGluZm8gPSAmY2lkLT5mb250X2luZm87CiAKIAotICAgICAgY2lkZmFjZS0+bnVtX2dseXBocyAgID0gY2lkLT5jaWRfY291bnQ7CisgICAgICBjaWRmYWNlLT5udW1fZ2x5cGhzICAgPSAoRlRfTG9uZyljaWQtPmNpZF9jb3VudDsKICAgICAgIGNpZGZhY2UtPm51bV9jaGFybWFwcyA9IDA7CiAKLSAgICAgIGNpZGZhY2UtPmZhY2VfaW5kZXggPSBmYWNlX2luZGV4OworICAgICAgY2lkZmFjZS0+ZmFjZV9pbmRleCA9IGZhY2VfaW5kZXggJiAweEZGRkY7CiAKICAgICAgIGNpZGZhY2UtPmZhY2VfZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX1NDQUxBQkxFICAgfCAvKiBzY2FsYWJsZSBvdXRsaW5lcyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCB8IC8qIGhvcml6b250YWwgZGF0YSAgICovCkBAIC00MjEsNyArNDIxLDcgQEAKIAogICAgICAgLyogbm8gZW1iZWRkZWQgYml0bWFwIHN1cHBvcnQgKi8KICAgICAgIGNpZGZhY2UtPm51bV9maXhlZF9zaXplcyA9IDA7Ci0gICAgICBjaWRmYWNlLT5hdmFpbGFibGVfc2l6ZXMgPSAwOworICAgICAgY2lkZmFjZS0+YXZhaWxhYmxlX3NpemVzID0gTlVMTDsKIAogICAgICAgY2lkZmFjZS0+YmJveC54TWluID0gICBjaWQtPmZvbnRfYmJveC54TWluICAgICAgICAgICAgPj4gMTY7CiAgICAgICBjaWRmYWNlLT5iYm94LnlNaW4gPSAgIGNpZC0+Zm9udF9iYm94LnlNaW4gICAgICAgICAgICA+PiAxNjsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkb2Jqcy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC9jaWRvYmpzLmgKaW5kZXggYWVlMzQ2ZC4uZTkwOTVjYSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC9jaWRvYmpzLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC9jaWRvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQ0lEIG9iamVjdHMgbWFuYWdlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMiwgMjAwNCwgMjAwNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkcGFyc2UuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkcGFyc2UuYwppbmRleCBkODQ3NmNkLi5jMjc2OTQ5IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZHBhcnNlLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC9jaWRwYXJzZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENJRC1rZXllZCBUeXBlMSBwYXJzZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDcsIDIwMDksIDIwMTMsIDIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC04NiwxMyArODYsMTMgQEAKICAgICAvKiBgU3RhcnREYXRhJyBvciBgL3NmbnRzJyAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIHsKICAgICAgIEZUX0J5dGUgICBidWZmZXJbMjU2ICsgMTBdOwotICAgICAgRlRfTG9uZyAgIHJlYWRfbGVuID0gMjU2ICsgMTA7IC8qIHNhbWUgYXMgc2lnbmVkIEZUX1N0cmVhbS0+c2l6ZSAqLworICAgICAgRlRfVUxvbmcgIHJlYWRfbGVuID0gMjU2ICsgMTA7CiAgICAgICBGVF9CeXRlKiAgcCAgICAgICAgPSBidWZmZXI7CiAKIAogICAgICAgZm9yICggb2Zmc2V0ID0gRlRfU1RSRUFNX1BPUygpOyA7IG9mZnNldCArPSAyNTYgKQogICAgICAgewotICAgICAgICBGVF9Mb25nICBzdHJlYW1fbGVuOyAvKiBzYW1lIGFzIHNpZ25lZCBGVF9TdHJlYW0tPnNpemUgKi8KKyAgICAgICAgRlRfVUxvbmcgIHN0cmVhbV9sZW47CiAKIAogICAgICAgICBzdHJlYW1fbGVuID0gc3RyZWFtLT5zaXplIC0gRlRfU1RSRUFNX1BPUygpOwpAQCAtMTc2LDcgKzE3NiwxOCBAQAogICAgICAgaWYgKCBjdXJbMF0gPT0gJ1MnICYmIGZ0X3N0cm5jbXAoIChjaGFyKiljdXIsICJTdGFydERhdGEiLCA5ICkgPT0gMCApCiAgICAgICB7CiAgICAgICAgIGlmICggZnRfc3RybmNtcCggKGNoYXIqKWFyZzEsICIoSGV4KSIsIDUgKSA9PSAwICkKLSAgICAgICAgICBwYXJzZXItPmJpbmFyeV9sZW5ndGggPSBmdF9hdG9sKCAoY29uc3QgY2hhciAqKWFyZzIgKTsKKyAgICAgICAgeworICAgICAgICAgIEZUX0xvbmcgIHRtcCA9IGZ0X2F0b2woIChjb25zdCBjaGFyICopYXJnMiApOworCisKKyAgICAgICAgICBpZiAoIHRtcCA8IDAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0VSUk9SKCggImNpZF9wYXJzZXJfbmV3OiBpbnZhbGlkIGxlbmd0aCBvZiBoZXggZGF0YVxuIiApKTsKKyAgICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyc2VyLT5iaW5hcnlfbGVuZ3RoID0gKEZUX1VMb25nKXRtcDsKKyAgICAgICAgfQogCiAgICAgICAgIGdvdG8gRXhpdDsKICAgICAgIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkcGFyc2UuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkcGFyc2UuaAppbmRleCBmMjdiZTY1Li5mNTgxYmI0IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZHBhcnNlLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC9jaWRwYXJzZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENJRC1rZXllZCBUeXBlMSBwYXJzZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDQsIDIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC02NCwxMSArNjQsMTEgQEAKICAgICBGVF9TdHJlYW0gICAgIHN0cmVhbTsKIAogICAgIEZUX0J5dGUqICAgICAgcG9zdHNjcmlwdDsKLSAgICBGVF9Mb25nICAgICAgIHBvc3RzY3JpcHRfbGVuOworICAgIEZUX1VMb25nICAgICAgcG9zdHNjcmlwdF9sZW47CiAKICAgICBGVF9VTG9uZyAgICAgIGRhdGFfb2Zmc2V0OwogCi0gICAgRlRfTG9uZyAgICAgICBiaW5hcnlfbGVuZ3RoOworICAgIEZUX1VMb25nICAgICAgYmluYXJ5X2xlbmd0aDsKIAogICAgIENJRF9GYWNlSW5mbyAgY2lkOwogICAgIEZUX0ludCAgICAgICAgbnVtX2RpY3Q7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZHJpdmVyLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZHJpdmVyLmMKaW5kZXggNjEzMmEyNy4uMDdjNGNjNCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC9jaWRyaXZlci5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkcml2ZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDSUQgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA0LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgImNpZGVycnMuaCIKIAogI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9YRlJFRTg2X05BTUVfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9ICiAjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfSU5GT19ICiAjaW5jbHVkZSBGVF9TRVJWSUNFX0NJRF9ICiAKQEAgLTE2OCw3ICsxNjgsNyBAQAogCiAgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlRGVzY1JlYyAgY2lkX3NlcnZpY2VzW10gPQogICB7Ci0gICAgeyBGVF9TRVJWSUNFX0lEX1hGODZfTkFNRSwgICAgICAgICAgICBGVF9YRjg2X0ZPUk1BVF9DSUQgfSwKKyAgICB7IEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQsICAgICAgICAgIEZUX0ZPTlRfRk9STUFUX0NJRCB9LAogICAgIHsgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJmNpZF9zZXJ2aWNlX3BzX25hbWUgfSwKICAgICB7IEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9JTkZPLCAgICAgICZjaWRfc2VydmljZV9wc19pbmZvIH0sCiAgICAgeyBGVF9TRVJWSUNFX0lEX0NJRCwgICAgICAgICAgICAgICAgICAmY2lkX3NlcnZpY2VfY2lkX2luZm8gfSwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkcml2ZXIuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkcml2ZXIuaAppbmRleCAzYzQ1ZTA2Li5lNWI4Njc4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZHJpdmVyLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC9jaWRyaXZlci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgQ0lEIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDEsIDIwMDIgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZHRva2VuLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL2NpZHRva2VuLmgKaW5kZXggOTA0Y2IwOS4uODJlYWUwYyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC9jaWR0b2tlbi5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvY2lkdG9rZW4uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDSUQgdG9rZW4gZGVmaW5pdGlvbnMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDAyLCAyMDAzLCAyMDA2LCAyMDA4LCAyMDA5IGJ5ICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC90eXBlMWNpZC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL2NpZC90eXBlMWNpZC5jCmluZGV4IDBiODY2ZTkuLjBkNTRjYTcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9jaWQvdHlwZTFjaWQuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvY2lkL3R5cGUxY2lkLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgT3BlblR5cGUgZHJpdmVyIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC9KYW1maWxlIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L0phbWZpbGUKaW5kZXggZmFlZGVkOS4uNjc5M2YwZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L0phbWZpbGUKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L0phbWZpbGUKQEAgLTEsNiArMSw2IEBACiAjIEZyZWVUeXBlIDIgc3JjL3BzYXV4IEphbWZpbGUKICMKLSMgQ29weXJpZ2h0IDIwMDEsIDIwMDIgYnkKKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCkBAIC0xNiw4ICsxNiwxMiBAQAogCiAgIGlmICQoRlQyX01VTFRJKQogICB7Ci0gICAgX3NvdXJjZXMgPSBwc2F1eG1vZCBwc29ianMgICB0MWRlY29kZSB0MWNtYXAKLSAgICAgICAgICAgICAgIHBzY29udiAgIGFmbXBhcnNlCisgICAgX3NvdXJjZXMgPSBhZm1wYXJzZQorICAgICAgICAgICAgICAgcHNhdXhtb2QKKyAgICAgICAgICAgICAgIHBzY29udgorICAgICAgICAgICAgICAgcHNvYmpzCisgICAgICAgICAgICAgICB0MWNtYXAKKyAgICAgICAgICAgICAgIHQxZGVjb2RlCiAgICAgICAgICAgICAgICA7CiAgIH0KICAgZWxzZQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L2FmbXBhcnNlLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvYWZtcGFyc2UuYwppbmRleCA2YTQwZTExLi4zYWQ0NGVjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvYWZtcGFyc2UuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvYWZtcGFyc2UuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBRk0gcGFyc2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDEwLCAyMDEyLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNzUsOCArNzUsOCBAQAogI2RlZmluZSBBRk1fU1RSRUFNX0tFWV9CRUdJTiggc3RyZWFtICkgICAgXAogICAgICAgICAgIChjaGFyKikoIChzdHJlYW0pLT5jdXJzb3IgLSAxICkKIAotI2RlZmluZSBBRk1fU1RSRUFNX0tFWV9MRU4oIHN0cmVhbSwga2V5ICkgICAgICAgXAotICAgICAgICAgICggKGNoYXIqKShzdHJlYW0pLT5jdXJzb3IgLSBrZXkgLSAxICkKKyNkZWZpbmUgQUZNX1NUUkVBTV9LRVlfTEVOKCBzdHJlYW0sIGtleSApICAgICAgICAgICBcCisgICAgICAgICAgKEZUX09mZnNldCkoIChjaGFyKikoc3RyZWFtKS0+Y3Vyc29yIC0ga2V5IC0gMSApCiAKICNkZWZpbmUgQUZNX1NUQVRVU19FT0MoIHN0cmVhbSApIFwKICAgICAgICAgICAoIChzdHJlYW0pLT5zdGF0dXMgPj0gQUZNX1NUUkVBTV9TVEFUVVNfRU9DICkKQEAgLTM2OSwxMSArMzY5LDExIEBACiAgIEZUX0xPQ0FMX0RFRiggRlRfSW50ICkKICAgYWZtX3BhcnNlcl9yZWFkX3ZhbHMoIEFGTV9QYXJzZXIgIHBhcnNlciwKICAgICAgICAgICAgICAgICAgICAgICAgIEFGTV9WYWx1ZSAgIHZhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBuICkKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgIG4gKQogICB7CiAgICAgQUZNX1N0cmVhbSAgc3RyZWFtID0gcGFyc2VyLT5zdHJlYW07CiAgICAgY2hhciogICAgICAgc3RyOwotICAgIEZUX1VJbnQgICAgIGk7CisgICAgRlRfSW50ICAgICAgaTsKIAogCiAgICAgaWYgKCBuID4gQUZNX01BWF9BUkdVTUVOVFMgKQpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIEZUX09mZnNldCogIGxlbiApCiAgIHsKICAgICBBRk1fU3RyZWFtICBzdHJlYW0gPSBwYXJzZXItPnN0cmVhbTsKLSAgICBjaGFyKiAgICAgICBrZXkgICAgPSAwOyAgLyogbWFrZSBzdHVwaWQgY29tcGlsZXIgaGFwcHkgKi8KKyAgICBjaGFyKiAgICAgICBrZXkgICAgPSBOVUxMOyAgLyogbWFrZSBzdHVwaWQgY29tcGlsZXIgaGFwcHkgKi8KIAogCiAgICAgaWYgKCBsaW5lICkKQEAgLTU2Miw3ICs1NjIsNyBAQAogICB9CiAKIAotICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgc3RhdGljIEZUX0Vycm9yCiAgIGFmbV9wYXJzZXJfcmVhZF9pbnQoIEFGTV9QYXJzZXIgIHBhcnNlciwKICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50KiAgICAgYWludCApCiAgIHsKQEAgLTU5MCwxMSArNTkwLDE3IEBACiAgICAgY2hhciogICAgICAgICAga2V5OwogICAgIEZUX09mZnNldCAgICAgIGxlbjsKICAgICBpbnQgICAgICAgICAgICBuID0gLTE7CisgICAgRlRfSW50ICAgICAgICAgdG1wOwogCiAKLSAgICBpZiAoIGFmbV9wYXJzZXJfcmVhZF9pbnQoIHBhcnNlciwgJmZpLT5OdW1UcmFja0tlcm4gKSApCisgICAgaWYgKCBhZm1fcGFyc2VyX3JlYWRfaW50KCBwYXJzZXIsICZ0bXAgKSApCiAgICAgICAgIGdvdG8gRmFpbDsKIAorICAgIGlmICggdG1wIDwgMCApCisgICAgICBnb3RvIEZhaWw7CisKKyAgICBmaS0+TnVtVHJhY2tLZXJuID0gKEZUX1VJbnQpdG1wOworCiAgICAgaWYgKCBmaS0+TnVtVHJhY2tLZXJuICkKICAgICB7CiAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHBhcnNlci0+bWVtb3J5OwpAQCAtNjE1LDcgKzYyMSw3IEBACiAgICAgICBjYXNlIEFGTV9UT0tFTl9UUkFDS0tFUk46CiAgICAgICAgIG4rKzsKIAotICAgICAgICBpZiAoIG4gPj0gZmktPk51bVRyYWNrS2VybiApCisgICAgICAgIGlmICggbiA+PSAoaW50KWZpLT5OdW1UcmFja0tlcm4gKQogICAgICAgICAgIGdvdG8gRmFpbDsKIAogICAgICAgICB0ayA9IGZpLT5UcmFja0tlcm5zICsgbjsKQEAgLTYzOSw3ICs2NDUsNyBAQAogICAgICAgY2FzZSBBRk1fVE9LRU5fRU5EVFJBQ0tLRVJOOgogICAgICAgY2FzZSBBRk1fVE9LRU5fRU5ES0VSTkRBVEE6CiAgICAgICBjYXNlIEFGTV9UT0tFTl9FTkRGT05UTUVUUklDUzoKLSAgICAgICAgZmktPk51bVRyYWNrS2VybiA9IG4gKyAxOworICAgICAgICBmaS0+TnVtVHJhY2tLZXJuID0gKEZUX1VJbnQpKCBuICsgMSApOwogICAgICAgICByZXR1cm4gRlRfRXJyX09rOwogCiAgICAgICBjYXNlIEFGTV9UT0tFTl9VTktOT1dOOgpAQCAtNjg4LDExICs2OTQsMTcgQEAKICAgICBjaGFyKiAgICAgICAgIGtleTsKICAgICBGVF9PZmZzZXQgICAgIGxlbjsKICAgICBpbnQgICAgICAgICAgIG4gPSAtMTsKKyAgICBGVF9JbnQgICAgICAgIHRtcDsKIAogCi0gICAgaWYgKCBhZm1fcGFyc2VyX3JlYWRfaW50KCBwYXJzZXIsICZmaS0+TnVtS2VyblBhaXIgKSApCisgICAgaWYgKCBhZm1fcGFyc2VyX3JlYWRfaW50KCBwYXJzZXIsICZ0bXAgKSApCiAgICAgICBnb3RvIEZhaWw7CiAKKyAgICBpZiAoIHRtcCA8IDAgKQorICAgICAgZ290byBGYWlsOworCisgICAgZmktPk51bUtlcm5QYWlyID0gKEZUX1VJbnQpdG1wOworCiAgICAgaWYgKCBmaS0+TnVtS2VyblBhaXIgKQogICAgIHsKICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gcGFyc2VyLT5tZW1vcnk7CkBAIC03MjAsNyArNzMyLDcgQEAKIAogICAgICAgICAgIG4rKzsKIAotICAgICAgICAgIGlmICggbiA+PSBmaS0+TnVtS2VyblBhaXIgKQorICAgICAgICAgIGlmICggbiA+PSAoaW50KWZpLT5OdW1LZXJuUGFpciApCiAgICAgICAgICAgICBnb3RvIEZhaWw7CiAKICAgICAgICAgICBrcCA9IGZpLT5LZXJuUGFpcnMgKyBuOwpAQCAtNzMzLDggKzc0NSw5IEBACiAgICAgICAgICAgaWYgKCByIDwgMyApCiAgICAgICAgICAgICBnb3RvIEZhaWw7CiAKLSAgICAgICAgICBrcC0+aW5kZXgxID0gc2hhcmVkX3ZhbHNbMF0udS5pOwotICAgICAgICAgIGtwLT5pbmRleDIgPSBzaGFyZWRfdmFsc1sxXS51Lmk7CisgICAgICAgICAgLyogaW5kZXggdmFsdWVzIGNhbid0IGJlIG5lZ2F0aXZlICovCisgICAgICAgICAga3AtPmluZGV4MSA9IHNoYXJlZF92YWxzWzBdLnUudTsKKyAgICAgICAgICBrcC0+aW5kZXgyID0gc2hhcmVkX3ZhbHNbMV0udS51OwogICAgICAgICAgIGlmICggdG9rZW4gPT0gQUZNX1RPS0VOX0tQWSApCiAgICAgICAgICAgewogICAgICAgICAgICAga3AtPnggPSAwOwpAQCAtNzUyLDcgKzc2NSw3IEBACiAgICAgICBjYXNlIEFGTV9UT0tFTl9FTkRLRVJOUEFJUlM6CiAgICAgICBjYXNlIEFGTV9UT0tFTl9FTkRLRVJOREFUQToKICAgICAgIGNhc2UgQUZNX1RPS0VOX0VOREZPTlRNRVRSSUNTOgotICAgICAgICBmaS0+TnVtS2VyblBhaXIgPSBuICsgMTsKKyAgICAgICAgZmktPk51bUtlcm5QYWlyID0gKEZUX1VJbnQpKCBuICsgMSApOwogICAgICAgICBmdF9xc29ydCggZmktPktlcm5QYWlycywgZmktPk51bUtlcm5QYWlyLAogICAgICAgICAgICAgICAgICAgc2l6ZW9mICggQUZNX0tlcm5QYWlyUmVjICksCiAgICAgICAgICAgICAgICAgICBhZm1fY29tcGFyZV9rZXJuX3BhaXJzICk7CkBAIC04MTUsNyArODI4LDcgQEAKIAogICBzdGF0aWMgRlRfRXJyb3IKICAgYWZtX3BhcnNlcl9za2lwX3NlY3Rpb24oIEFGTV9QYXJzZXIgIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZNX1Rva2VuICAgZW5kX3NlY3Rpb24gKQogICB7CiAgICAgY2hhciogICAgICBrZXk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvYWZtcGFyc2UuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC9hZm1wYXJzZS5oCmluZGV4IDM1ZDk2MDQuLmY5MjJjNGUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC9hZm1wYXJzZS5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC9hZm1wYXJzZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFGTSBwYXJzZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC02MSw2ICs2MSw3IEBACiAgICAgICBjaGFyKiAgICAgczsKICAgICAgIEZUX0ZpeGVkICBmOwogICAgICAgRlRfSW50ICAgIGk7CisgICAgICBGVF9VSW50ICAgdTsKICAgICAgIEZUX0Jvb2wgICBiOwogCiAgICAgfSB1OwpAQCAtNzIsNyArNzMsNyBAQAogICBGVF9MT0NBTCggRlRfSW50ICkKICAgYWZtX3BhcnNlcl9yZWFkX3ZhbHMoIEFGTV9QYXJzZXIgIHBhcnNlciwKICAgICAgICAgICAgICAgICAgICAgICAgIEFGTV9WYWx1ZSAgIHZhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBuICk7CisgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICBuICk7CiAKICAgLyogcmVhZCB0aGUgbmV4dCBrZXkgZnJvbSB0aGUgbmV4dCBsaW5lIG9yIGNvbHVtbiAqLwogICBGVF9MT0NBTCggY2hhciogKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L3BzYXV4LmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNhdXguYwppbmRleCBhNGI5YzVjLi43ZjFkOWFhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNhdXguYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNhdXguYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBhdXhpbGlhcnkgUG9zdFNjcmlwdCBkcml2ZXIgY29tcG9uZW50IChib2R5IG9ubHkpLiAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDAyLCAyMDA2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L3BzYXV4ZXJyLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNhdXhlcnIuaAppbmRleCBkNTIzNzVmLi45NzcxMmYwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNhdXhlcnIuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNhdXhlcnIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQUyBhdXhpbGlhcnkgbW9kdWxlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMSwgMjAxMiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L3BzYXV4bW9kLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNhdXhtb2QuYwppbmRleCA0YjEyNDlkLi4wNmZjYWIwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNhdXhtb2QuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNhdXhtb2QuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBhdXhpbGlhcnkgUG9zdFNjcmlwdCBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDAxLCAyMDAyLCAyMDAzLCAyMDA2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L3BzYXV4bW9kLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNhdXhtb2QuaAppbmRleCAxMjE3MjM2Li5hZTZhOGY5IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNhdXhtb2QuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNhdXhtb2QuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBhdXhpbGlhcnkgUG9zdFNjcmlwdCBtb2R1bGUgaW1wbGVtZW50YXRpb24gKHNwZWNpZmljYXRpb24pLiAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDAxIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L3BzY29udi5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L3BzY29udi5jCmluZGV4IDc3OTJhNjIuLmFjYTc0MTIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC9wc2NvbnYuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNjb252LmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgU29tZSBjb252ZW5pZW5jZSBjb252ZXJzaW9ucyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYsIDIwMDgsIDIwMDksIDIwMTItMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICAgaWYgKCBJU19QU19TUEFDRSggKnAgKSB8fCAqcCBPUCAweDgwICkKICAgICAgICAgYnJlYWs7CiAKLSAgICAgIGMgPSBmdF9jaGFyX3RhYmxlWypwICYgMHg3Zl07CisgICAgICBjID0gZnRfY2hhcl90YWJsZVsqcCAmIDB4N0ZdOwogCiAgICAgICBpZiAoIGMgPCAwIHx8IGMgPj0gYmFzZSApCiAgICAgICAgIGJyZWFrOwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAgICAgICAgIGlmICggSVNfUFNfU1BBQ0UoICpwICkgfHwgKnAgT1AgMHg4MCApCiAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgYyA9IGZ0X2NoYXJfdGFibGVbKnAgJiAweDdmXTsKKyAgICAgICAgYyA9IGZ0X2NoYXJfdGFibGVbKnAgJiAweDdGXTsKIAogICAgICAgICBpZiAoIGMgPCAwIHx8IGMgPj0gMTAgKQogICAgICAgICAgIGJyZWFrOwpAQCAtNDg5LDggKzQ4OSw4IEBACiAgICAgICBpZiAoIGMgT1AgMHg4MCApCiAgICAgICAgIGJyZWFrOwogCi0gICAgICBjID0gZnRfY2hhcl90YWJsZVtjICYgMHg3Rl07Ci0gICAgICBpZiAoICh1bnNpZ25lZCljID49IDE2ICkKKyAgICAgIGMgPSAoRlRfVUludClmdF9jaGFyX3RhYmxlW2MgJiAweDdGXTsKKyAgICAgIGlmICggYyA+PSAxNiApCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBwYWQgPSAoIHBhZCA8PCA0ICkgfCBjOwpAQCAtNTIxLDcgKzUyMSw3IEBACiAgICAgICBpZiAoICpwIE9QIDB4ODAgKQogICAgICAgICBicmVhazsKIAotICAgICAgYyA9IGZ0X2NoYXJfdGFibGVbKnAgJiAweDdmXTsKKyAgICAgIGMgPSBmdF9jaGFyX3RhYmxlWypwICYgMHg3Rl07CiAKICAgICAgIGlmICggKHVuc2lnbmVkKWMgPj0gMTYgKQogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC9wc2NvbnYuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC9wc2NvbnYuaAppbmRleCBkOTFjNzYyLi4xMGYxZmY3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNjb252LmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L3BzY29udi5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFNvbWUgY29udmVuaWVuY2UgY29udmVyc2lvbnMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LCAyMDEyIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNvYmpzLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNvYmpzLmMKaW5kZXggN2VjM2I0Yy4uMWQzYzdlNiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L3Bzb2Jqcy5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC9wc29ianMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXhpbGlhcnkgZnVuY3Rpb25zIGZvciBQb3N0U2NyaXB0IGZvbnRzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtODEsNyArODEsNyBAQAogICAgIHRhYmxlLT5tYXhfZWxlbXMgPSBjb3VudDsKICAgICB0YWJsZS0+aW5pdCAgICAgID0gMHhERUFEQkVFRlVMOwogICAgIHRhYmxlLT5udW1fZWxlbXMgPSAwOwotICAgIHRhYmxlLT5ibG9jayAgICAgPSAwOworICAgIHRhYmxlLT5ibG9jayAgICAgPSBOVUxMOwogICAgIHRhYmxlLT5jYXBhY2l0eSAgPSAwOwogICAgIHRhYmxlLT5jdXJzb3IgICAgPSAwOwogCkBAIC0xNjUsMTAgKzE2NSwxMCBAQAogICAvKiAgICByZWFsbG9jYXRpb24gZmFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQotICBwc190YWJsZV9hZGQoIFBTX1RhYmxlICAgIHRhYmxlLAotICAgICAgICAgICAgICAgIEZUX0ludCAgICAgIGlkeCwKLSAgICAgICAgICAgICAgICB2b2lkKiAgICAgICBvYmplY3QsCi0gICAgICAgICAgICAgICAgRlRfUHRyRGlzdCAgbGVuZ3RoICkKKyAgcHNfdGFibGVfYWRkKCBQU19UYWJsZSAgdGFibGUsCisgICAgICAgICAgICAgICAgRlRfSW50ICAgIGlkeCwKKyAgICAgICAgICAgICAgICB2b2lkKiAgICAgb2JqZWN0LAorICAgICAgICAgICAgICAgIEZUX1VJbnQgICBsZW5ndGggKQogICB7CiAgICAgaWYgKCBpZHggPCAwIHx8IGlkeCA+PSB0YWJsZS0+bWF4X2VsZW1zICkKICAgICB7CkBAIC0xNzYsMTIgKzE3Niw2IEBACiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKICAgICB9CiAKLSAgICBpZiAoIGxlbmd0aCA8IDAgKQotICAgIHsKLSAgICAgIEZUX0VSUk9SKCggInBzX3RhYmxlX2FkZDogaW52YWxpZCBsZW5ndGhcbiIgKSk7Ci0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLSAgICB9Ci0KICAgICAvKiBncm93IHRoZSBiYXNlIGJsb2NrIGlmIG5lZWRlZCAqLwogICAgIGlmICggdGFibGUtPmN1cnNvciArIGxlbmd0aCA+IHRhYmxlLT5jYXBhY2l0eSApCiAgICAgewpAQCAtNjAwLDYgKzU5NCw5IEBACiAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CiAgICAgfQogCisgICAgaWYgKCBjdXIgPiBsaW1pdCApCisgICAgICBjdXIgPSBsaW1pdDsKKwogICAgIHBhcnNlci0+ZXJyb3IgID0gZXJyb3I7CiAgICAgcGFyc2VyLT5jdXJzb3IgPSBjdXI7CiAgIH0KQEAgLTYyNSw4ICs2MjIsOCBAQAogCiAKICAgICB0b2tlbi0+dHlwZSAgPSBUMV9UT0tFTl9UWVBFX05PTkU7Ci0gICAgdG9rZW4tPnN0YXJ0ID0gMDsKLSAgICB0b2tlbi0+bGltaXQgPSAwOworICAgIHRva2VuLT5zdGFydCA9IE5VTEw7CisgICAgdG9rZW4tPmxpbWl0ID0gTlVMTDsKIAogICAgIC8qIGZpcnN0IG9mIGFsbCwgc2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KICAgICBwc19wYXJzZXJfc2tpcF9zcGFjZXMoIHBhcnNlciApOwpAQCAtNzA3LDcgKzcwNCw3IEBACiAKICAgICBpZiAoICF0b2tlbi0+bGltaXQgKQogICAgIHsKLSAgICAgIHRva2VuLT5zdGFydCA9IDA7CisgICAgICB0b2tlbi0+c3RhcnQgPSBOVUxMOwogICAgICAgdG9rZW4tPnR5cGUgID0gVDFfVE9LRU5fVFlQRV9OT05FOwogICAgIH0KIApAQCAtOTMyLDcgKzkyOSw3IEBACiAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApCiAgIHsKICAgICBGVF9CeXRlKiAgICBjdXIgPSAqY3Vyc29yOwotICAgIEZUX1B0ckRpc3QgIGxlbiA9IDA7CisgICAgRlRfVUludCAgICAgbGVuID0gMDsKICAgICBGVF9JbnQgICAgICBjb3VudDsKICAgICBGVF9TdHJpbmcqICByZXN1bHQ7CiAgICAgRlRfRXJyb3IgICAgZXJyb3I7CkBAIC05NzIsNyArOTY5LDcgQEAKICAgICAgIH0KICAgICB9CiAKLSAgICBsZW4gPSBjdXIgLSAqY3Vyc29yOworICAgIGxlbiA9IChGVF9VSW50KSggY3VyIC0gKmN1cnNvciApOwogICAgIGlmICggY3VyID49IGxpbWl0IHx8IEZUX0FMTE9DKCByZXN1bHQsIGxlbiArIDEgKSApCiAgICAgICByZXR1cm4gMDsKIApAQCAtMTIzMCwyMCArMTIyNywyMiBAQAogCiAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCA0OyBpKysgKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHBzX3RvZml4ZWRhcnJheSggJmN1ciwgbGltaXQsIG1heF9vYmplY3RzLAorICAgICAgICAgICAgcmVzdWx0ID0gcHNfdG9maXhlZGFycmF5KCAmY3VyLCBsaW1pdCwgKEZUX0ludCltYXhfb2JqZWN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCArIGkgKiBtYXhfb2JqZWN0cywgMCApOwogICAgICAgICAgICAgaWYgKCByZXN1bHQgPCAwIHx8IChGVF9VSW50KXJlc3VsdCA8IG1heF9vYmplY3RzICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgRlRfRVJST1IoKCAicHNfcGFyc2VyX2xvYWRfZmllbGQ6IgotICAgICAgICAgICAgICAgICAgICAgICAgICIgZXhwZWN0ZWQgJWQgaW50ZWdlcnMgaW4gdGhlICVzIHN1YmFycmF5XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBleHBlY3RlZCAlZCBpbnRlZ2VyJXMgaW4gdGhlICVzIHN1YmFycmF5XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAiIG9mIC9Gb250QkJveCBpbiB0aGUgL0JsZW5kIGRpY3Rpb25hcnlcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbWF4X29iamVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X29iamVjdHMsIG1heF9vYmplY3RzID4gMSA/ICJzIiA6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkgPT0gMCA/ICJmaXJzdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIGkgPT0gMSA/ICJzZWNvbmQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIGkgPT0gMiA/ICJ0aGlyZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImZvdXJ0aCIgKSApICkpOwogICAgICAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisKKyAgICAgICAgICAgICAgRlRfRlJFRSggdGVtcCApOwogICAgICAgICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICAgICAgICB9CiAKQEAgLTEzMjEsNyArMTMyMCw3IEBACiAgICAgICBnb3RvIEV4aXQ7CiAgICAgfQogICAgIGlmICggKEZUX1VJbnQpbnVtX2VsZW1lbnRzID4gZmllbGQtPmFycmF5X21heCApCi0gICAgICBudW1fZWxlbWVudHMgPSBmaWVsZC0+YXJyYXlfbWF4OworICAgICAgbnVtX2VsZW1lbnRzID0gKEZUX0ludClmaWVsZC0+YXJyYXlfbWF4OwogCiAgICAgb2xkX2N1cnNvciA9IHBhcnNlci0+Y3Vyc29yOwogICAgIG9sZF9saW1pdCAgPSBwYXJzZXItPmxpbWl0OwpAQCAtMTM3OSw3ICsxMzc4LDcgQEAKICAgcHNfcGFyc2VyX3RvX2J5dGVzKCBQU19QYXJzZXIgIHBhcnNlciwKICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgIEZUX09mZnNldCAgbWF4X2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgcG51bV9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogIHBudW1fYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICBkZWxpbWl0ZXJzICkKICAgewogICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKQEAgLTE1NTMsNyArMTU1Miw3IEBACiAgICAgICBGVF9HbHlwaExvYWRlcl9SZXdpbmQoIGxvYWRlciApOwogCiAgICAgICBidWlsZGVyLT5oaW50c19nbG9iYWxzID0gc2l6ZS0+aW50ZXJuYWw7Ci0gICAgICBidWlsZGVyLT5oaW50c19mdW5jcyAgID0gMDsKKyAgICAgIGJ1aWxkZXItPmhpbnRzX2Z1bmNzICAgPSBOVUxMOwogCiAgICAgICBpZiAoIGhpbnRpbmcgKQogICAgICAgICBidWlsZGVyLT5oaW50c19mdW5jcyA9IGdseXBoLT5pbnRlcm5hbC0+Z2x5cGhfaGludHM7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNvYmpzLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvcHNvYmpzLmgKaW5kZXggZTM4MGM2MC4uYmY4NzljMSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L3Bzb2Jqcy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC9wc29ianMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXhpbGlhcnkgZnVuY3Rpb25zIGZvciBQb3N0U2NyaXB0IGZvbnRzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDAyLCAyMDAzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNTIsMTAgKzUyLDEwIEBACiAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgKTsKIAogICBGVF9MT0NBTCggRlRfRXJyb3IgKQotICBwc190YWJsZV9hZGQoIFBTX1RhYmxlICAgIHRhYmxlLAotICAgICAgICAgICAgICAgIEZUX0ludCAgICAgIGlkeCwKLSAgICAgICAgICAgICAgICB2b2lkKiAgICAgICBvYmplY3QsCi0gICAgICAgICAgICAgICAgRlRfUHRyRGlzdCAgbGVuZ3RoICk7CisgIHBzX3RhYmxlX2FkZCggUFNfVGFibGUgIHRhYmxlLAorICAgICAgICAgICAgICAgIEZUX0ludCAgICBpZHgsCisgICAgICAgICAgICAgICAgdm9pZCogICAgIG9iamVjdCwKKyAgICAgICAgICAgICAgICBGVF9VSW50ICAgbGVuZ3RoICk7CiAKICAgRlRfTE9DQUwoIHZvaWQgKQogICBwc190YWJsZV9kb25lKCBQU19UYWJsZSAgdGFibGUgKTsKQEAgLTExMiw3ICsxMTIsNyBAQAogICBwc19wYXJzZXJfdG9fYnl0ZXMoIFBTX1BhcnNlciAgcGFyc2VyLAogICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgRlRfT2Zmc2V0ICBtYXhfYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyogICBwbnVtX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgcG51bV9ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgIGRlbGltaXRlcnMgKTsKIAogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvdDFjbWFwLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvdDFjbWFwLmMKaW5kZXggZmIxMzUzYS4uMmUyZDQzMyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L3QxY21hcC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC90MWNtYXAuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDEgY2hhcmFjdGVyIG1hcCBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMiwgMjAwMywgMjAwNiwgMjAwNywgMjAxMiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzksNyArMzksNyBAQAogICAgIEZUX1NlcnZpY2VfUHNDTWFwcyAgcHNuYW1lcyA9IChGVF9TZXJ2aWNlX1BzQ01hcHMpZmFjZS0+cHNuYW1lczsKIAogCi0gICAgY21hcC0+bnVtX2dseXBocyAgICA9IGZhY2UtPnR5cGUxLm51bV9nbHlwaHM7CisgICAgY21hcC0+bnVtX2dseXBocyAgICA9IChGVF9VSW50KWZhY2UtPnR5cGUxLm51bV9nbHlwaHM7CiAgICAgY21hcC0+Z2x5cGhfbmFtZXMgICA9IChjb25zdCBjaGFyKiBjb25zdCopZmFjZS0+dHlwZTEuZ2x5cGhfbmFtZXM7CiAgICAgY21hcC0+c2lkX3RvX3N0cmluZyA9IHBzbmFtZXMtPmFkb2JlX3N0ZF9zdHJpbmdzOwogICAgIGNtYXAtPmNvZGVfdG9fc2lkICAgPSBpc19leHBlcnQgPyBwc25hbWVzLT5hZG9iZV9leHBlcnRfZW5jb2RpbmcKQEAgLTE4OSw4ICsxODksOCBAQAogICAgIEZUX1VOVVNFRCggcG9pbnRlciApOwogCiAKLSAgICBjbWFwLT5maXJzdCAgID0gZW5jb2RpbmctPmNvZGVfZmlyc3Q7Ci0gICAgY21hcC0+Y291bnQgICA9IChGVF9VSW50KSggZW5jb2RpbmctPmNvZGVfbGFzdCAtIGNtYXAtPmZpcnN0ICk7CisgICAgY21hcC0+Zmlyc3QgICA9IChGVF9VSW50KWVuY29kaW5nLT5jb2RlX2ZpcnN0OworICAgIGNtYXAtPmNvdW50ICAgPSAoRlRfVUludCllbmNvZGluZy0+Y29kZV9sYXN0IC0gY21hcC0+Zmlyc3Q7CiAgICAgY21hcC0+aW5kaWNlcyA9IGVuY29kaW5nLT5jaGFyX2luZGV4OwogCiAgICAgRlRfQVNTRVJUKCBjbWFwLT5pbmRpY2VzICE9IE5VTEwgKTsKQEAgLTI5NSw3ICsyOTUsNyBAQAogCiAgICAgcmV0dXJuIHBzbmFtZXMtPnVuaWNvZGVzX2luaXQoIG1lbW9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnR5cGUxLm51bV9nbHlwaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWZhY2UtPnR5cGUxLm51bV9nbHlwaHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQU19HZXRHbHlwaE5hbWVGdW5jKSZwc2F1eF9nZXRfZ2x5cGhfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBTX0ZyZWVHbHlwaE5hbWVGdW5jKU5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Qb2ludGVyKWZhY2UgKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC90MWNtYXAuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC90MWNtYXAuaAppbmRleCA3YWU2NWQyLi5iOGJhMDZjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvdDFjbWFwLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzYXV4L3QxY21hcC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFR5cGUgMSBjaGFyYWN0ZXIgbWFwIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLCAyMDAzLCAyMDA2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvdDFkZWNvZGUuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC90MWRlY29kZS5jCmluZGV4IGQ2N2EwNWUuLjJlMTk5MjggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC90MWRlY29kZS5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC90MWRlY29kZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBvc3RTY3JpcHQgVHlwZSAxIGRlY29kaW5nIHJvdXRpbmVzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgIGlmICggbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICBuYW1lWzBdID09IGdseXBoX25hbWVbMF0gICAgICAgICAgICYmCiAgICAgICAgICAgIGZ0X3N0cmNtcCggbmFtZSwgZ2x5cGhfbmFtZSApID09IDAgKQotICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgcmV0dXJuIChGVF9JbnQpbjsKICAgICB9CiAKICAgICByZXR1cm4gLTE7CkBAIC0yOTgsNyArMjk4LDcgQEAKIAogICAgIC8qIHRoZSBzZWFjIG9wZXJhdG9yIG11c3Qgbm90IGJlIG5lc3RlZCAqLwogICAgIGRlY29kZXItPnNlYWMgPSBUUlVFOwotICAgIGVycm9yID0gdDFfZGVjb2Rlcl9wYXJzZV9nbHlwaCggZGVjb2RlciwgYmNoYXJfaW5kZXggKTsKKyAgICBlcnJvciA9IHQxX2RlY29kZXJfcGFyc2VfZ2x5cGgoIGRlY29kZXIsIChGVF9VSW50KWJjaGFyX2luZGV4ICk7CiAgICAgZGVjb2Rlci0+c2VhYyA9IEZBTFNFOwogICAgIGlmICggZXJyb3IgKQogICAgICAgZ290byBFeGl0OwpAQCAtMzIwLDcgKzMyMCw3IEBACiAKICAgICAvKiB0aGUgc2VhYyBvcGVyYXRvciBtdXN0IG5vdCBiZSBuZXN0ZWQgKi8KICAgICBkZWNvZGVyLT5zZWFjID0gVFJVRTsKLSAgICBlcnJvciA9IHQxX2RlY29kZXJfcGFyc2VfZ2x5cGgoIGRlY29kZXIsIGFjaGFyX2luZGV4ICk7CisgICAgZXJyb3IgPSB0MV9kZWNvZGVyX3BhcnNlX2dseXBoKCBkZWNvZGVyLCAoRlRfVUludClhY2hhcl9pbmRleCApOwogICAgIGRlY29kZXItPnNlYWMgPSBGQUxTRTsKICAgICBpZiAoIGVycm9yICkKICAgICAgIGdvdG8gRXhpdDsKQEAgLTM4MSwxMCArMzgxLDEwIEBACiAKIAogICAgIC8qIGNvbXB1dGUgcmFuZG9tIHNlZWQgZnJvbSBzdGFjayBhZGRyZXNzIG9mIHBhcmFtZXRlciAqLwotICAgIHNlZWQgPSAoRlRfRml4ZWQpKCAoIChGVF9QdHJEaXN0KShjaGFyKikmc2VlZCAgICAgICAgICAgICAgXgotICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9QdHJEaXN0KShjaGFyKikmZGVjb2RlciAgICAgICAgICAgXgotICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9QdHJEaXN0KShjaGFyKikmY2hhcnN0cmluZ19iYXNlICkgJgotICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMT05HX01BWCApIDsKKyAgICBzZWVkID0gKEZUX0ZpeGVkKSggKCAoRlRfT2Zmc2V0KShjaGFyKikmc2VlZCAgICAgICAgICAgIF4KKyAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfT2Zmc2V0KShjaGFyKikmZGVjb2RlciAgICAgICAgIF4KKyAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfT2Zmc2V0KShjaGFyKikmY2hhcnN0cmluZ19iYXNlICkgJgorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMT05HX01BWCAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgIHNlZWQgPSAoIHNlZWQgXiAoIHNlZWQgPj4gMTAgKSBeICggc2VlZCA+PiAyMCApICkgJiAweEZGRkZMOwogICAgIGlmICggc2VlZCA9PSAwICkKICAgICAgIHNlZWQgPSAweDczODQ7CkBAIC03OTYsNyArNzk2LDggQEAKICAgICAgICAgICBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCA9IDE7CiAKICAgICAgICAgICBpZiAoIGhpbnRlciApCi0gICAgICAgICAgICBoaW50ZXItPnJlc2V0KCBoaW50ZXItPmhpbnRzLCBidWlsZGVyLT5jdXJyZW50LT5uX3BvaW50cyApOworICAgICAgICAgICAgaGludGVyLT5yZXNldCggaGludGVyLT5oaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWJ1aWxkZXItPmN1cnJlbnQtPm5fcG9pbnRzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAxMjoKQEAgLTg2MSw3ICs4NjIsNyBAQAogICAgICAgICAgICAgICAqdmFsdWVzKysgPSB0bXA7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID0gbnVtX3BvaW50czsKKyAgICAgICAgICAgIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID0gKEZUX0ludCludW1fcG9pbnRzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQogCkBAIC04NzksOCArODgwLDggQEAKIAogICAgICAgICAgICAgaWR4ID0gRml4MkludCggdG9wWzBdICk7CiAKLSAgICAgICAgICAgIGlmICggaWR4IDwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAotICAgICAgICAgICAgICAgICBpZHggKyBibGVuZC0+bnVtX2Rlc2lnbnMgPiBkZWNvZGVyLT5sZW5fYnVpbGRjaGFyICkKKyAgICAgICAgICAgIGlmICggaWR4IDwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgICAoRlRfVUludClpZHggKyBibGVuZC0+bnVtX2Rlc2lnbnMgPiBkZWNvZGVyLT5sZW5fYnVpbGRjaGFyICkKICAgICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKIAogICAgICAgICAgICAgZnRfbWVtY3B5KCAmZGVjb2Rlci0+YnVpbGRjaGFyW2lkeF0sCkBAIC0xMDk0LDcgKzEwOTUsOCBAQAogICAgICAgICAgIC8qIGNsb3NlIGhpbnRzIHJlY29yZGluZyBzZXNzaW9uICovCiAgICAgICAgICAgaWYgKCBoaW50ZXIgKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICggaGludGVyLT5jbG9zZSggaGludGVyLT5oaW50cywgYnVpbGRlci0+Y3VycmVudC0+bl9wb2ludHMgKSApCisgICAgICAgICAgICBpZiAoIGhpbnRlci0+Y2xvc2UoIGhpbnRlci0+aGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWJ1aWxkZXItPmN1cnJlbnQtPm5fcG9pbnRzICkgKQogICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKIAogICAgICAgICAgICAgLyogYXBwbHkgaGludHMgdG8gdGhlIGxvYWRlZCBnbHlwaCBvdXRsaW5lIG5vdyAqLwpAQCAtMTM0Niw3ICsxMzQ4LDcgQEAKICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgY2FsbHN1YnIiICkpOwogCiAgICAgICAgICAgICBpZHggPSBGaXgySW50KCB0b3BbMF0gKTsKLSAgICAgICAgICAgIGlmICggaWR4IDwgMCB8fCBpZHggPj0gKEZUX0ludClkZWNvZGVyLT5udW1fc3VicnMgKQorICAgICAgICAgICAgaWYgKCBpZHggPCAwIHx8IGlkeCA+PSBkZWNvZGVyLT5udW1fc3VicnMgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKICAgICAgICAgICAgICAgICAgICAgICAgICAiIGludmFsaWQgc3VicnMgaW5kZXhcbiIgKSk7CkBAIC0xNTc5LDcgKzE1ODEsNyBAQAogCiAgICAgLyogcmV0cmlldmUgUFNOYW1lcyBpbnRlcmZhY2UgZnJvbSBsaXN0IG9mIGN1cnJlbnQgbW9kdWxlcyAqLwogICAgIHsKLSAgICAgIEZUX1NlcnZpY2VfUHNDTWFwcyAgcHNuYW1lcyA9IDA7CisgICAgICBGVF9TZXJ2aWNlX1BzQ01hcHMgIHBzbmFtZXM7CiAKIAogICAgICAgRlRfRkFDRV9GSU5EX0dMT0JBTF9TRVJWSUNFKCBmYWNlLCBwc25hbWVzLCBQT1NUU0NSSVBUX0NNQVBTICk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNhdXgvdDFkZWNvZGUuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC90MWRlY29kZS5oCmluZGV4IDAwNzI4ZGIuLmU4MzA3OGYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC90MWRlY29kZS5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2F1eC90MWRlY29kZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBvc3RTY3JpcHQgVHlwZSAxIGRlY29kaW5nIHJvdXRpbmVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMDEsIDIwMDIsIDIwMDMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvSmFtZmlsZSBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9KYW1maWxlCmluZGV4IDc3OWYxYjAuLjZmYjNiZTEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9KYW1maWxlCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy9wc2hpbnRlciBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDAxLCAyMDAzIGJ5CisjIENvcHlyaWdodCAyMDAxLTIwMTUgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApAQCAtMTYsNyArMTYsMTIgQEAKIAogICBpZiAkKEZUMl9NVUxUSSkKICAgewotICAgIF9zb3VyY2VzID0gcHNocmVjIHBzaGdsb2IgcHNoYWxnbyBwc2htb2QgcHNocGljIDsKKyAgICBfc291cmNlcyA9IHBzaGFsZ28KKyAgICAgICAgICAgICAgIHBzaGdsb2IKKyAgICAgICAgICAgICAgIHBzaG1vZAorICAgICAgICAgICAgICAgcHNocGljCisgICAgICAgICAgICAgICBwc2hyZWMKKyAgICAgICAgICAgICAgIDsKICAgfQogICBlbHNlCiAgIHsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hhbGdvLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNoYWxnby5jCmluZGV4IDY0NGM3NmQuLjZlNjU0Y2IgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hhbGdvLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaGFsZ28uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQb3N0U2NyaXB0IGhpbnRpbmcgYWxnb3JpdGhtIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDEwLCAyMDEyLTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkICAgICAgICAqLwpAQCAtMzAsMTYgKzMwLDE0IEBACiAKIAogI2lmZGVmIERFQlVHX0hJTlRFUgotICBQU0hfSGludF9UYWJsZSAgcHNfZGVidWdfaGludF90YWJsZSA9IDA7Ci0gIFBTSF9IaW50RnVuYyAgICBwc19kZWJ1Z19oaW50X2Z1bmMgID0gMDsKLSAgUFNIX0dseXBoICAgICAgIHBzX2RlYnVnX2dseXBoICAgICAgPSAwOworICBQU0hfSGludF9UYWJsZSAgcHNfZGVidWdfaGludF90YWJsZSA9IE5VTEw7CisgIFBTSF9IaW50RnVuYyAgICBwc19kZWJ1Z19oaW50X2Z1bmMgID0gTlVMTDsKKyAgUFNIX0dseXBoICAgICAgIHBzX2RlYnVnX2dseXBoICAgICAgPSBOVUxMOwogI2VuZGlmCiAKIAogI2RlZmluZSAgQ09NUFVURV9JTkZMRVhTICAvKiBjb21wdXRlIGluZmxlY3Rpb24gcG9pbnRzIHRvIG9wdGltaXplIGBTJyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgc2ltaWxhciBnbHlwaHMgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSAgU1RST05HRVIgICAgICAgICAvKiBzbGlnaHRseSBpbmNyZWFzZSB0aGUgY29udHJhc3Qgb2Ygc21vb3RoICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBoaW50aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02NywxMyArNjUsMTMgQEAKICAgewogICAgIEZUX0ZSRUUoIHRhYmxlLT56b25lcyApOwogICAgIHRhYmxlLT5udW1fem9uZXMgPSAwOwotICAgIHRhYmxlLT56b25lICAgICAgPSAwOworICAgIHRhYmxlLT56b25lICAgICAgPSBOVUxMOwogCiAgICAgRlRfRlJFRSggdGFibGUtPnNvcnQgKTsKICAgICBGVF9GUkVFKCB0YWJsZS0+aGludHMgKTsKICAgICB0YWJsZS0+bnVtX2hpbnRzICAgPSAwOwogICAgIHRhYmxlLT5tYXhfaGludHMgICA9IDA7Ci0gICAgdGFibGUtPnNvcnRfZ2xvYmFsID0gMDsKKyAgICB0YWJsZS0+c29ydF9nbG9iYWwgPSBOVUxMOwogICB9CiAKIApAQCAtMTIxLDcgKzExOSw3IEBACiAgICAgICBQU0hfSGludCAgIGhpbnQyOwogCiAKLSAgICAgIGhpbnQtPnBhcmVudCA9IDA7CisgICAgICBoaW50LT5wYXJlbnQgPSBOVUxMOwogICAgICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0sIHNvcnRlZCsrICkKICAgICAgIHsKICAgICAgICAgaGludDIgPSBzb3J0ZWRbMF07CkBAIC0xOTQsNyArMTkyLDcgQEAKICAgICB0YWJsZS0+c29ydF9nbG9iYWwgPSB0YWJsZS0+c29ydCArIGNvdW50OwogICAgIHRhYmxlLT5udW1faGludHMgICA9IDA7CiAgICAgdGFibGUtPm51bV96b25lcyAgID0gMDsKLSAgICB0YWJsZS0+em9uZSAgICAgICAgPSAwOworICAgIHRhYmxlLT56b25lICAgICAgICA9IE5VTEw7CiAKICAgICAvKiBpbml0aWFsaXplIHRoZSBgdGFibGUtPmhpbnRzJyBhcnJheSAqLwogICAgIHsKQEAgLTg5MCw5ICs4ODgsNiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgUFNIX1pPTkVfTUlOICAtMzIwMDAwMEwKLSNkZWZpbmUgUFNIX1pPTkVfTUFYICArMzIwMDAwMEwKLQogI2RlZmluZSB4eERFQlVHX1pPTkVTCiAKIApAQCAtOTEwLDEwICs5MDUsNiBAQAogICAgICAgICAgICAgIHpvbmUtPm1heCApOwogICB9CiAKLSNlbHNlCi0KLSNkZWZpbmUgcHNoX3ByaW50X3pvbmUoIHggKSAgZG8geyB9IHdoaWxlICggMCApCi0KICNlbmRpZiAvKiBERUJVR19aT05FUyAqLwogCiAKQEAgLTkyNSwxMDMgKzkxNiw5IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmIDEKLQogI2RlZmluZSAgcHNoX2Nvcm5lcl9pc19mbGF0ICAgICAgZnRfY29ybmVyX2lzX2ZsYXQKICNkZWZpbmUgIHBzaF9jb3JuZXJfb3JpZW50YXRpb24gIGZ0X2Nvcm5lcl9vcmllbnRhdGlvbgogCi0jZWxzZQotCi0gIEZUX0xPQ0FMX0RFRiggRlRfSW50ICkKLSAgcHNoX2Nvcm5lcl9pc19mbGF0KCBGVF9Qb3MgIHhfaW4sCi0gICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICB5X2luLAotICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgeF9vdXQsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICB5X291dCApCi0gIHsKLSAgICBGVF9Qb3MgIGF4ID0geF9pbjsKLSAgICBGVF9Qb3MgIGF5ID0geV9pbjsKLQotICAgIEZUX1BvcyAgZF9pbiwgZF9vdXQsIGRfY29ybmVyOwotCi0KLSAgICBpZiAoIGF4IDwgMCApCi0gICAgICBheCA9IC1heDsKLSAgICBpZiAoIGF5IDwgMCApCi0gICAgICBheSA9IC1heTsKLSAgICBkX2luID0gYXggKyBheTsKLQotICAgIGF4ID0geF9vdXQ7Ci0gICAgaWYgKCBheCA8IDAgKQotICAgICAgYXggPSAtYXg7Ci0gICAgYXkgPSB5X291dDsKLSAgICBpZiAoIGF5IDwgMCApCi0gICAgICBheSA9IC1heTsKLSAgICBkX291dCA9IGF4ICsgYXk7Ci0KLSAgICBheCA9IHhfb3V0ICsgeF9pbjsKLSAgICBpZiAoIGF4IDwgMCApCi0gICAgICBheCA9IC1heDsKLSAgICBheSA9IHlfb3V0ICsgeV9pbjsKLSAgICBpZiAoIGF5IDwgMCApCi0gICAgICBheSA9IC1heTsKLSAgICBkX2Nvcm5lciA9IGF4ICsgYXk7Ci0KLSAgICByZXR1cm4gKCBkX2luICsgZF9vdXQgLSBkX2Nvcm5lciApIDwgKCBkX2Nvcm5lciA+PiA0ICk7Ci0gIH0KLQotICBzdGF0aWMgRlRfSW50Ci0gIHBzaF9jb3JuZXJfb3JpZW50YXRpb24oIEZUX1BvcyAgaW5feCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICBpbl95LAotICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIG91dF94LAotICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIG91dF95ICkKLSAgewotICAgIEZUX0ludCAgcmVzdWx0OwotCi0KLSAgICAvKiBkZWFsIHdpdGggdGhlIHRyaXZpYWwgY2FzZXMgcXVpY2tseSAqLwotICAgIGlmICggaW5feSA9PSAwICkKLSAgICB7Ci0gICAgICBpZiAoIGluX3ggPj0gMCApCi0gICAgICAgIHJlc3VsdCA9IG91dF95OwotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSAtb3V0X3k7Ci0gICAgfQotICAgIGVsc2UgaWYgKCBpbl94ID09IDAgKQotICAgIHsKLSAgICAgIGlmICggaW5feSA+PSAwICkKLSAgICAgICAgcmVzdWx0ID0gLW91dF94OwotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBvdXRfeDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoIG91dF95ID09IDAgKQotICAgIHsKLSAgICAgIGlmICggb3V0X3ggPj0gMCApCi0gICAgICAgIHJlc3VsdCA9IGluX3k7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IC1pbl95OwotICAgIH0KLSAgICBlbHNlIGlmICggb3V0X3ggPT0gMCApCi0gICAgewotICAgICAgaWYgKCBvdXRfeSA+PSAwICkKLSAgICAgICAgcmVzdWx0ID0gLWluX3g7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9ICBpbl94OwotICAgIH0KLSAgICBlbHNlIC8qIGdlbmVyYWwgY2FzZSAqLwotICAgIHsKLSAgICAgIGxvbmcgbG9uZyAgZGVsdGEgPSAobG9uZyBsb25nKWluX3ggKiBvdXRfeSAtIChsb25nIGxvbmcpaW5feSAqIG91dF94OwotCi0gICAgICBpZiAoIGRlbHRhID09IDAgKQotICAgICAgICByZXN1bHQgPSAwOwotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSAxIC0gMiAqICggZGVsdGEgPCAwICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0jZW5kaWYgLyogITEgKi8KLQogCiAjaWZkZWYgQ09NUFVURV9JTkZMRVhTCiAKQEAgLTExNDksNyArMTA0Niw3IEBACiAgICAgZ2x5cGgtPm51bV9wb2ludHMgICA9IDA7CiAgICAgZ2x5cGgtPm51bV9jb250b3VycyA9IDA7CiAKLSAgICBnbHlwaC0+bWVtb3J5ID0gMDsKKyAgICBnbHlwaC0+bWVtb3J5ID0gTlVMTDsKICAgfQogCiAKQEAgLTEyNzQsOCArMTE3MSw4IEBACiAgICAgICAgICBGVF9ORVdfQVJSQVkoIGdseXBoLT5jb250b3Vycywgb3V0bGluZS0+bl9jb250b3VycyApICkKICAgICAgIGdvdG8gRXhpdDsKIAotICAgIGdseXBoLT5udW1fcG9pbnRzICAgPSBvdXRsaW5lLT5uX3BvaW50czsKLSAgICBnbHlwaC0+bnVtX2NvbnRvdXJzID0gb3V0bGluZS0+bl9jb250b3VyczsKKyAgICBnbHlwaC0+bnVtX3BvaW50cyAgID0gKEZUX1VJbnQpb3V0bGluZS0+bl9wb2ludHM7CisgICAgZ2x5cGgtPm51bV9jb250b3VycyA9IChGVF9VSW50KW91dGxpbmUtPm5fY29udG91cnM7CiAKICAgICB7CiAgICAgICBGVF9VSW50ICAgICAgZmlyc3QgPSAwLCBuZXh0LCBuOwpAQCAtMTI4NSwxNSArMTE4MiwxNSBAQAogCiAgICAgICBmb3IgKCBuID0gMDsgbiA8IGdseXBoLT5udW1fY29udG91cnM7IG4rKyApCiAgICAgICB7Ci0gICAgICAgIEZUX0ludCAgICAgY291bnQ7CisgICAgICAgIEZUX1VJbnQgICAgY291bnQ7CiAgICAgICAgIFBTSF9Qb2ludCAgcG9pbnQ7CiAKIAotICAgICAgICBuZXh0ICA9IG91dGxpbmUtPmNvbnRvdXJzW25dICsgMTsKKyAgICAgICAgbmV4dCAgPSAoRlRfVUludClvdXRsaW5lLT5jb250b3Vyc1tuXSArIDE7CiAgICAgICAgIGNvdW50ID0gbmV4dCAtIGZpcnN0OwogCiAgICAgICAgIGNvbnRvdXItPnN0YXJ0ID0gcG9pbnRzICsgZmlyc3Q7Ci0gICAgICAgIGNvbnRvdXItPmNvdW50ID0gKEZUX1VJbnQpY291bnQ7CisgICAgICAgIGNvbnRvdXItPmNvdW50ID0gY291bnQ7CiAKICAgICAgICAgaWYgKCBjb3VudCA+IDAgKQogICAgICAgICB7CkBAIC0xNjk2LDE2ICsxNTkzLDEyIEBACiAgICAgICBtYXNrKys7CiAgICAgICBmb3IgKCA7IG51bV9tYXNrcyA+IDE7IG51bV9tYXNrcy0tLCBtYXNrKysgKQogICAgICAgewotICAgICAgICBGVF9VSW50ICBuZXh0OwotICAgICAgICBGVF9JbnQgICBjb3VudDsKKyAgICAgICAgRlRfVUludCAgbmV4dCA9IEZUX01JTiggbWFzay0+ZW5kX3BvaW50LCBnbHlwaC0+bnVtX3BvaW50cyApOwogCiAKLSAgICAgICAgbmV4dCAgPSBtYXNrLT5lbmRfcG9pbnQgPiBnbHlwaC0+bnVtX3BvaW50cwotICAgICAgICAgICAgICAgICAgPyBnbHlwaC0+bnVtX3BvaW50cwotICAgICAgICAgICAgICAgICAgOiBtYXNrLT5lbmRfcG9pbnQ7Ci0gICAgICAgIGNvdW50ID0gbmV4dCAtIGZpcnN0OwotICAgICAgICBpZiAoIGNvdW50ID4gMCApCisgICAgICAgIGlmICggbmV4dCA+IGZpcnN0ICkKICAgICAgICAgeworICAgICAgICAgIEZUX1VJbnQgICAgY291bnQgPSBuZXh0IC0gZmlyc3Q7CiAgICAgICAgICAgUFNIX1BvaW50ICBwb2ludCA9IGdseXBoLT5wb2ludHMgKyBmaXJzdDsKIAogCkBAIC0yMDQ4LDcgKzE5NDEsNyBAQAogICAgICAgLyogY291bnQgdGhlIG51bWJlciBvZiBzdHJvbmcgcG9pbnRzIGluIHRoaXMgY29udG91ciAqLwogICAgICAgbmV4dCAgICAgID0gc3RhcnQgKyBjb250b3VyLT5jb3VudDsKICAgICAgIGZpdF9jb3VudCA9IDA7Ci0gICAgICBmaXJzdCAgICAgPSAwOworICAgICAgZmlyc3QgICAgID0gTlVMTDsKIAogICAgICAgZm9yICggcG9pbnQgPSBzdGFydDsgcG9pbnQgPCBuZXh0OyBwb2ludCsrICkKICAgICAgICAgaWYgKCBwc2hfcG9pbnRfaXNfZml0dGVkKCBwb2ludCApICkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hhbGdvLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNoYWxnby5oCmluZGV4IGM3MGYzMWUuLjgzNzNlNWUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hhbGdvLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaGFsZ28uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQb3N0U2NyaXB0IGhpbnRpbmcgYWxnb3JpdGhtIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDAzLCAyMDA4LCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzAsMTUgKzMwLDEyIEBACiAgIC8qIGhhbmRsZSB0byBIaW50IHN0cnVjdHVyZSAqLwogICB0eXBlZGVmIHN0cnVjdCBQU0hfSGludFJlY18qICBQU0hfSGludDsKIAotICAvKiBoaW50IGJpdC1mbGFncyAqLwotICB0eXBlZGVmIGVudW0gIFBTSF9IaW50X0ZsYWdzXwotICB7Ci0gICAgUFNIX0hJTlRfR0hPU1QgID0gUFNfSElOVF9GTEFHX0dIT1NULAotICAgIFBTSF9ISU5UX0JPVFRPTSA9IFBTX0hJTlRfRkxBR19CT1RUT00sCi0gICAgUFNIX0hJTlRfQUNUSVZFID0gNCwKLSAgICBQU0hfSElOVF9GSVRURUQgPSA4CiAKLSAgfSBQU0hfSGludF9GbGFnczsKKyAgLyogaGludCBiaXQtZmxhZ3MgKi8KKyNkZWZpbmUgUFNIX0hJTlRfR0hPU1QgICBQU19ISU5UX0ZMQUdfR0hPU1QKKyNkZWZpbmUgUFNIX0hJTlRfQk9UVE9NICBQU19ISU5UX0ZMQUdfQk9UVE9NCisjZGVmaW5lIFBTSF9ISU5UX0FDVElWRSAgNFUKKyNkZWZpbmUgUFNIX0hJTlRfRklUVEVEICA4VQogCiAKICNkZWZpbmUgcHNoX2hpbnRfaXNfYWN0aXZlKCB4ICkgICggKCAoeCktPmZsYWdzICYgUFNIX0hJTlRfQUNUSVZFICkgIT0gMCApCkBAIC00OSw2ICs0Niw3IEBACiAjZGVmaW5lIHBzaF9oaW50X2RlYWN0aXZhdGUoIHggKSAgKHgpLT5mbGFncyAmPSB+UFNIX0hJTlRfQUNUSVZFCiAjZGVmaW5lIHBzaF9oaW50X3NldF9maXR0ZWQoIHggKSAgKHgpLT5mbGFncyB8PSAgUFNIX0hJTlRfRklUVEVECiAKKwogICAvKiBoaW50IHN0cnVjdHVyZSAqLwogICB0eXBlZGVmIHN0cnVjdCAgUFNIX0hpbnRSZWNfCiAgIHsKQEAgLTExMiwxNCArMTEwLDEyIEBACiAjZGVmaW5lIFBTSF9ESVJfSVNfVkVSVElDQUwoIGQgKSAgICBQU0hfRElSX0NPTVBBUkUoIGQsIFBTSF9ESVJfVkVSVElDQUwgKQogCiAKLSAvKiB0aGUgZm9sbG93aW5nIGJpdC1mbGFncyBhcmUgY29tcHV0ZWQgb25jZSBieSB0aGUgZ2x5cGggKi8KLSAvKiBhbmFseXplciwgZm9yIGJvdGggZGltZW5zaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZW51bQotICB7Ci0gICAgUFNIX1BPSU5UX09GRiAgICA9IDEsICAgLyogcG9pbnQgaXMgb2ZmIHRoZSBjdXJ2ZSAqLwotICAgIFBTSF9QT0lOVF9TTU9PVEggPSAyLCAgIC8qIHBvaW50IGlzIHNtb290aCAgICAgICAgKi8KLSAgICBQU0hfUE9JTlRfSU5GTEVYID0gNCAgICAvKiBwb2ludCBpcyBpbmZsZWN0aW9uICAgICovCi0gIH07CisgIC8qIHRoZSBmb2xsb3dpbmcgYml0LWZsYWdzIGFyZSBjb21wdXRlZCBvbmNlIGJ5IHRoZSBnbHlwaCAqLworICAvKiBhbmFseXplciwgZm9yIGJvdGggZGltZW5zaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFNIX1BPSU5UX09GRiAgICAgMVUgICAgICAvKiBwb2ludCBpcyBvZmYgdGhlIGN1cnZlICovCisjZGVmaW5lIFBTSF9QT0lOVF9TTU9PVEggIDJVICAgICAgLyogcG9pbnQgaXMgc21vb3RoICAgICAgICAqLworI2RlZmluZSBQU0hfUE9JTlRfSU5GTEVYICA0VSAgICAgIC8qIHBvaW50IGlzIGluZmxlY3Rpb24gICAgKi8KKwogCiAjZGVmaW5lIHBzaF9wb2ludF9pc19zbW9vdGgoIHAgKSAgKCAocCktPmZsYWdzICYgUFNIX1BPSU5UX1NNT09USCApCiAjZGVmaW5lIHBzaF9wb2ludF9pc19vZmYoIHAgKSAgICAgKCAocCktPmZsYWdzICYgUFNIX1BPSU5UX09GRiAgICApCkBAIC0xMjksMTcgKzEyNSwxNiBAQAogI2RlZmluZSBwc2hfcG9pbnRfc2V0X29mZiggcCApICAgICAocCktPmZsYWdzIHw9IFBTSF9QT0lOVF9PRkYKICNkZWZpbmUgcHNoX3BvaW50X3NldF9pbmZsZXgoIHAgKSAgKHApLT5mbGFncyB8PSBQU0hfUE9JTlRfSU5GTEVYCiAKKwogICAvKiB0aGUgZm9sbG93aW5nIGJpdC1mbGFncyBhcmUgcmUtY29tcHV0ZWQgZm9yIGVhY2ggZGltZW5zaW9uICovCi0gIGVudW0KLSAgewotICAgIFBTSF9QT0lOVF9TVFJPTkcgICA9IDE2LCAgIC8qIHBvaW50IGlzIHN0cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgUFNIX1BPSU5UX0ZJVFRFRCAgID0gMzIsICAgLyogcG9pbnQgaXMgYWxyZWFkeSBmaXR0ZWQgICAgICAgICAgICAgICAgICAgKi8KLSAgICBQU0hfUE9JTlRfRVhUUkVNVU0gPSA2NCwgICAvKiBwb2ludCBpcyBsb2NhbCBleHRyZW11bSAgICAgICAgICAgICAgICAgICAqLwotICAgIFBTSF9QT0lOVF9QT1NJVElWRSA9IDEyOCwgIC8qIGV4dHJlbXVtIGhhcyBwb3NpdGl2ZSBjb250b3VyIGZsb3cgICAgICAgICovCi0gICAgUFNIX1BPSU5UX05FR0FUSVZFID0gMjU2LCAgLyogZXh0cmVtdW0gaGFzIG5lZ2F0aXZlIGNvbnRvdXIgZmxvdyAgICAgICAgKi8KLSAgICBQU0hfUE9JTlRfRURHRV9NSU4gPSA1MTIsICAvKiBwb2ludCBpcyBhbGlnbmVkIHRvIGxlZnQvYm90dG9tIHN0ZW0gZWRnZSAqLwotICAgIFBTSF9QT0lOVF9FREdFX01BWCA9IDEwMjQgIC8qIHBvaW50IGlzIGFsaWduZWQgdG8gdG9wL3JpZ2h0IHN0ZW0gZWRnZSAgICovCi0gIH07CisjZGVmaW5lIFBTSF9QT0lOVF9TVFJPTkcgICAgICAxNlUgLyogcG9pbnQgaXMgc3Ryb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUFNIX1BPSU5UX0ZJVFRFRCAgICAgIDMyVSAvKiBwb2ludCBpcyBhbHJlYWR5IGZpdHRlZCAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQU0hfUE9JTlRfRVhUUkVNVU0gICAgNjRVIC8qIHBvaW50IGlzIGxvY2FsIGV4dHJlbXVtICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBTSF9QT0lOVF9QT1NJVElWRSAgIDEyOFUgLyogZXh0cmVtdW0gaGFzIHBvc2l0aXZlIGNvbnRvdXIgZmxvdyAgICAgICAgKi8KKyNkZWZpbmUgUFNIX1BPSU5UX05FR0FUSVZFICAgMjU2VSAvKiBleHRyZW11bSBoYXMgbmVnYXRpdmUgY29udG91ciBmbG93ICAgICAgICAqLworI2RlZmluZSBQU0hfUE9JTlRfRURHRV9NSU4gICA1MTJVIC8qIHBvaW50IGlzIGFsaWduZWQgdG8gbGVmdC9ib3R0b20gc3RlbSBlZGdlICovCisjZGVmaW5lIFBTSF9QT0lOVF9FREdFX01BWCAgMTAyNFUgLyogcG9pbnQgaXMgYWxpZ25lZCB0byB0b3AvcmlnaHQgc3RlbSBlZGdlICAgKi8KKwogCiAjZGVmaW5lIHBzaF9wb2ludF9pc19zdHJvbmcoIHAgKSAgICAoIChwKS0+ZmxhZ3MyICYgUFNIX1BPSU5UX1NUUk9ORyApCiAjZGVmaW5lIHBzaF9wb2ludF9pc19maXR0ZWQoIHAgKSAgICAoIChwKS0+ZmxhZ3MyICYgUFNIX1BPSU5UX0ZJVFRFRCApCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaGdsb2IuYwppbmRleCAxYmNjNDgxLi40NjE2YmRjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hnbG9iLmMKQEAgLTUsNyArNSw3IEBACiAvKiAgICBQb3N0U2NyaXB0IGhpbnRlciBnbG9iYWwgaGludGluZyBtYW5hZ2VtZW50IChib2R5KS4gICAgICAgICAgICAgICAgICAqLwogLyogICAgSW5zcGlyZWQgYnkgdGhlIG5ldyBhdXRvLWhpbnRlciBtb2R1bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAwNCwgMjAwNiwgMjAxMCwgMjAxMi0yMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCAgICAgICAgKi8KQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJwc2hnbG9iLmgiCiAKICNpZmRlZiBERUJVR19ISU5URVIKLSAgUFNIX0dsb2JhbHMgIHBzX2RlYnVnX2dsb2JhbHMgPSAwOworICBQU0hfR2xvYmFscyAgcHNfZGVidWdfZ2xvYmFscyA9IE5VTEw7CiAjZW5kaWYKIAogCkBAIC0yNDAsNyArMjQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBmYW1pbHkgKQogICB7CiAgICAgUFNIX0JsdWVfVGFibGUgIHRvcF90YWJsZSwgYm90X3RhYmxlOwotICAgIEZUX0ludCAgICAgICAgICBjb3VudF90b3AsIGNvdW50X2JvdDsKKyAgICBGVF9VSW50ICAgICAgICAgY291bnRfdG9wLCBjb3VudF9ib3Q7CiAKIAogICAgIGlmICggZmFtaWx5ICkKQEAgLTMzOSw3ICszMzksNyBAQAogICAgICAgICAgICAgYm90ICAgPSB6b25lWzFdLm9yZ19ib3R0b207CiAgICAgICAgICAgICBkZWx0YSA9IGJvdCAtIHRvcDsKIAotICAgICAgICAgICAgaWYgKCBkZWx0YSA8IDIgKiBmdXp6ICkKKyAgICAgICAgICAgIGlmICggZGVsdGEgLyAyIDwgZnV6eiApCiAgICAgICAgICAgICAgIHpvbmVbMF0ub3JnX3RvcCA9IHpvbmVbMV0ub3JnX2JvdHRvbSA9IHRvcCArIGRlbHRhIC8gMjsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTM2OSw3ICszNjksNyBAQAogICB7CiAgICAgRlRfVUludCAgICAgICAgIGNvdW50OwogICAgIEZUX1VJbnQgICAgICAgICBudW07Ci0gICAgUFNIX0JsdWVfVGFibGUgIHRhYmxlID0gMDsKKyAgICBQU0hfQmx1ZV9UYWJsZSAgdGFibGUgPSBOVUxMOwogCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgLyogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBzdXBwcmVzcyBvdmVyc2hvb3RzIG9yICAgICovCkBAIC02MzUsNyArNjM1LDcgQEAKICAgICAgIEZUX0ZSRUUoIGdsb2JhbHMgKTsKIAogI2lmZGVmIERFQlVHX0hJTlRFUgotICAgICAgcHNfZGVidWdfZ2xvYmFscyA9IDA7CisgICAgICBwc19kZWJ1Z19nbG9iYWxzID0gTlVMTDsKICNlbmRpZgogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaGdsb2IuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hnbG9iLmgKaW5kZXggOTRkOTcyYS4uYzM3NmRmNyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaGdsb2IuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBvc3RTY3JpcHQgaGludGVyIGdsb2JhbCBoaW50aW5nIG1hbmFnZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDAzLCAyMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNoaW50ZXIuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jCmluZGV4IGIzNWEyYTkuLjllNjVmZTIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIFBvc3RTY3JpcHQgSGludGluZyBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLCAyMDAzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNobW9kLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNobW9kLmMKaW5kZXggY2RlYWNhMS4uOTYxYjQ2OCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaG1vZC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2htb2QuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBQb3N0U2NyaXB0IGhpbnRlciBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwNywgMjAwOSwgMjAxMiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaG1vZC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaG1vZC5oCmluZGV4IDBhZTdlOTYuLmE1OGQ4NTYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2htb2QuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNobW9kLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUG9zdFNjcmlwdCBoaW50ZXIgbW9kdWxlIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hudGVyci5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaG50ZXJyLmgKaW5kZXggN2NjMTgwZi4uY2U3OTBhOCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaG50ZXJyLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaG50ZXJyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUFMgSGludGVyIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMsIDIwMTIgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hwaWMuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hwaWMuYwppbmRleCA1NjhmNGFjLi5hZmQ4ZmI5IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNocGljLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaHBpYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBwc2hpbnRlciBtb2R1bGUuICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNocGljLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNocGljLmgKaW5kZXggYjQ2Zjg1My4uY2EzNWNkNiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaHBpYy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcHNoaW50ZXIgbW9kdWxlLiAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOSwgMjAxMiwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjAsOCArMjAsNiBAQAogI2RlZmluZSBfX1BTSFBJQ19IX18KIAogCi1GVF9CRUdJTl9IRUFERVIKLQogI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKIAogCkBAIC0zMyw2ICszMSw4IEBACiAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSAogCitGVF9CRUdJTl9IRUFERVIKKwogICB0eXBlZGVmIHN0cnVjdCAgUFNIaW50ZXJQSUNfCiAgIHsKICAgICBQU0hpbnRlcl9JbnRlcmZhY2UgIHBzaGludGVyX2ludGVyZmFjZTsKQEAgLTUxLDEyICs1MSwxMiBAQAogICBGVF9FcnJvcgogICBwc2hpbnRlcl9tb2R1bGVfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKIAorRlRfRU5EX0hFQURFUgorCiAjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KIAogIC8qICovCiAKLUZUX0VORF9IRUFERVIKLQogI2VuZGlmIC8qIF9fUFNIUElDX0hfXyAqLwogCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hyZWMuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hyZWMuYwppbmRleCA3M2ExOGZmLi5mODg5NWZjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNocmVjLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaHJlYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIFBvc3RTY3JpcHQgaGludHMgcmVjb3JkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMDQsIDIwMDcsIDIwMDksIDIwMTMsIDIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zMSw3ICszMSw3IEBACiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfcHNocmVjCiAKICNpZmRlZiBERUJVR19ISU5URVIKLSAgUFNfSGludHMgIHBzX2RlYnVnX2hpbnRzICAgICAgICAgPSAwOworICBQU19IaW50cyAgcHNfZGVidWdfaGludHMgICAgICAgICA9IE5VTEw7CiAgIGludCAgICAgICBwc19kZWJ1Z19ub19ob3J6X2hpbnRzID0gMDsKICAgaW50ICAgICAgIHBzX2RlYnVnX25vX3ZlcnRfaGludHMgPSAwOwogI2VuZGlmCkBAIC04NSw3ICs4NSw3IEBACiAgIHsKICAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CiAgICAgRlRfVUludCAgIGNvdW50OwotICAgIFBTX0hpbnQgICBoaW50ID0gMDsKKyAgICBQU19IaW50ICAgaGludCA9IE5VTEw7CiAKIAogICAgIGNvdW50ID0gdGFibGUtPm51bV9oaW50czsKQEAgLTE2NywxMiArMTY3LDEyIEBACiAgIC8qIGNsZWFyIGEgZ2l2ZW4gYml0ICovCiAgIHN0YXRpYyB2b2lkCiAgIHBzX21hc2tfY2xlYXJfYml0KCBQU19NYXNrICBtYXNrLAotICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgaWR4ICkKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIGlkeCApCiAgIHsKICAgICBGVF9CeXRlKiAgcDsKIAogCi0gICAgaWYgKCAoRlRfVUludClpZHggPj0gbWFzay0+bnVtX2JpdHMgKQorICAgIGlmICggaWR4ID49IG1hc2stPm51bV9iaXRzICkKICAgICAgIHJldHVybjsKIAogICAgIHAgICAgPSBtYXNrLT5ieXRlcyArICggaWR4ID4+IDMgKTsKQEAgLTE4MywxNyArMTgzLDE0IEBACiAgIC8qIHNldCBhIGdpdmVuIGJpdCwgcG9zc2libHkgZ3JvdyB0aGUgbWFzayAqLwogICBzdGF0aWMgRlRfRXJyb3IKICAgcHNfbWFza19zZXRfYml0KCBQU19NYXNrICAgIG1hc2ssCi0gICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBpZHgsCiAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgKQogICB7CiAgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOwogICAgIEZUX0J5dGUqICBwOwogCiAKLSAgICBpZiAoIGlkeCA8IDAgKQotICAgICAgZ290byBFeGl0OwotCi0gICAgaWYgKCAoRlRfVUludClpZHggPj0gbWFzay0+bnVtX2JpdHMgKQorICAgIGlmICggaWR4ID49IG1hc2stPm51bV9iaXRzICkKICAgICB7CiAgICAgICBlcnJvciA9IHBzX21hc2tfZW5zdXJlKCBtYXNrLCBpZHggKyAxLCBtZW1vcnkgKTsKICAgICAgIGlmICggZXJyb3IgKQpAQCAtMjU3LDcgKzI1NCw3IEBACiAgIHsKICAgICBGVF9VSW50ICAgY291bnQ7CiAgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOwotICAgIFBTX01hc2sgICBtYXNrICA9IDA7CisgICAgUFNfTWFzayAgIG1hc2sgID0gTlVMTDsKIAogCiAgICAgY291bnQgPSB0YWJsZS0+bnVtX21hc2tzOwpAQCAtMzcyLDggKzM2OSw4IEBACiAgIC8qIHRlc3Qgd2hldGhlciB0d28gbWFza3MgaW4gYSB0YWJsZSBpbnRlcnNlY3QgKi8KICAgc3RhdGljIEZUX0ludAogICBwc19tYXNrX3RhYmxlX3Rlc3RfaW50ZXJzZWN0KCBQU19NYXNrX1RhYmxlICB0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgaW5kZXgxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBpbmRleDIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICBpbmRleDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIGluZGV4MiApCiAgIHsKICAgICBQU19NYXNrICAgbWFzazEgID0gdGFibGUtPm1hc2tzICsgaW5kZXgxOwogICAgIFBTX01hc2sgICBtYXNrMiAgPSB0YWJsZS0+bWFza3MgKyBpbmRleDI7CkBAIC00MDQsMjMgKzQwMSwyNSBAQAogICAvKiBtZXJnZSB0d28gbWFza3MsIHVzZWQgYnkgcHNfbWFza190YWJsZV9tZXJnZV9hbGwgKi8KICAgc3RhdGljIEZUX0Vycm9yCiAgIHBzX21hc2tfdGFibGVfbWVyZ2UoIFBTX01hc2tfVGFibGUgIHRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBpbmRleDEsCi0gICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGluZGV4MiwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgaW5kZXgxLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICBpbmRleDIsCiAgICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgIG1lbW9yeSApCiAgIHsKLSAgICBGVF9VSW50ICAgdGVtcDsKICAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CiAKIAogICAgIC8qIHN3YXAgaW5kZXgxIGFuZCBpbmRleDIgc28gdGhhdCBpbmRleDEgPCBpbmRleDIgKi8KICAgICBpZiAoIGluZGV4MSA+IGluZGV4MiApCiAgICAgeworICAgICAgRlRfVUludCAgdGVtcDsKKworCiAgICAgICB0ZW1wICAgPSBpbmRleDE7CiAgICAgICBpbmRleDEgPSBpbmRleDI7CiAgICAgICBpbmRleDIgPSB0ZW1wOwogICAgIH0KIAotICAgIGlmICggaW5kZXgxIDwgaW5kZXgyICYmIGluZGV4MSA+PSAwICYmIGluZGV4MiA8IChGVF9JbnQpdGFibGUtPm51bV9tYXNrcyApCisgICAgaWYgKCBpbmRleDEgPCBpbmRleDIgJiYgaW5kZXgyIDwgdGFibGUtPm51bV9tYXNrcyApCiAgICAgewogICAgICAgLyogd2UgbmVlZCB0byBtZXJnZSB0aGUgYml0c2V0cyBvZiBpbmRleDEgYW5kIGluZGV4MiB3aXRoIGEgKi8KICAgICAgIC8qIHNpbXBsZSB1bmlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00NTMsNyArNDUyLDcgQEAKICAgICAgICAgLyogbWVyZ2UgKHVuaXRlKSB0aGUgYml0c2V0cyAqLwogICAgICAgICByZWFkICA9IG1hc2syLT5ieXRlczsKICAgICAgICAgd3JpdGUgPSBtYXNrMS0+Ynl0ZXM7Ci0gICAgICAgIHBvcyAgID0gKEZUX1VJbnQpKCAoIGNvdW50MiArIDcgKSA+PiAzICk7CisgICAgICAgIHBvcyAgID0gKCBjb3VudDIgKyA3ICkgPj4gMzsKIAogICAgICAgICBmb3IgKCA7IHBvcyA+IDA7IHBvcy0tICkKICAgICAgICAgewpAQCAtNDY4LDE0ICs0NjcsMTcgQEAKICAgICAgIG1hc2syLT5udW1fYml0cyAgPSAwOwogICAgICAgbWFzazItPmVuZF9wb2ludCA9IDA7CiAKLSAgICAgIGRlbHRhID0gdGFibGUtPm51bV9tYXNrcyAtIDEgLSBpbmRleDI7IC8qIG51bWJlciBvZiBtYXNrcyB0byBtb3ZlICovCisgICAgICAvKiBudW1iZXIgb2YgbWFza3MgdG8gbW92ZSAqLworICAgICAgZGVsdGEgPSAoRlRfSW50KSggdGFibGUtPm51bV9tYXNrcyAtIDEgLSBpbmRleDIgKTsKICAgICAgIGlmICggZGVsdGEgPiAwICkKICAgICAgIHsKICAgICAgICAgLyogbW92ZSB0byBlbmQgb2YgdGFibGUgZm9yIHJldXNlICovCiAgICAgICAgIFBTX01hc2tSZWMgIGR1bW15ID0gKm1hc2syOwogCiAKLSAgICAgICAgZnRfbWVtbW92ZSggbWFzazIsIG1hc2syICsgMSwgZGVsdGEgKiBzaXplb2YgKCBQU19NYXNrUmVjICkgKTsKKyAgICAgICAgZnRfbWVtbW92ZSggbWFzazIsCisgICAgICAgICAgICAgICAgICAgIG1hc2syICsgMSwKKyAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpZGVsdGEgKiBzaXplb2YgKCBQU19NYXNrUmVjICkgKTsKIAogICAgICAgICBtYXNrMltkZWx0YV0gPSBkdW1teTsKICAgICAgIH0KQEAgLTUwMiwxMyArNTA0LDE5IEBACiAgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOwogCiAKLSAgICBmb3IgKCBpbmRleDEgPSB0YWJsZS0+bnVtX21hc2tzIC0gMTsgaW5kZXgxID4gMDsgaW5kZXgxLS0gKQorICAgIC8qIGJvdGggbG9vcHMgZ28gZG93biB0byAwLCB0aHVzIEZUX0ludCBmb3IgaW5kZXgxIGFuZCBpbmRleDIgKi8KKyAgICBmb3IgKCBpbmRleDEgPSAoRlRfSW50KXRhYmxlLT5udW1fbWFza3MgLSAxOyBpbmRleDEgPiAwOyBpbmRleDEtLSApCiAgICAgewogICAgICAgZm9yICggaW5kZXgyID0gaW5kZXgxIC0gMTsgaW5kZXgyID49IDA7IGluZGV4Mi0tICkKICAgICAgIHsKLSAgICAgICAgaWYgKCBwc19tYXNrX3RhYmxlX3Rlc3RfaW50ZXJzZWN0KCB0YWJsZSwgaW5kZXgxLCBpbmRleDIgKSApCisgICAgICAgIGlmICggcHNfbWFza190YWJsZV90ZXN0X2ludGVyc2VjdCggdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpaW5kZXgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWluZGV4MiApICkKICAgICAgICAgewotICAgICAgICAgIGVycm9yID0gcHNfbWFza190YWJsZV9tZXJnZSggdGFibGUsIGluZGV4MiwgaW5kZXgxLCBtZW1vcnkgKTsKKyAgICAgICAgICBlcnJvciA9IHBzX21hc2tfdGFibGVfbWVyZ2UoIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpaW5kZXgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpaW5kZXgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5ICk7CiAgICAgICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgICAgICBnb3RvIEV4aXQ7CiAKQEAgLTY3MCw4ICs2NzgsOCBAQAogICAgIHsKICAgICAgIFBTX01hc2sgIG1hc2s7CiAgICAgICBGVF9VSW50ICBpZHg7Ci0gICAgICBGVF9VSW50ICBtYXggICA9IGRpbS0+aGludHMubnVtX2hpbnRzOwotICAgICAgUFNfSGludCAgaGludCAgPSBkaW0tPmhpbnRzLmhpbnRzOworICAgICAgRlRfVUludCAgbWF4ICA9IGRpbS0+aGludHMubnVtX2hpbnRzOworICAgICAgUFNfSGludCAgaGludCA9IGRpbS0+aGludHMuaGludHM7CiAKIAogICAgICAgZm9yICggaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKywgaGludCsrICkKQEAgLTc0MiwxNyArNzUwLDI2IEBACiAgICAgfQogCiAgICAgLyogbm93LCBzZXQgdGhlIGJpdHMgZm9yIG91ciBoaW50cyBpbiB0aGUgY291bnRlciBtYXNrICovCi0gICAgZXJyb3IgPSBwc19tYXNrX3NldF9iaXQoIGNvdW50ZXIsIGhpbnQxLCBtZW1vcnkgKTsKLSAgICBpZiAoIGVycm9yICkKLSAgICAgIGdvdG8gRXhpdDsKKyAgICBpZiAoIGhpbnQxID49IDAgKQorICAgIHsKKyAgICAgIGVycm9yID0gcHNfbWFza19zZXRfYml0KCBjb3VudGVyLCAoRlRfVUludCloaW50MSwgbWVtb3J5ICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KIAotICAgIGVycm9yID0gcHNfbWFza19zZXRfYml0KCBjb3VudGVyLCBoaW50MiwgbWVtb3J5ICk7Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBnb3RvIEV4aXQ7CisgICAgaWYgKCBoaW50MiA+PSAwICkKKyAgICB7CisgICAgICBlcnJvciA9IHBzX21hc2tfc2V0X2JpdCggY291bnRlciwgKEZUX1VJbnQpaGludDIsIG1lbW9yeSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CiAKLSAgICBlcnJvciA9IHBzX21hc2tfc2V0X2JpdCggY291bnRlciwgaGludDMsIG1lbW9yeSApOwotICAgIGlmICggZXJyb3IgKQotICAgICAgZ290byBFeGl0OworICAgIGlmICggaGludDMgPj0gMCApCisgICAgeworICAgICAgZXJyb3IgPSBwc19tYXNrX3NldF9iaXQoIGNvdW50ZXIsIChGVF9VSW50KWhpbnQzLCBtZW1vcnkgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQogCiAgIEV4aXQ6CiAgICAgcmV0dXJuIGVycm9yOwpAQCAtNzkzLDcgKzgxMCw3IEBACiAgICAgcHNfZGltZW5zaW9uX2RvbmUoICZoaW50cy0+ZGltZW5zaW9uWzFdLCBtZW1vcnkgKTsKIAogICAgIGhpbnRzLT5lcnJvciAgPSBGVF9FcnJfT2s7Ci0gICAgaGludHMtPm1lbW9yeSA9IDA7CisgICAgaGludHMtPm1lbW9yeSA9IE5VTEw7CiAgIH0KIAogCkBAIC04MTEsNzggKzgyOCw1NyBAQAogICBwc19oaW50c19vcGVuKCBQU19IaW50cyAgICAgIGhpbnRzLAogICAgICAgICAgICAgICAgICBQU19IaW50X1R5cGUgIGhpbnRfdHlwZSApCiAgIHsKLSAgICBzd2l0Y2ggKCBoaW50X3R5cGUgKQotICAgIHsKLSAgICBjYXNlIFBTX0hJTlRfVFlQRV8xOgotICAgIGNhc2UgUFNfSElOVF9UWVBFXzI6Ci0gICAgICBoaW50cy0+ZXJyb3IgICAgID0gRlRfRXJyX09rOwotICAgICAgaGludHMtPmhpbnRfdHlwZSA9IGhpbnRfdHlwZTsKKyAgICBoaW50cy0+ZXJyb3IgICAgID0gRlRfRXJyX09rOworICAgIGhpbnRzLT5oaW50X3R5cGUgPSBoaW50X3R5cGU7CiAKLSAgICAgIHBzX2RpbWVuc2lvbl9pbml0KCAmaGludHMtPmRpbWVuc2lvblswXSApOwotICAgICAgcHNfZGltZW5zaW9uX2luaXQoICZoaW50cy0+ZGltZW5zaW9uWzFdICk7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBoaW50cy0+ZXJyb3IgICAgID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLSAgICAgIGhpbnRzLT5oaW50X3R5cGUgPSBoaW50X3R5cGU7Ci0KLSAgICAgIEZUX1RSQUNFMCgoICJwc19oaW50c19vcGVuOiBpbnZhbGlkIGNoYXJzdHJpbmcgdHlwZVxuIiApKTsKLSAgICAgIGJyZWFrOwotICAgIH0KKyAgICBwc19kaW1lbnNpb25faW5pdCggJmhpbnRzLT5kaW1lbnNpb25bMF0gKTsKKyAgICBwc19kaW1lbnNpb25faW5pdCggJmhpbnRzLT5kaW1lbnNpb25bMV0gKTsKICAgfQogCiAKICAgLyogYWRkIG9uZSBvciBtb3JlIHN0ZW1zIHRvIHRoZSBjdXJyZW50IGhpbnRzIHRhYmxlICovCiAgIHN0YXRpYyB2b2lkCiAgIHBzX2hpbnRzX3N0ZW0oIFBTX0hpbnRzICBoaW50cywKLSAgICAgICAgICAgICAgICAgRlRfSW50ICAgIGRpbWVuc2lvbiwKLSAgICAgICAgICAgICAgICAgRlRfVUludCAgIGNvdW50LAorICAgICAgICAgICAgICAgICBGVF9VSW50ICAgZGltZW5zaW9uLAorICAgICAgICAgICAgICAgICBGVF9JbnQgICAgY291bnQsCiAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICBzdGVtcyApCiAgIHsKLSAgICBpZiAoICFoaW50cy0+ZXJyb3IgKQorICAgIFBTX0RpbWVuc2lvbiAgZGltOworCisKKyAgICBpZiAoIGhpbnRzLT5lcnJvciApCisgICAgICByZXR1cm47CisKKyAgICAvKiBsaW1pdCAiZGltZW5zaW9uIiB0byAwLi4xICovCisgICAgaWYgKCBkaW1lbnNpb24gPiAxICkKICAgICB7Ci0gICAgICAvKiBsaW1pdCAiZGltZW5zaW9uIiB0byAwLi4xICovCi0gICAgICBpZiAoIGRpbWVuc2lvbiA8IDAgfHwgZGltZW5zaW9uID4gMSApCisgICAgICBGVF9UUkFDRTAoKCAicHNfaGludHNfc3RlbTogaW52YWxpZCBkaW1lbnNpb24gKCVkKSB1c2VkXG4iLAorICAgICAgICAgICAgICAgICAgZGltZW5zaW9uICkpOworICAgICAgZGltZW5zaW9uID0gKCBkaW1lbnNpb24gIT0gMCApOworICAgIH0KKworICAgIC8qIHJlY29yZCB0aGUgc3RlbXMgaW4gdGhlIGN1cnJlbnQgaGludHMvbWFza3MgdGFibGUgKi8KKyAgICAvKiAoVHlwZSAxICYgMidzIGBoc3RlbScgb3IgYHZzdGVtJyBvcGVyYXRvcnMpICAgICAgICovCisgICAgZGltID0gJmhpbnRzLT5kaW1lbnNpb25bZGltZW5zaW9uXTsKKworICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCBzdGVtcyArPSAyICkKKyAgICB7CisgICAgICBGVF9FcnJvciAgIGVycm9yOworICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBoaW50cy0+bWVtb3J5OworCisKKyAgICAgIGVycm9yID0gcHNfZGltZW5zaW9uX2FkZF90MXN0ZW0oIGRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9JbnQpc3RlbXNbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KXN0ZW1zWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCApOworICAgICAgaWYgKCBlcnJvciApCiAgICAgICB7Ci0gICAgICAgIEZUX1RSQUNFMCgoICJwc19oaW50c19zdGVtOiBpbnZhbGlkIGRpbWVuc2lvbiAoJWQpIHVzZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbiApKTsKLSAgICAgICAgZGltZW5zaW9uID0gKCBkaW1lbnNpb24gIT0gMCApOwotICAgICAgfQorICAgICAgICBGVF9FUlJPUigoICJwc19oaW50c19zdGVtOiBjb3VsZCBub3QgYWRkIHN0ZW0iCisgICAgICAgICAgICAgICAgICAgIiAoJWQsJWQpIHRvIGhpbnRzIHRhYmxlXG4iLCBzdGVtc1swXSwgc3RlbXNbMV0gKSk7CiAKLSAgICAgIC8qIHJlY29yZCB0aGUgc3RlbXMgaW4gdGhlIGN1cnJlbnQgaGludHMvbWFza3MgdGFibGUgKi8KLSAgICAgIHN3aXRjaCAoIGhpbnRzLT5oaW50X3R5cGUgKQotICAgICAgewotICAgICAgY2FzZSBQU19ISU5UX1RZUEVfMTogIC8qIFR5cGUgMSAiaHN0ZW0iIG9yICJ2c3RlbSIgb3BlcmF0b3IgKi8KLSAgICAgIGNhc2UgUFNfSElOVF9UWVBFXzI6ICAvKiBUeXBlIDIgImhzdGVtIiBvciAidnN0ZW0iIG9wZXJhdG9yICovCi0gICAgICAgIHsKLSAgICAgICAgICBQU19EaW1lbnNpb24gIGRpbSA9ICZoaW50cy0+ZGltZW5zaW9uW2RpbWVuc2lvbl07Ci0KLQotICAgICAgICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tLCBzdGVtcyArPSAyICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9FcnJvciAgIGVycm9yOwotICAgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBoaW50cy0+bWVtb3J5OwotCi0KLSAgICAgICAgICAgIGVycm9yID0gcHNfZGltZW5zaW9uX2FkZF90MXN0ZW0oCi0gICAgICAgICAgICAgICAgICAgICAgZGltLCAoRlRfSW50KXN0ZW1zWzBdLCAoRlRfSW50KXN0ZW1zWzFdLAotICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSwgTlVMTCApOwotICAgICAgICAgICAgaWYgKCBlcnJvciApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZUX0VSUk9SKCggInBzX2hpbnRzX3N0ZW06IGNvdWxkIG5vdCBhZGQgc3RlbSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiICglZCwlZCkgdG8gaGludHMgdGFibGVcbiIsIHN0ZW1zWzBdLCBzdGVtc1sxXSApKTsKLQotICAgICAgICAgICAgICBoaW50cy0+ZXJyb3IgPSBlcnJvcjsKLSAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBGVF9UUkFDRTAoKCAicHNfaGludHNfc3RlbTogY2FsbGVkIHdpdGggaW52YWxpZCBoaW50IHR5cGUgKCVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgaGludHMtPmhpbnRfdHlwZSApKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIGhpbnRzLT5lcnJvciA9IGVycm9yOworICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgfQogICB9CkBAIC04OTEsNyArODg3LDcgQEAKICAgLyogYWRkIG9uZSBUeXBlMSBjb3VudGVyIHN0ZW0gdG8gdGhlIGN1cnJlbnQgaGludHMgdGFibGUgKi8KICAgc3RhdGljIHZvaWQKICAgcHNfaGludHNfdDFzdGVtMyggUFNfSGludHMgICBoaW50cywKLSAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBkaW1lbnNpb24sCisgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZGltZW5zaW9uLAogICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIHN0ZW1zICkKICAgewogICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKQEAgLTkwNiw3ICs5MDIsNyBAQAogCiAKICAgICAgIC8qIGxpbWl0ICJkaW1lbnNpb24iIHRvIDAuLjEgKi8KLSAgICAgIGlmICggZGltZW5zaW9uIDwgMCB8fCBkaW1lbnNpb24gPiAxICkKKyAgICAgIGlmICggZGltZW5zaW9uID4gMSApCiAgICAgICB7CiAgICAgICAgIEZUX1RSQUNFMCgoICJwc19oaW50c190MXN0ZW0zOiBpbnZhbGlkIGRpbWVuc2lvbiAoJWQpIHVzZWRcbiIsCiAgICAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbiApKTsKQEAgLTExMjgsNyArMTEyNCw3IEBACiAKICAgc3RhdGljIHZvaWQKICAgdDFfaGludHNfc3RlbSggVDFfSGludHMgICBoaW50cywKLSAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBkaW1lbnNpb24sCisgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZGltZW5zaW9uLAogICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApCiAgIHsKICAgICBGVF9Qb3MgIHN0ZW1zWzJdOwpAQCAtMTE3MiwxMiArMTE2OCwxMiBAQAogCiAgIHN0YXRpYyB2b2lkCiAgIHQyX2hpbnRzX3N0ZW1zKCBUMl9IaW50cyAgIGhpbnRzLAotICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBkaW1lbnNpb24sCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGRpbWVuc2lvbiwKICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgY291bnQsCiAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApCiAgIHsKLSAgICBGVF9Qb3MgIHN0ZW1zWzMyXSwgeSwgbjsKLSAgICBGVF9JbnQgIHRvdGFsID0gY291bnQ7CisgICAgRlRfUG9zICBzdGVtc1szMl0sIHk7CisgICAgRlRfSW50ICB0b3RhbCA9IGNvdW50LCBuOwogCiAKICAgICB5ID0gMDsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hyZWMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc2hpbnRlci9wc2hyZWMuaAppbmRleCBhODhmZTZlLi4yYjFhZDk0IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNoaW50ZXIvcHNocmVjLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzaGludGVyL3BzaHJlYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBvc3RzY3JpcHQgKFR5cGUxL1R5cGUyKSBoaW50cyByZWNvcmRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA2LCAyMDA4LCAyMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC02MSwxMiArNjEsOCBAQAogCiAKICAgLyogaGludCBmbGFncyAqLwotICB0eXBlZGVmIGVudW0gIFBTX0hpbnRfRmxhZ3NfCi0gIHsKLSAgICBQU19ISU5UX0ZMQUdfR0hPU1QgID0gMSwKLSAgICBQU19ISU5UX0ZMQUdfQk9UVE9NID0gMgotCi0gIH0gUFNfSGludF9GbGFnczsKKyNkZWZpbmUgUFNfSElOVF9GTEFHX0dIT1NUICAgMVUKKyNkZWZpbmUgUFNfSElOVF9GTEFHX0JPVFRPTSAgMlUKIAogCiAgIC8qIGhpbnQgZGVzY3JpcHRvciAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzbmFtZXMvSmFtZmlsZSBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc25hbWVzL0phbWZpbGUKaW5kZXggMDZjMGRkYS4uNmRjYzhiOCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzbmFtZXMvSmFtZmlsZQorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNuYW1lcy9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy9wc25hbWVzIEphbWZpbGUKICMKLSMgQ29weXJpZ2h0IDIwMDEgYnkKKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCkBAIC0xNiw3ICsxNiw5IEBACiAKICAgaWYgJChGVDJfTVVMVEkpCiAgIHsKLSAgICBfc291cmNlcyA9IHBzbW9kdWxlIHBzcGljIDsKKyAgICBfc291cmNlcyA9IHBzbW9kdWxlCisgICAgICAgICAgICAgICBwc3BpYworICAgICAgICAgICAgICAgOwogICB9CiAgIGVsc2UKICAgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzbmFtZXMvcHNtb2R1bGUuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc25hbWVzL3BzbW9kdWxlLmMKaW5kZXggMGE1YmNiNy4uMGYwNGMyZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzbmFtZXMvcHNtb2R1bGUuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNuYW1lcy9wc21vZHVsZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBTTmFtZXMgbW9kdWxlIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDMsIDIwMDUtMjAwOCwgMjAxMiwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zMTIsNyArMzEyLDcgQEAKIAogICAgIC8qIHdlIGZpcnN0IGFsbG9jYXRlIHRoZSB0YWJsZSAqLwogICAgIHRhYmxlLT5udW1fbWFwcyA9IDA7Ci0gICAgdGFibGUtPm1hcHMgICAgID0gMDsKKyAgICB0YWJsZS0+bWFwcyAgICAgPSBOVUxMOwogCiAgICAgaWYgKCAhRlRfTkVXX0FSUkFZKCB0YWJsZS0+bWFwcywgbnVtX2dseXBocyArIEVYVFJBX0dMWVBIX0xJU1RfU0laRSApICkKICAgICB7CkBAIC01NjMsNyArNTYzLDcgQEAKICAgcHNuYW1lc19nZXRfc2VydmljZSggRlRfTW9kdWxlICAgIG1vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHNlcnZpY2VfaWQgKQogICB7Ci0gICAgLyogUFNDTUFQU19TRVJWSUNFU19HRVQgZGVyZWZlcnMgYGxpYnJhcnknIGluIFBJQyBtb2RlICovCisgICAgLyogUFNDTUFQU19TRVJWSUNFU19HRVQgZGVyZWZlcmVuY2VzIGBsaWJyYXJ5JyBpbiBQSUMgbW9kZSAqLwogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzbmFtZXMvcHNtb2R1bGUuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc25hbWVzL3BzbW9kdWxlLmgKaW5kZXggMjhmYTE0OC4uZjg1ZjMyMiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzbmFtZXMvcHNtb2R1bGUuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNuYW1lcy9wc21vZHVsZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgUFNOYW1lcyBtb2R1bGUgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDEgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNuYW1lcy9wc25hbWVyci5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzbmFtZXMvcHNuYW1lcnIuaAppbmRleCBhY2RhN2Y5Li4wOWNjMjQ3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNuYW1lcy9wc25hbWVyci5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc25hbWVzL3BzbmFtZXJyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUFMgbmFtZXMgbW9kdWxlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEsIDIwMTIgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc25hbWVzL3BzbmFtZXMuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc25hbWVzL3BzbmFtZXMuYwppbmRleCAxZWRlMjI1Li5hNDM4NTk2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNuYW1lcy9wc25hbWVzLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzbmFtZXMvcHNuYW1lcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIFBTTmFtZXMgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDEgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNuYW1lcy9wc3BpYy5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzbmFtZXMvcHNwaWMuYwppbmRleCAzODIwZjY1Li4xMzk0Zjk3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNuYW1lcy9wc3BpYy5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc25hbWVzL3BzcGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHBzbmFtZXMgbW9kdWxlLiAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc25hbWVzL3BzcGljLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNuYW1lcy9wc3BpYy5oCmluZGV4IDZmZjAwMmMuLjQ0MzIyNWEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc25hbWVzL3BzcGljLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzbmFtZXMvcHNwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcHNuYW1lcyBtb2R1bGUuICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOSwgMjAxMiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjAsMTAgKzIwLDkgQEAKICNkZWZpbmUgX19QU1BJQ19IX18KIAogCi1GVF9CRUdJTl9IRUFERVIKLQogI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKIAorCiAjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCiAKICNkZWZpbmUgUFNDTUFQU19TRVJWSUNFU19HRVQgICBwc2NtYXBzX3NlcnZpY2VzCkBAIC0zMyw2ICszMiw5IEBACiAKICNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9DTUFQU19ICiAKKworRlRfQkVHSU5fSEVBREVSCisKICAgdHlwZWRlZiBzdHJ1Y3QgIFBTTW9kdWxlUElDXwogICB7CiAgICAgRlRfU2VydmljZURlc2NSZWMqICAgICBwc2NtYXBzX3NlcnZpY2VzOwpAQCAtNTQsMTIgKzU2LDEyIEBACiAgIEZUX0Vycm9yCiAgIHBzbmFtZXNfbW9kdWxlX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CiAKK0ZUX0VORF9IRUFERVIKKwogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCiAKICAvKiAqLwogCi1GVF9FTkRfSEVBREVSCi0KICNlbmRpZiAvKiBfX1BTUElDX0hfXyAqLwogCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc25hbWVzL3BzdGFibGVzLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcHNuYW1lcy9wc3RhYmxlcy5oCmluZGV4IDBhNjYzN2YuLjNmMzFjMzEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9wc25hbWVzL3BzdGFibGVzLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3BzbmFtZXMvcHN0YWJsZXMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQb3N0U2NyaXB0IGdseXBoIG5hbWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNSwgMjAwOCwgMjAxMSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9KYW1maWxlIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9KYW1maWxlCmluZGV4IDRmNjBlODcuLjcxZGY1NjggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9yYXN0ZXIvSmFtZmlsZQorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL0phbWZpbGUKQEAgLTEsNiArMSw2IEBACiAjIEZyZWVUeXBlIDIgc3JjL3Jhc3RlciBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDAxIGJ5CisjIENvcHlyaWdodCAyMDAxLTIwMTUgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApAQCAtMTYsNyArMTYsMTAgQEAKIAogICBpZiAkKEZUMl9NVUxUSSkKICAgewotICAgIF9zb3VyY2VzID0gZnRyYXN0ZXIgZnRyZW5kMSByYXN0cGljIDsKKyAgICBfc291cmNlcyA9IGZ0cmFzdGVyCisgICAgICAgICAgICAgICBmdHJlbmQxCisgICAgICAgICAgICAgICByYXN0cGljCisgICAgICAgICAgICAgICA7CiAgIH0KICAgZWxzZQogICB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL2Z0bWlzYy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9mdG1pc2MuaAppbmRleCA3MDMxNTVhLi5iODdlMGI2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL2Z0bWlzYy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9yYXN0ZXIvZnRtaXNjLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBNaXNjZWxsYW5lb3VzIG1hY3JvcyBmb3Igc3RhbmQtYWxvbmUgcmFzdGVyaXplciAoc3BlY2lmaWNhdGlvbiAgICAgICAqLwogLyogICAgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUsIDIwMDksIDIwMTAgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCAgICAgICAgKi8KQEAgLTM3LDcgKzM3LDcgQEAKICNkZWZpbmUgRlRfTE9DQUxfREVGKCB4ICkgICBzdGF0aWMgeAogCiAKLSAgLyogZnJvbSBpbmNsdWRlL2ZyZWV0eXBlMi9mdHR5cGVzLmggKi8KKyAgLyogZnJvbSBpbmNsdWRlL2ZyZWV0eXBlL2Z0dHlwZXMuaCAqLwogCiAgIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgRlRfQnl0ZTsKICAgdHlwZWRlZiBzaWduZWQgaW50ICAgICBGVF9JbnQ7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICAgIChGVF9VTG9uZylfeDQgICAgICAgICApCiAKIAotICAvKiBmcm9tIGluY2x1ZGUvZnJlZXR5cGUyL2Z0c3lzdGVtLmggKi8KKyAgLyogZnJvbSBpbmNsdWRlL2ZyZWV0eXBlL2Z0c3lzdGVtLmggKi8KIAogICB0eXBlZGVmIHN0cnVjdCBGVF9NZW1vcnlSZWNfKiAgRlRfTWVtb3J5OwogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL2Z0cmFzdGVyLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL2Z0cmFzdGVyLmMKaW5kZXggYjA2YWMzMy4uZTRiYWI5OCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9mdHJhc3Rlci5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggcmFzdGVyaXplciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAzLCAyMDA1LCAyMDA3LTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjQsOCArMjQsOCBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogLSBjb3B5IGBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMnICh0aGlzIGZpbGUpIHRvIHlvdXIgY3VycmVudCBkaXJlY3RvcnkgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIGNvcHkgYGluY2x1ZGUvZnRpbWFnZS5oJyBhbmQgYHNyYy9yYXN0ZXIvZnRtaXNjLmgnIHRvIHlvdXIgY3VycmVudCAgKi8KLSAgLyogICBkaXJlY3RvcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIC0gY29weSBgaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgnIGFuZCBgc3JjL3Jhc3Rlci9mdG1pc2MuaCcgdG8geW91ciAqLworICAvKiAgIGN1cnJlbnQgZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIC0gY29tcGlsZSBgZnRyYXN0ZXInIHdpdGggdGhlIF9TVEFOREFMT05FXyBtYWNybyBkZWZpbmVkLCBhcyBpbiAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQ5LDYgKzQ5LDEwIEBACiAKICNpZmRlZiBfU1RBTkRBTE9ORV8KIAorICAvKiBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgcmVuZGVyIHBvb2wgdXNlZCBieSB0aGUgc2Nhbi1saW5lIGNvbnZlcnRlciAgKi8KKyAgLyogdG8gZG8gYWxsIG9mIGl0cyB3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX1JFTkRFUl9QT09MX1NJWkUgIDE2Mzg0TAorCiAjZGVmaW5lIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0ggIDxzdGRsaWIuaD4KIAogI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgLyogZm9yIG1lbXNldCAqLwpAQCAtMTUwLDE0ICsxNTQsNiBAQAogICAvKiBkZWZpbmUgREVCVUdfUkFTVEVSIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgYSBkZWJ1Z2dpbmcgdmVyc2lvbiAqLwogLyogI2RlZmluZSBERUJVR19SQVNURVIgKi8KIAotICAvKiBkZWZpbmUgRlRfUkFTVEVSX09QVElPTl9BTlRJX0FMSUFTSU5HIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgKi8KLSAgLyogNS1sZXZlbHMgYW50aS1hbGlhc2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEZUX1JBU1RFUl9PUFRJT05fQU5USV9BTElBU0lORyAqLwotCi0gIC8qIFRoZSBzaXplIG9mIHRoZSB0d28tbGluZXMgaW50ZXJtZWRpYXRlIGJpdG1hcCB1c2VkICovCi0gIC8qIGZvciBhbnRpLWFsaWFzaW5nLCBpbiBieXRlcy4gICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJBU1RFUl9HUkFZX0xJTkVTICAyMDQ4Ci0KIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xODMsNiArMTc5LDggQEAKICNkZWZpbmUgRlRfRVJSX1hDQVQoIHgsIHkgKSAgeCAjIyB5CiAjZGVmaW5lIEZUX0VSUl9DQVQoIHgsIHkgKSAgIEZUX0VSUl9YQ0FUKCB4LCB5ICkKIAorI2RlZmluZSBGVF9NQVgoIGEsIGIgKSAgKCAoYSkgPiAoYikgPyAoYSkgOiAoYikgKQorCiAgIC8qIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgZnVuY3Rpb24gcGFyYW1ldGVyIGlzIHVudXNlZC4gKi8KICAgLyogSXRzIHB1cnBvc2UgaXMgc2ltcGx5IHRvIHJlZHVjZSBjb21waWxlciB3YXJuaW5ncy4gIE5vdGUgYWxzbyB0aGF0ICAqLwogICAvKiBzaW1wbHkgZGVmaW5pbmcgaXQgYXMgYCh2b2lkKXgnIGRvZXNuJ3QgYXZvaWQgd2FybmluZ3Mgd2l0aCBjZXJ0YWluICovCkBAIC0xOTksNiArMTk3LDcgQEAKICNkZWZpbmUgRlRfVFJBQ0UoIHggKSAgIGRvIHsgfSB3aGlsZSAoIDAgKSAgICAvKiBub3RoaW5nICovCiAjZGVmaW5lIEZUX1RSQUNFMSggeCApICBkbyB7IH0gd2hpbGUgKCAwICkgICAgLyogbm90aGluZyAqLwogI2RlZmluZSBGVF9UUkFDRTYoIHggKSAgZG8geyB9IHdoaWxlICggMCApICAgIC8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgRlRfVFJBQ0U3KCB4ICkgIGRvIHsgfSB3aGlsZSAoIDAgKSAgICAvKiBub3RoaW5nICovCiAjZW5kaWYKIAogI2lmbmRlZiBGVF9USFJPVwpAQCAtMzE4LDcgKzMxNyw3IEBACiAKICAgdHlwZWRlZiB1bmlvbiAgQWxpZ25tZW50XwogICB7Ci0gICAgbG9uZyAgICBsOworICAgIExvbmcgICAgbDsKICAgICB2b2lkKiAgIHA7CiAgICAgdm9pZCAgKCpmKSh2b2lkKTsKIApAQCAtMzM0LDkgKzMzMyw5IEBACiAKIAogICAvKiB2YWx1ZXMgZm9yIHRoZSBgZmxhZ3MnIGJpdCBmaWVsZCAqLwotI2RlZmluZSBGbG93X1VwICAgICAgICAgICAweDgKLSNkZWZpbmUgT3ZlcnNob290X1RvcCAgICAgMHgxMAotI2RlZmluZSBPdmVyc2hvb3RfQm90dG9tICAweDIwCisjZGVmaW5lIEZsb3dfVXAgICAgICAgICAgIDB4MDhVCisjZGVmaW5lIE92ZXJzaG9vdF9Ub3AgICAgIDB4MTBVCisjZGVmaW5lIE92ZXJzaG9vdF9Cb3R0b20gIDB4MjBVCiAKIAogICAvKiBTdGF0ZXMgb2YgZWFjaCBsaW5lLCBhcmMsIGFuZCBwcm9maWxlICovCkBAIC0zNTgsMTQgKzM1NywxNCBAQAogICAgIEZUX0YyNkRvdDYgIFg7ICAgICAgICAgICAvKiBjdXJyZW50IGNvb3JkaW5hdGUgZHVyaW5nIHN3ZWVwICAgICAgICAgICovCiAgICAgUFByb2ZpbGUgICAgbGluazsgICAgICAgIC8qIGxpbmsgdG8gbmV4dCBwcm9maWxlICh2YXJpb3VzIHB1cnBvc2VzKSAgKi8KICAgICBQTG9uZyAgICAgICBvZmZzZXQ7ICAgICAgLyogc3RhcnQgb2YgcHJvZmlsZSdzIGRhdGEgaW4gcmVuZGVyIHBvb2wgICAqLwotICAgIHVuc2lnbmVkICAgIGZsYWdzOyAgICAgICAvKiBCaXQgMC0yOiBkcm9wLW91dCBtb2RlICAgICAgICAgICAgICAgICAgICovCisgICAgVVNob3J0ICAgICAgZmxhZ3M7ICAgICAgIC8qIEJpdCAwLTI6IGRyb3Atb3V0IG1vZGUgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQml0IDM6IHByb2ZpbGUgb3JpZW50YXRpb24gKHVwL2Rvd24pICAgICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCaXQgNDogaXMgdG9wIHByb2ZpbGU/ICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJpdCA1OiBpcyBib3R0b20gcHJvZmlsZT8gICAgICAgICAgICAgICAgKi8KLSAgICBsb25nICAgICAgICBoZWlnaHQ7ICAgICAgLyogcHJvZmlsZSdzIGhlaWdodCBpbiBzY2FubGluZXMgICAgICAgICAgICAqLwotICAgIGxvbmcgICAgICAgIHN0YXJ0OyAgICAgICAvKiBwcm9maWxlJ3Mgc3RhcnRpbmcgc2NhbmxpbmUgICAgICAgICAgICAgICovCisgICAgTG9uZyAgICAgICAgaGVpZ2h0OyAgICAgIC8qIHByb2ZpbGUncyBoZWlnaHQgaW4gc2NhbmxpbmVzICAgICAgICAgICAgKi8KKyAgICBMb25nICAgICAgICBzdGFydDsgICAgICAgLyogcHJvZmlsZSdzIHN0YXJ0aW5nIHNjYW5saW5lICAgICAgICAgICAgICAqLwogCi0gICAgdW5zaWduZWQgICAgY291bnRMOyAgICAgIC8qIG51bWJlciBvZiBsaW5lcyB0byBzdGVwIGJlZm9yZSB0aGlzICAgICAgKi8KKyAgICBJbnQgICAgICAgICBjb3VudEw7ICAgICAgLyogbnVtYmVyIG9mIGxpbmVzIHRvIHN0ZXAgYmVmb3JlIHRoaXMgICAgICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9maWxlIGJlY29tZXMgZHJhd2FibGUgICAgICAgICAgICAgICAgICovCiAKICAgICBQUHJvZmlsZSAgICBuZXh0OyAgICAgICAgLyogbmV4dCBwcm9maWxlIGluIHNhbWUgY29udG91ciwgdXNlZCAgICAgICAqLwpAQCAtMzg3LDcgKzM4Niw3IEBACiAKIAogI2RlZmluZSBBbGlnblByb2ZpbGVTaXplIFwKLSAgKCAoIHNpemVvZiAoIFRQcm9maWxlICkgKyBzaXplb2YgKCBBbGlnbm1lbnQgKSAtIDEgKSAvIHNpemVvZiAoIGxvbmcgKSApCisgICggKCBzaXplb2YgKCBUUHJvZmlsZSApICsgc2l6ZW9mICggQWxpZ25tZW50ICkgLSAxICkgLyBzaXplb2YgKCBMb25nICkgKQogCiAKICN1bmRlZiBSQVNfQVJHCkBAIC00NTEsNyArNDUwLDkgQEAKICNkZWZpbmUgQ0VJTElORyggeCApICAoICggKHgpICsgcmFzLnByZWNpc2lvbiAtIDEgKSAmIC1yYXMucHJlY2lzaW9uICkKICNkZWZpbmUgVFJVTkMoIHggKSAgICAoIChMb25nKSh4KSA+PiByYXMucHJlY2lzaW9uX2JpdHMgKQogI2RlZmluZSBGUkFDKCB4ICkgICAgICggKHgpICYgKCByYXMucHJlY2lzaW9uIC0gMSApICkKLSNkZWZpbmUgU0NBTEVEKCB4ICkgICAoICggKFVMb25nKSh4KSA8PCByYXMuc2NhbGVfc2hpZnQgKSAtIHJhcy5wcmVjaXNpb25faGFsZiApCisjZGVmaW5lIFNDQUxFRCggeCApICAgKCAoICh4KSA8IDAgPyAtKCAtKHgpIDw8IHJhcy5zY2FsZV9zaGlmdCApICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICggICh4KSA8PCByYXMuc2NhbGVfc2hpZnQgKSApIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC0gcmFzLnByZWNpc2lvbl9oYWxmICkKIAogI2RlZmluZSBJU19CT1RUT01fT1ZFUlNIT09UKCB4ICkgXAogICAgICAgICAgIChCb29sKSggQ0VJTElORyggeCApIC0geCA+PSByYXMucHJlY2lzaW9uX2hhbGYgKQpAQCAtNTE0LDkgKzUxNSw2IEBACiAKICAgICBTaG9ydCAgICAgICB0cmFjZUluY3I7ICAgICAgICAgIC8qIHN3ZWVwJ3MgaW5jcmVtZW50IGluIHRhcmdldCBiaXRtYXAgICovCiAKLSAgICBTaG9ydCAgICAgICBncmF5X21pbl94OyAgICAgICAgIC8qIGN1cnJlbnQgbWluIHggZHVyaW5nIGdyYXkgcmVuZGVyaW5nICovCi0gICAgU2hvcnQgICAgICAgZ3JheV9tYXhfeDsgICAgICAgICAvKiBjdXJyZW50IG1heCB4IGR1cmluZyBncmF5IHJlbmRlcmluZyAqLwotCiAgICAgLyogZGlzcGF0Y2ggdmFyaWFibGVzICovCiAKICAgICBGdW5jdGlvbl9Td2VlcF9Jbml0KiAgUHJvY19Td2VlcF9Jbml0OwpAQCAtNTI5LDQ1ICs1MjcsMTkgQEAKICAgICBCb29sICAgICAgICBzZWNvbmRfcGFzczsgICAgICAgIC8qIGluZGljYXRlcyB3aGV0aGVyIGEgaG9yaXpvbnRhbCBwYXNzICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaG91bGQgYmUgcGVyZm9ybWVkIHRvIGNvbnRyb2wgICAgICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZHJvcC1vdXQgYWNjdXJhdGVseSB3aGVuIGNhbGxpbmcgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbmRlcl9HbHlwaC4gIE5vdGUgdGhhdCB0aGVyZSBpcyAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBob3Jpem9udGFsIHBhc3MgZHVyaW5nIGdyYXkgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVuZGVyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbmRlcl9HbHlwaC4gICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgICBUUG9pbnQgICAgICBhcmNzWzMgKiBNYXhCZXppZXIgKyAxXTsgLyogVGhlIEJlemllciBzdGFjayAgICAgICAgICAgICAgICovCiAKICAgICBibGFja19UQmFuZCAgYmFuZF9zdGFja1sxNl07ICAgIC8qIGJhbmQgc3RhY2sgdXNlZCBmb3Igc3ViLWJhbmRpbmcgICAgICovCiAgICAgSW50ICAgICAgICAgIGJhbmRfdG9wOyAgICAgICAgICAvKiBiYW5kIHN0YWNrIHRvcCAgICAgICAgICAgICAgICAgICAgICAqLwogCi0jaWZkZWYgRlRfUkFTVEVSX09QVElPTl9BTlRJX0FMSUFTSU5HCi0KLSAgICBCeXRlKiAgICAgICBncmF5czsKLQotICAgIEJ5dGUgICAgICAgIGdyYXlfbGluZXNbUkFTVEVSX0dSQVlfTElORVNdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm1lZGlhdGUgdGFibGUgdXNlZCB0byByZW5kZXIgdGhlICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ3JheWxldmVscyBwaXhtYXBzLiAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdyYXlfbGluZXMgaXMgYSBidWZmZXIgaG9sZGluZyB0d28gICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb25vY2hyb21lIHNjYW5saW5lcyAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgIFNob3J0ICAgICAgIGdyYXlfd2lkdGg7ICAgICAvKiB3aWR0aCBpbiBieXRlcyBvZiBvbmUgbW9ub2Nocm9tZSAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJtZWRpYXRlIHNjYW5saW5lIG9mIGdyYXlfbGluZXMuICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVhY2ggZ3JheSBwaXhlbCB0YWtlcyAyIGJpdHMgbG9uZyB0aGVyZSAqLwotCi0gICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBncmF5X2xpbmVzIG11c3QgaG9sZCAyIGxpbmVzLCB0aHVzIHdpdGggc2l6ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAvKiBpbiBieXRlcyBvZiBhdCBsZWFzdCBgZ3JheV93aWR0aCoyJy4gICAgICAgICAgICAgKi8KLQotI2VuZGlmIC8qIEZUX1JBU1RFUl9BTlRJX0FMSUFTSU5HICovCi0KICAgfTsKIAogCiAgIHR5cGVkZWYgc3RydWN0ICBibGFja19UUmFzdGVyXwogICB7Ci0gICAgY2hhciogICAgICAgICAgYnVmZmVyOwotICAgIGxvbmcgICAgICAgICAgIGJ1ZmZlcl9zaXplOwogICAgIHZvaWQqICAgICAgICAgIG1lbW9yeTsKLSAgICBibGFja19QV29ya2VyICB3b3JrZXI7Ci0gICAgQnl0ZSAgICAgICAgICAgZ3JheXNbNV07Ci0gICAgU2hvcnQgICAgICAgICAgZ3JheV93aWR0aDsKIAogICB9IGJsYWNrX1RSYXN0ZXIsICpibGFja19QUmFzdGVyOwogCkBAIC01ODMsNzAgKzU1NSw2IEBACiAjZW5kaWYgLyogIUZUX1NUQVRJQ19SQVNURVIgKi8KIAogCi0jaWZkZWYgRlRfUkFTVEVSX09QVElPTl9BTlRJX0FMSUFTSU5HCi0KLSAgLyogQSBsb29rdXAgdGFibGUgdXNlZCB0byBxdWlja2x5IGNvdW50IHNldCBiaXRzIGluIGZvdXIgZ3JheSAyeDIgKi8KLSAgLyogY2VsbHMuICBUaGUgdmFsdWVzIG9mIHRoZSB0YWJsZSBoYXZlIGJlZW4gcHJvZHVjZWQgd2l0aCB0aGUgICAgKi8KLSAgLyogZm9sbG93aW5nIGNvZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBmb3IgKCBpID0gMDsgaSA8IDI1NjsgaSsrICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIGwgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIGogPSBpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIGZvciAoIGMgPSAwOyBjIDwgNDsgYysrICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgbCA8PD0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgaWYgKCBqICYgMHg4MCApIGwrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgaWYgKCBqICYgMHg0MCApIGwrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgaiA9ICggaiA8PCAyICkgJiAweEZGOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIHByaW50ZiggIjB4JTA0WCIsIGwgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICBzdGF0aWMgY29uc3Qgc2hvcnQgIGNvdW50X3RhYmxlWzI1Nl0gPQotICB7Ci0gICAgMHgwMDAwLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAyLCAweDAwMTAsIDB4MDAxMSwgMHgwMDExLCAweDAwMTIsCi0gICAgMHgwMDEwLCAweDAwMTEsIDB4MDAxMSwgMHgwMDEyLCAweDAwMjAsIDB4MDAyMSwgMHgwMDIxLCAweDAwMjIsCi0gICAgMHgwMTAwLCAweDAxMDEsIDB4MDEwMSwgMHgwMTAyLCAweDAxMTAsIDB4MDExMSwgMHgwMTExLCAweDAxMTIsCi0gICAgMHgwMTEwLCAweDAxMTEsIDB4MDExMSwgMHgwMTEyLCAweDAxMjAsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjIsCi0gICAgMHgwMTAwLCAweDAxMDEsIDB4MDEwMSwgMHgwMTAyLCAweDAxMTAsIDB4MDExMSwgMHgwMTExLCAweDAxMTIsCi0gICAgMHgwMTEwLCAweDAxMTEsIDB4MDExMSwgMHgwMTEyLCAweDAxMjAsIDB4MDEyMSwgMHgwMTIxLCAweDAxMjIsCi0gICAgMHgwMjAwLCAweDAyMDEsIDB4MDIwMSwgMHgwMjAyLCAweDAyMTAsIDB4MDIxMSwgMHgwMjExLCAweDAyMTIsCi0gICAgMHgwMjEwLCAweDAyMTEsIDB4MDIxMSwgMHgwMjEyLCAweDAyMjAsIDB4MDIyMSwgMHgwMjIxLCAweDAyMjIsCi0gICAgMHgxMDAwLCAweDEwMDEsIDB4MTAwMSwgMHgxMDAyLCAweDEwMTAsIDB4MTAxMSwgMHgxMDExLCAweDEwMTIsCi0gICAgMHgxMDEwLCAweDEwMTEsIDB4MTAxMSwgMHgxMDEyLCAweDEwMjAsIDB4MTAyMSwgMHgxMDIxLCAweDEwMjIsCi0gICAgMHgxMTAwLCAweDExMDEsIDB4MTEwMSwgMHgxMTAyLCAweDExMTAsIDB4MTExMSwgMHgxMTExLCAweDExMTIsCi0gICAgMHgxMTEwLCAweDExMTEsIDB4MTExMSwgMHgxMTEyLCAweDExMjAsIDB4MTEyMSwgMHgxMTIxLCAweDExMjIsCi0gICAgMHgxMTAwLCAweDExMDEsIDB4MTEwMSwgMHgxMTAyLCAweDExMTAsIDB4MTExMSwgMHgxMTExLCAweDExMTIsCi0gICAgMHgxMTEwLCAweDExMTEsIDB4MTExMSwgMHgxMTEyLCAweDExMjAsIDB4MTEyMSwgMHgxMTIxLCAweDExMjIsCi0gICAgMHgxMjAwLCAweDEyMDEsIDB4MTIwMSwgMHgxMjAyLCAweDEyMTAsIDB4MTIxMSwgMHgxMjExLCAweDEyMTIsCi0gICAgMHgxMjEwLCAweDEyMTEsIDB4MTIxMSwgMHgxMjEyLCAweDEyMjAsIDB4MTIyMSwgMHgxMjIxLCAweDEyMjIsCi0gICAgMHgxMDAwLCAweDEwMDEsIDB4MTAwMSwgMHgxMDAyLCAweDEwMTAsIDB4MTAxMSwgMHgxMDExLCAweDEwMTIsCi0gICAgMHgxMDEwLCAweDEwMTEsIDB4MTAxMSwgMHgxMDEyLCAweDEwMjAsIDB4MTAyMSwgMHgxMDIxLCAweDEwMjIsCi0gICAgMHgxMTAwLCAweDExMDEsIDB4MTEwMSwgMHgxMTAyLCAweDExMTAsIDB4MTExMSwgMHgxMTExLCAweDExMTIsCi0gICAgMHgxMTEwLCAweDExMTEsIDB4MTExMSwgMHgxMTEyLCAweDExMjAsIDB4MTEyMSwgMHgxMTIxLCAweDExMjIsCi0gICAgMHgxMTAwLCAweDExMDEsIDB4MTEwMSwgMHgxMTAyLCAweDExMTAsIDB4MTExMSwgMHgxMTExLCAweDExMTIsCi0gICAgMHgxMTEwLCAweDExMTEsIDB4MTExMSwgMHgxMTEyLCAweDExMjAsIDB4MTEyMSwgMHgxMTIxLCAweDExMjIsCi0gICAgMHgxMjAwLCAweDEyMDEsIDB4MTIwMSwgMHgxMjAyLCAweDEyMTAsIDB4MTIxMSwgMHgxMjExLCAweDEyMTIsCi0gICAgMHgxMjEwLCAweDEyMTEsIDB4MTIxMSwgMHgxMjEyLCAweDEyMjAsIDB4MTIyMSwgMHgxMjIxLCAweDEyMjIsCi0gICAgMHgyMDAwLCAweDIwMDEsIDB4MjAwMSwgMHgyMDAyLCAweDIwMTAsIDB4MjAxMSwgMHgyMDExLCAweDIwMTIsCi0gICAgMHgyMDEwLCAweDIwMTEsIDB4MjAxMSwgMHgyMDEyLCAweDIwMjAsIDB4MjAyMSwgMHgyMDIxLCAweDIwMjIsCi0gICAgMHgyMTAwLCAweDIxMDEsIDB4MjEwMSwgMHgyMTAyLCAweDIxMTAsIDB4MjExMSwgMHgyMTExLCAweDIxMTIsCi0gICAgMHgyMTEwLCAweDIxMTEsIDB4MjExMSwgMHgyMTEyLCAweDIxMjAsIDB4MjEyMSwgMHgyMTIxLCAweDIxMjIsCi0gICAgMHgyMTAwLCAweDIxMDEsIDB4MjEwMSwgMHgyMTAyLCAweDIxMTAsIDB4MjExMSwgMHgyMTExLCAweDIxMTIsCi0gICAgMHgyMTEwLCAweDIxMTEsIDB4MjExMSwgMHgyMTEyLCAweDIxMjAsIDB4MjEyMSwgMHgyMTIxLCAweDIxMjIsCi0gICAgMHgyMjAwLCAweDIyMDEsIDB4MjIwMSwgMHgyMjAyLCAweDIyMTAsIDB4MjIxMSwgMHgyMjExLCAweDIyMTIsCi0gICAgMHgyMjEwLCAweDIyMTEsIDB4MjIxMSwgMHgyMjEyLCAweDIyMjAsIDB4MjIyMSwgMHgyMjIxLCAweDIyMjIKLSAgfTsKLQotI2VuZGlmIC8qIEZUX1JBU1RFUl9PUFRJT05fQU5USV9BTElBU0lORyAqLwotCi0KLQogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqLwpAQCAtNjc3LDExICs1ODUsMTEgQEAKICAgICAgKiBhcHByb3hpbWF0aW5nIGl0IGFzIGEgc3RyYWlnaHQgc2VnbWVudC4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDMyIChmb3IKICAgICAgKiBsb3cgYWNjdXJhY3kpIGNvcnJlc3BvbmRzIHRvCiAgICAgICoKLSAgICAgKiAgIDMyIC8gNjQgPT0gMC41IHBpeGVscyAsCisgICAgICogICAzMiAvIDY0ID09IDAuNSBwaXhlbHMsCiAgICAgICoKICAgICAgKiB3aGlsZSBmb3IgdGhlIGhpZ2ggYWNjdXJhY3kgY2FzZSB3ZSBoYXZlCiAgICAgICoKLSAgICAgKiAgIDI1Ni8gKDEgPDwgMTIpID0gMC4wNjI1IHBpeGVscyAuCisgICAgICogICAyNTYgLyAoMSA8PCAxMikgPSAwLjA2MjUgcGl4ZWxzLgogICAgICAqCiAgICAgICogYHByZWNpc2lvbl9qaXR0ZXInIGlzIGFuIGVwc2lsb24gdGhyZXNob2xkIHVzZWQgaW4KICAgICAgKiBgVmVydGljYWxfU3dlZXBfU3BhbicgdG8gZGVhbCB3aXRoIHNtYWxsIGltcGVyZmVjdGlvbnMgaW4gdGhlIEJlemllcgpAQCAtNzY0LDEzICs2NzIsMTMgQEAKICAgICAgIGlmICggb3ZlcnNob290ICkKICAgICAgICAgcmFzLmNQcm9maWxlLT5mbGFncyB8PSBPdmVyc2hvb3RfQm90dG9tOwogCi0gICAgICBGVF9UUkFDRTYoKCAiTmV3IGFzY2VuZGluZyBwcm9maWxlID0gJXBcbiIsIHJhcy5jUHJvZmlsZSApKTsKKyAgICAgIEZUX1RSQUNFNigoICIgIG5ldyBhc2NlbmRpbmcgcHJvZmlsZSA9ICVwXG4iLCByYXMuY1Byb2ZpbGUgKSk7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgRGVzY2VuZGluZ19TdGF0ZToKICAgICAgIGlmICggb3ZlcnNob290ICkKICAgICAgICAgcmFzLmNQcm9maWxlLT5mbGFncyB8PSBPdmVyc2hvb3RfVG9wOwotICAgICAgRlRfVFJBQ0U2KCggIk5ldyBkZXNjZW5kaW5nIHByb2ZpbGUgPSAlcFxuIiwgcmFzLmNQcm9maWxlICkpOworICAgICAgRlRfVFJBQ0U2KCggIiAgbmV3IGRlc2NlbmRpbmcgcHJvZmlsZSA9ICVwXG4iLCByYXMuY1Byb2ZpbGUgKSk7CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CkBAIC04MjUsNyArNzMzLDcgQEAKICAgICAgIFBQcm9maWxlICBvbGRQcm9maWxlOwogCiAKLSAgICAgIEZUX1RSQUNFNigoICJFbmRpbmcgcHJvZmlsZSAlcCwgc3RhcnQgPSAlbGQsIGhlaWdodCA9ICVsZFxuIiwKKyAgICAgIEZUX1RSQUNFNigoICIgIGVuZGluZyBwcm9maWxlICVwLCBzdGFydCA9ICVsZCwgaGVpZ2h0ID0gJWxkXG4iLAogICAgICAgICAgICAgICAgICAgcmFzLmNQcm9maWxlLCByYXMuY1Byb2ZpbGUtPnN0YXJ0LCBoICkpOwogCiAgICAgICByYXMuY1Byb2ZpbGUtPmhlaWdodCA9IGg7CkBAIC04OTMsMTUgKzgwMSwxNCBAQAogCiAgICAgLyogaWYgaXQgaXMgPCwgc2ltcGx5IGluc2VydCBpdCwgaWdub3JlIGlmID09ICovCiAgICAgaWYgKCBuID49IDAgJiYgeSA+IHlfdHVybnNbbl0gKQotICAgICAgd2hpbGUgKCBuID49IDAgKQorICAgICAgZG8KICAgICAgIHsKICAgICAgICAgSW50ICB5MiA9IChJbnQpeV90dXJuc1tuXTsKIAogCiAgICAgICAgIHlfdHVybnNbbl0gPSB5OwogICAgICAgICB5ID0geTI7Ci0gICAgICAgIG4tLTsKLSAgICAgIH0KKyAgICAgIH0gd2hpbGUgKCAtLW4gPj0gMCApOwogCiAgICAgaWYgKCBuIDwgMCApCiAgICAgewpAQCAtOTQyLDcgKzg0OSw3IEBACiAKICAgICBpZiAoIG4gPiAxICYmIHAgKQogICAgIHsKLSAgICAgIHdoaWxlICggbiA+IDAgKQorICAgICAgZG8KICAgICAgIHsKICAgICAgICAgSW50ICBib3R0b20sIHRvcDsKIApAQCAtOTcwLDggKzg3Nyw3IEBACiAgICAgICAgICAgcmV0dXJuIEZBSUxVUkU7CiAKICAgICAgICAgcCA9IHAtPmxpbms7Ci0gICAgICAgIG4tLTsKLSAgICAgIH0KKyAgICAgIH0gd2hpbGUgKCAtLW4gKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgcmFzLmZQcm9maWxlID0gTlVMTDsKQEAgLTEzNDIsNyArMTI0OCw3IEBACiAKICAgICBzdGFydF9hcmMgPSBhcmM7CiAKLSAgICB3aGlsZSAoIGFyYyA+PSBzdGFydF9hcmMgJiYgZSA8PSBlMiApCisgICAgZG8KICAgICB7CiAgICAgICByYXMuam9pbnQgPSBGQUxTRTsKIApAQCAtMTM3NSw3ICsxMjgxLDcgQEAKICAgICAgICAgfQogICAgICAgICBhcmMgLT0gZGVncmVlOwogICAgICAgfQotICAgIH0KKyAgICB9IHdoaWxlICggYXJjID49IHN0YXJ0X2FyYyAmJiBlIDw9IGUyICk7CiAKICAgRmluOgogICAgIHJhcy50b3AgID0gdG9wOwpAQCAtMTgxMyw3ICsxNzE5LDcgQEAKICAgc3RhdGljIEJvb2wKICAgRGVjb21wb3NlX0N1cnZlKCBSQVNfQVJHUyBVU2hvcnQgIGZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTaG9ydCAgbGFzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgIGZsaXBwZWQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludCAgICAgZmxpcHBlZCApCiAgIHsKICAgICBGVF9WZWN0b3IgICB2X2xhc3Q7CiAgICAgRlRfVmVjdG9yICAgdl9jb250cm9sOwpAQCAtMTgyNCw3ICsxNzMwLDcgQEAKICAgICBGVF9WZWN0b3IqICBsaW1pdDsKICAgICBjaGFyKiAgICAgICB0YWdzOwogCi0gICAgdW5zaWduZWQgICAgdGFnOyAgICAgICAvKiBjdXJyZW50IHBvaW50J3Mgc3RhdGUgICAgICAgICAgICovCisgICAgVUludCAgICAgICAgdGFnOyAgICAgICAvKiBjdXJyZW50IHBvaW50J3Mgc3RhdGUgICAgICAgICAgICovCiAKIAogICAgIHBvaW50cyA9IHJhcy5vdXRsaW5lLnBvaW50czsKQEAgLTIwMzUsMTAgKzE5NDEsMTAgQEAKICAgLyogICAgcmVuZGVyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgQm9vbAotICBDb252ZXJ0X0dseXBoKCBSQVNfQVJHUyBpbnQgIGZsaXBwZWQgKQorICBDb252ZXJ0X0dseXBoKCBSQVNfQVJHUyBJbnQgIGZsaXBwZWQgKQogICB7Ci0gICAgaW50ICAgICAgIGk7Ci0gICAgdW5zaWduZWQgIHN0YXJ0OworICAgIEludCAgIGk7CisgICAgVUludCAgc3RhcnQ7CiAKIAogICAgIHJhcy5mUHJvZmlsZSA9IE5VTEw7CkBAIC0yMDY0LDEyICsxOTcwLDEyIEBACiAgICAgICByYXMuc3RhdGUgICAgPSBVbmtub3duX1N0YXRlOwogICAgICAgcmFzLmdQcm9maWxlID0gTlVMTDsKIAotICAgICAgaWYgKCBEZWNvbXBvc2VfQ3VydmUoIFJBU19WQVJTICh1bnNpZ25lZCBzaG9ydClzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXMub3V0bGluZS5jb250b3Vyc1tpXSwKKyAgICAgIGlmICggRGVjb21wb3NlX0N1cnZlKCBSQVNfVkFSUyAoVVNob3J0KXN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVU2hvcnQpcmFzLm91dGxpbmUuY29udG91cnNbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxpcHBlZCApICkKICAgICAgICAgcmV0dXJuIEZBSUxVUkU7CiAKLSAgICAgIHN0YXJ0ID0gcmFzLm91dGxpbmUuY29udG91cnNbaV0gKyAxOworICAgICAgc3RhcnQgPSAoVVNob3J0KXJhcy5vdXRsaW5lLmNvbnRvdXJzW2ldICsgMTsKIAogICAgICAgLyogd2UgbXVzdCBub3cgY2hlY2sgd2hldGhlciB0aGUgZXh0cmVtZSBhcmNzIGpvaW4gb3Igbm90ICovCiAgICAgICBpZiAoIEZSQUMoIHJhcy5sYXN0WSApID09IDAgJiYKQEAgLTIwODMsNyArMTk4OSw4IEBACiAgICAgICAgIC8qIHRvIGJlIGRyYXduLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgICAgIGxhc3RQcm9maWxlID0gcmFzLmNQcm9maWxlOwotICAgICAgaWYgKCByYXMuY1Byb2ZpbGUtPmZsYWdzICYgRmxvd19VcCApCisgICAgICBpZiAoIHJhcy50b3AgIT0gcmFzLmNQcm9maWxlLT5vZmZzZXQgJiYKKyAgICAgICAgICAgKCByYXMuY1Byb2ZpbGUtPmZsYWdzICYgRmxvd19VcCApICkKICAgICAgICAgbyA9IElTX1RPUF9PVkVSU0hPT1QoIHJhcy5sYXN0WSApOwogICAgICAgZWxzZQogICAgICAgICBvID0gSVNfQk9UVE9NX09WRVJTSE9PVCggcmFzLmxhc3RZICk7CkBAIC0yMjA3LDcgKzIxMTQsNyBAQAogICAgIHdoaWxlICggY3VycmVudCApCiAgICAgewogICAgICAgY3VycmVudC0+WCAgICAgICA9ICpjdXJyZW50LT5vZmZzZXQ7Ci0gICAgICBjdXJyZW50LT5vZmZzZXQgKz0gY3VycmVudC0+ZmxhZ3MgJiBGbG93X1VwID8gMSA6IC0xOworICAgICAgY3VycmVudC0+b2Zmc2V0ICs9ICggY3VycmVudC0+ZmxhZ3MgJiBGbG93X1VwICkgPyAxIDogLTE7CiAgICAgICBjdXJyZW50LT5oZWlnaHQtLTsKICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5saW5rOwogICAgIH0KQEAgLTIyNjcsMTAgKzIxNzQsNyBAQAogICAgIHJhcy50cmFjZUluY3IgPSAoU2hvcnQpLXBpdGNoOwogICAgIHJhcy50cmFjZU9mcyAgPSAtKm1pbiAqIHBpdGNoOwogICAgIGlmICggcGl0Y2ggPiAwICkKLSAgICAgIHJhcy50cmFjZU9mcyArPSAoIHJhcy50YXJnZXQucm93cyAtIDEgKSAqIHBpdGNoOwotCi0gICAgcmFzLmdyYXlfbWluX3ggPSAwOwotICAgIHJhcy5ncmF5X21heF94ID0gMDsKKyAgICAgIHJhcy50cmFjZU9mcyArPSAoTG9uZykoIHJhcy50YXJnZXQucm93cyAtIDEgKSAqIHBpdGNoOwogICB9CiAKIApAQCAtMjI5MSw2ICsyMTk1LDE0IEBACiAgICAgRlRfVU5VU0VEKCByaWdodCApOwogCiAKKyAgICAvKiBpbiBoaWdoLXByZWNpc2lvbiBtb2RlLCB3ZSBuZWVkIDEyIGRpZ2l0cyBhZnRlciB0aGUgY29tbWEgdG8gKi8KKyAgICAvKiByZXByZXNlbnQgbXVsdGlwbGVzIG9mIDEvKDE8PDEyKSA9IDEvNDA5NiAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9UUkFDRTcoKCAiICB5PSVkIHg9WyUuMTJmOyUuMTJmXSwgZHJvcC1vdXQ9JWQiLAorICAgICAgICAgICAgICAgIHksCisgICAgICAgICAgICAgICAgeDEgLyAoZG91YmxlKXJhcy5wcmVjaXNpb24sCisgICAgICAgICAgICAgICAgeDIgLyAoZG91YmxlKXJhcy5wcmVjaXNpb24sCisgICAgICAgICAgICAgICAgZHJvcE91dENvbnRyb2wgKSk7CisKICAgICAvKiBEcm9wLW91dCBjb250cm9sICovCiAKICAgICBlMSA9IFRSVU5DKCBDRUlMSU5HKCB4MSApICk7CkBAIC0yMzAzLDcgKzIyMTUsNyBAQAogCiAgICAgaWYgKCBlMiA+PSAwICYmIGUxIDwgcmFzLmJXaWR0aCApCiAgICAgewotICAgICAgaW50ICAgYzEsIGMyOworICAgICAgSW50ICAgYzEsIGMyOwogICAgICAgQnl0ZSAgZjEsIGYyOwogCiAKQEAgLTIzMTIsMTcgKzIyMjQsMTQgQEAKICAgICAgIGlmICggZTIgPj0gcmFzLmJXaWR0aCApCiAgICAgICAgIGUyID0gcmFzLmJXaWR0aCAtIDE7CiAKKyAgICAgIEZUX1RSQUNFNygoICIgLT4geD1bJWQ7JWRdIiwgZTEsIGUyICkpOworCiAgICAgICBjMSA9IChTaG9ydCkoIGUxID4+IDMgKTsKICAgICAgIGMyID0gKFNob3J0KSggZTIgPj4gMyApOwogCiAgICAgICBmMSA9IChCeXRlKSAgKCAweEZGID4+ICggZTEgJiA3ICkgKTsKICAgICAgIGYyID0gKEJ5dGUpIH4oIDB4N0YgPj4gKCBlMiAmIDcgKSApOwogCi0gICAgICBpZiAoIHJhcy5ncmF5X21pbl94ID4gYzEgKQotICAgICAgICByYXMuZ3JheV9taW5feCA9IChzaG9ydCljMTsKLSAgICAgIGlmICggcmFzLmdyYXlfbWF4X3ggPCBjMiApCi0gICAgICAgIHJhcy5ncmF5X21heF94ID0gKHNob3J0KWMyOwotCiAgICAgICB0YXJnZXQgPSByYXMuYlRhcmdldCArIHJhcy50cmFjZU9mcyArIGMxOwogICAgICAgYzIgLT0gYzE7CiAKQEAgLTIzNDQsNiArMjI1Myw4IEBACiAgICAgICBlbHNlCiAgICAgICAgICp0YXJnZXQgfD0gKCBmMSAmIGYyICk7CiAgICAgfQorCisgICAgRlRfVFJBQ0U3KCggIlxuIiApKTsKICAgfQogCiAKQEAgLTIzNTgsNiArMjI2OSwxMSBAQAogICAgIFNob3J0ICBjMSwgZjE7CiAKIAorICAgIEZUX1RSQUNFNygoICIgIHk9JWQgeD1bJS4xMmY7JS4xMmZdIiwKKyAgICAgICAgICAgICAgICB5LAorICAgICAgICAgICAgICAgIHgxIC8gKGRvdWJsZSlyYXMucHJlY2lzaW9uLAorICAgICAgICAgICAgICAgIHgyIC8gKGRvdWJsZSlyYXMucHJlY2lzaW9uICkpOworCiAgICAgLyogRHJvcC1vdXQgY29udHJvbCAqLwogCiAgICAgLyogICBlMiAgICAgICAgICAgIHgyICAgICAgICAgICAgICAgICAgICB4MSAgICAgICAgICAgZTEgICAqLwpAQCAtMjM5MCw2ICsyMzA2LDggQEAKICAgICAgIEludCAgZHJvcE91dENvbnRyb2wgPSBsZWZ0LT5mbGFncyAmIDc7CiAKIAorICAgICAgRlRfVFJBQ0U3KCggIiwgZHJvcC1vdXQ9JWQiLCBkcm9wT3V0Q29udHJvbCApKTsKKwogICAgICAgaWYgKCBlMSA9PSBlMiArIHJhcy5wcmVjaXNpb24gKQogICAgICAgewogICAgICAgICBzd2l0Y2ggKCBkcm9wT3V0Q29udHJvbCApCkBAIC0yNDM2LDE0ICsyMzU0LDE0IEBACiAgICAgICAgICAgICAgICBsZWZ0LT5oZWlnaHQgPD0gMCAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgICAhKCBsZWZ0LT5mbGFncyAmIE92ZXJzaG9vdF9Ub3AgICAmJgogICAgICAgICAgICAgICAgICAgeDIgLSB4MSA+PSByYXMucHJlY2lzaW9uX2hhbGYgKSApCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAgICAgICAvKiBsb3dlciBzdHViIHRlc3QgKi8KICAgICAgICAgICBpZiAoIHJpZ2h0LT5uZXh0ID09IGxlZnQgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgICBsZWZ0LT5zdGFydCA9PSB5ICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICAgISggbGVmdC0+ZmxhZ3MgJiBPdmVyc2hvb3RfQm90dG9tICYmCiAgICAgICAgICAgICAgICAgICB4MiAtIHgxID49IHJhcy5wcmVjaXNpb25faGFsZiAgKSApCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAgICAgICBpZiAoIGRyb3BPdXRDb250cm9sID09IDEgKQogICAgICAgICAgICAgcHhsID0gZTI7CkBAIC0yNDUyLDcgKzIzNzAsNyBAQAogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6IC8qIG1vZGVzIDIsIDMsIDYsIDcgKi8KLSAgICAgICAgICByZXR1cm47ICAvKiBubyBkcm9wLW91dCBjb250cm9sICovCisgICAgICAgICAgZ290byBFeGl0OyAgLyogbm8gZHJvcC1vdXQgY29udHJvbCAqLwogICAgICAgICB9CiAKICAgICAgICAgLyogdW5kb2N1bWVudGVkIGJ1dCBjb25maXJtZWQ6IElmIHRoZSBkcm9wLW91dCB3b3VsZCByZXN1bHQgaW4gYSAgKi8KQEAgLTI0NzMsMjYgKzIzOTEsMjYgQEAKIAogICAgICAgICBpZiAoIGUxID49IDAgJiYgZTEgPCByYXMuYldpZHRoICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgcmFzLmJUYXJnZXRbcmFzLnRyYWNlT2ZzICsgYzFdICYgKCAweDgwID4+IGYxICkgKQotICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICB9CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBFeGl0OwogICAgIH0KIAogICAgIGUxID0gVFJVTkMoIHB4bCApOwogCiAgICAgaWYgKCBlMSA+PSAwICYmIGUxIDwgcmFzLmJXaWR0aCApCiAgICAgeworICAgICAgRlRfVFJBQ0U3KCggIiAtPiB4PSVkIChkcm9wLW91dCkiLCBlMSApKTsKKwogICAgICAgYzEgPSAoU2hvcnQpKCBlMSA+PiAzICk7CiAgICAgICBmMSA9IChTaG9ydCkoIGUxICYgNyApOwogCi0gICAgICBpZiAoIHJhcy5ncmF5X21pbl94ID4gYzEgKQotICAgICAgICByYXMuZ3JheV9taW5feCA9IGMxOwotICAgICAgaWYgKCByYXMuZ3JheV9tYXhfeCA8IGMxICkKLSAgICAgICAgcmFzLmdyYXlfbWF4X3ggPSBjMTsKLQogICAgICAgcmFzLmJUYXJnZXRbcmFzLnRyYWNlT2ZzICsgYzFdIHw9IChjaGFyKSggMHg4MCA+PiBmMSApOwogICAgIH0KKworICBFeGl0OgorICAgIEZUX1RSQUNFNygoICJcbiIgKSk7CiAgIH0KIAogCkBAIC0yNTM5LDMyICsyNDU3LDM5IEBACiAgICAgICBMb25nICBlMSwgZTI7CiAKIAorICAgICAgRlRfVFJBQ0U3KCggIiAgeD0lZCB5PVslLjEyZjslLjEyZl0iLAorICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgIHgxIC8gKGRvdWJsZSlyYXMucHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgeDIgLyAoZG91YmxlKXJhcy5wcmVjaXNpb24gKSk7CisKICAgICAgIGUxID0gQ0VJTElORyggeDEgKTsKICAgICAgIGUyID0gRkxPT1IgICggeDIgKTsKIAogICAgICAgaWYgKCBlMSA9PSBlMiApCiAgICAgICB7Ci0gICAgICAgIEJ5dGUgICBmMTsKLSAgICAgICAgUEJ5dGUgIGJpdHM7Ci0KLQotICAgICAgICBiaXRzID0gcmFzLmJUYXJnZXQgKyAoIHkgPj4gMyApOwotICAgICAgICBmMSAgID0gKEJ5dGUpKCAweDgwID4+ICggeSAmIDcgKSApOwotCiAgICAgICAgIGUxID0gVFJVTkMoIGUxICk7CiAKICAgICAgICAgaWYgKCBlMSA+PSAwICYmIChVTG9uZyllMSA8IHJhcy50YXJnZXQucm93cyApCiAgICAgICAgIHsKKyAgICAgICAgICBCeXRlICAgZjE7CisgICAgICAgICAgUEJ5dGUgIGJpdHM7CiAgICAgICAgICAgUEJ5dGUgIHA7CiAKIAotICAgICAgICAgIHAgPSBiaXRzIC0gZTEgKiByYXMudGFyZ2V0LnBpdGNoOworICAgICAgICAgIEZUX1RSQUNFNygoICIgLT4geT0lZCAoZHJvcC1vdXQpIiwgZTEgKSk7CisKKyAgICAgICAgICBiaXRzID0gcmFzLmJUYXJnZXQgKyAoIHkgPj4gMyApOworICAgICAgICAgIGYxICAgPSAoQnl0ZSkoIDB4ODAgPj4gKCB5ICYgNyApICk7CisgICAgICAgICAgcCAgICA9IGJpdHMgLSBlMSAqIHJhcy50YXJnZXQucGl0Y2g7CisKICAgICAgICAgICBpZiAoIHJhcy50YXJnZXQucGl0Y2ggPiAwICkKLSAgICAgICAgICAgIHAgKz0gKCByYXMudGFyZ2V0LnJvd3MgLSAxICkgKiByYXMudGFyZ2V0LnBpdGNoOworICAgICAgICAgICAgcCArPSAoTG9uZykoIHJhcy50YXJnZXQucm93cyAtIDEgKSAqIHJhcy50YXJnZXQucGl0Y2g7CiAKICAgICAgICAgICBwWzBdIHw9IGYxOwogICAgICAgICB9CiAgICAgICB9CisKKyAgICAgIEZUX1RSQUNFNygoICJcbiIgKSk7CiAgICAgfQogICB9CiAKQEAgLTI1ODEsNiArMjUwNiwxMSBAQAogICAgIEJ5dGUgICBmMTsKIAogCisgICAgRlRfVFJBQ0U3KCggIiAgeD0lZCB5PVslLjEyZjslLjEyZl0iLAorICAgICAgICAgICAgICAgIHksCisgICAgICAgICAgICAgICAgeDEgLyAoZG91YmxlKXJhcy5wcmVjaXNpb24sCisgICAgICAgICAgICAgICAgeDIgLyAoZG91YmxlKXJhcy5wcmVjaXNpb24gKSk7CisKICAgICAvKiBEdXJpbmcgdGhlIGhvcml6b250YWwgc3dlZXAsIHdlIG9ubHkgdGFrZSBjYXJlIG9mIGRyb3Atb3V0cyAqLwogCiAgICAgLyogZTEgICAgICsgICAgICAgPC0tIHBpeGVsIGNlbnRlciAqLwpAQCAtMjYwMiw2ICsyNTMyLDggQEAKICAgICAgIEludCAgZHJvcE91dENvbnRyb2wgPSBsZWZ0LT5mbGFncyAmIDc7CiAKIAorICAgICAgRlRfVFJBQ0U3KCggIiwgZHJvcG91dD0lZCIsIGRyb3BPdXRDb250cm9sICkpOworCiAgICAgICBpZiAoIGUxID09IGUyICsgcmFzLnByZWNpc2lvbiApCiAgICAgICB7CiAgICAgICAgIHN3aXRjaCAoIGRyb3BPdXRDb250cm9sICkKQEAgLTI2MjMsMTQgKzI1NTUsMTQgQEAKICAgICAgICAgICAgICAgIGxlZnQtPmhlaWdodCA8PSAwICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgICAgICEoIGxlZnQtPmZsYWdzICYgT3ZlcnNob290X1RvcCAgICYmCiAgICAgICAgICAgICAgICAgICB4MiAtIHgxID49IHJhcy5wcmVjaXNpb25faGFsZiApICkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKIAogICAgICAgICAgIC8qIGxlZnRtb3N0IHN0dWIgdGVzdCAqLwogICAgICAgICAgIGlmICggcmlnaHQtPm5leHQgPT0gbGVmdCAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgICAgIGxlZnQtPnN0YXJ0ID09IHkgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgICAhKCBsZWZ0LT5mbGFncyAmIE92ZXJzaG9vdF9Cb3R0b20gJiYKICAgICAgICAgICAgICAgICAgIHgyIC0geDEgPj0gcmFzLnByZWNpc2lvbl9oYWxmICApICkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKIAogICAgICAgICAgIGlmICggZHJvcE91dENvbnRyb2wgPT0gMSApCiAgICAgICAgICAgICBweGwgPSBlMjsKQEAgLTI2MzksNyArMjU3MSw3IEBACiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgZGVmYXVsdDogLyogbW9kZXMgMiwgMywgNiwgNyAqLwotICAgICAgICAgIHJldHVybjsgIC8qIG5vIGRyb3Atb3V0IGNvbnRyb2wgKi8KKyAgICAgICAgICBnb3RvIEV4aXQ7ICAvKiBubyBkcm9wLW91dCBjb250cm9sICovCiAgICAgICAgIH0KIAogICAgICAgICAvKiB1bmRvY3VtZW50ZWQgYnV0IGNvbmZpcm1lZDogSWYgdGhlIGRyb3Atb3V0IHdvdWxkIHJlc3VsdCBpbiBhICAqLwpAQCAtMjY2MCwzMCArMjU5MiwzNSBAQAogCiAgICAgICAgIGJpdHMgLT0gZTEgKiByYXMudGFyZ2V0LnBpdGNoOwogICAgICAgICBpZiAoIHJhcy50YXJnZXQucGl0Y2ggPiAwICkKLSAgICAgICAgICBiaXRzICs9ICggcmFzLnRhcmdldC5yb3dzIC0gMSApICogcmFzLnRhcmdldC5waXRjaDsKKyAgICAgICAgICBiaXRzICs9IChMb25nKSggcmFzLnRhcmdldC5yb3dzIC0gMSApICogcmFzLnRhcmdldC5waXRjaDsKIAogICAgICAgICBpZiAoIGUxID49IDAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgIChVTG9uZyllMSA8IHJhcy50YXJnZXQucm93cyAmJgogICAgICAgICAgICAgICpiaXRzICYgZjEgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgcmV0dXJuOworICAgICAgICAgIGdvdG8gRXhpdDsKICAgICAgIH0KICAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOworICAgICAgICBnb3RvIEV4aXQ7CiAgICAgfQogCi0gICAgYml0cyA9IHJhcy5iVGFyZ2V0ICsgKCB5ID4+IDMgKTsKLSAgICBmMSAgID0gKEJ5dGUpKCAweDgwID4+ICggeSAmIDcgKSApOwotCiAgICAgZTEgPSBUUlVOQyggcHhsICk7CiAKICAgICBpZiAoIGUxID49IDAgJiYgKFVMb25nKWUxIDwgcmFzLnRhcmdldC5yb3dzICkKICAgICB7CisgICAgICBGVF9UUkFDRTcoKCAiIC0+IHk9JWQgKGRyb3Atb3V0KSIsIGUxICkpOworCisgICAgICBiaXRzICA9IHJhcy5iVGFyZ2V0ICsgKCB5ID4+IDMgKTsKKyAgICAgIGYxICAgID0gKEJ5dGUpKCAweDgwID4+ICggeSAmIDcgKSApOwogICAgICAgYml0cyAtPSBlMSAqIHJhcy50YXJnZXQucGl0Y2g7CisKICAgICAgIGlmICggcmFzLnRhcmdldC5waXRjaCA+IDAgKQotICAgICAgICBiaXRzICs9ICggcmFzLnRhcmdldC5yb3dzIC0gMSApICogcmFzLnRhcmdldC5waXRjaDsKKyAgICAgICAgYml0cyArPSAoTG9uZykoIHJhcy50YXJnZXQucm93cyAtIDEgKSAqIHJhcy50YXJnZXQucGl0Y2g7CiAKICAgICAgIGJpdHNbMF0gfD0gZjE7CiAgICAgfQorCisgIEV4aXQ6CisgICAgRlRfVFJBQ0U3KCggIlxuIiApKTsKICAgfQogCiAKQEAgLTI2OTUsMjQ5ICsyNjMyLDYgQEAKICAgfQogCiAKLSNpZmRlZiBGVF9SQVNURVJfT1BUSU9OX0FOVElfQUxJQVNJTkcKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIFZlcnRpY2FsIEdyYXkgU3dlZXAgUHJvY2VkdXJlIFNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgVGhlc2UgdHdvIHJvdXRpbmVzIGFyZSB1c2VkIGR1cmluZyB0aGUgdmVydGljYWwgZ3JheS1sZXZlbHMgc3dlZXAgICAgKi8KLSAgLyogIHBoYXNlIGJ5IHRoZSBnZW5lcmljIERyYXdfU3dlZXAoKSBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgTk9URVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAtIFRoZSB0YXJnZXQgcGl4bWFwJ3Mgd2lkdGggKm11c3QqIGJlIGEgbXVsdGlwbGUgb2YgNC4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIC0gWW91IGhhdmUgdG8gdXNlIHRoZSBmdW5jdGlvbiBWZXJ0aWNhbF9Td2VlcF9TcGFuKCkgZm9yIHRoZSBncmF5ICAgICovCi0gIC8qICAgIHNwYW4gY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgc3RhdGljIHZvaWQKLSAgVmVydGljYWxfR3JheV9Td2VlcF9Jbml0KCBSQVNfQVJHUyBTaG9ydCogIG1pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG9ydCogIG1heCApCi0gIHsKLSAgICBMb25nICBwaXRjaCwgYnl0ZV9sZW47Ci0KLQotICAgICptaW4gPSAqbWluICYgLTI7Ci0gICAgKm1heCA9ICggKm1heCArIDMgKSAmIC0yOwotCi0gICAgcmFzLnRyYWNlT2ZzICA9IDA7Ci0gICAgcGl0Y2ggICAgICAgICA9IHJhcy50YXJnZXQucGl0Y2g7Ci0gICAgYnl0ZV9sZW4gICAgICA9IC1waXRjaDsKLSAgICByYXMudHJhY2VJbmNyID0gKFNob3J0KWJ5dGVfbGVuOwotICAgIHJhcy50cmFjZUcgICAgPSAoICptaW4gLyAyICkgKiBieXRlX2xlbjsKLQotICAgIGlmICggcGl0Y2ggPiAwICkKLSAgICB7Ci0gICAgICByYXMudHJhY2VHICs9ICggcmFzLnRhcmdldC5yb3dzIC0gMSApICogcGl0Y2g7Ci0gICAgICBieXRlX2xlbiAgICA9IC1ieXRlX2xlbjsKLSAgICB9Ci0KLSAgICByYXMuZ3JheV9taW5feCA9ICAoU2hvcnQpYnl0ZV9sZW47Ci0gICAgcmFzLmdyYXlfbWF4X3ggPSAtKFNob3J0KWJ5dGVfbGVuOwotICB9Ci0KLQotICBzdGF0aWMgdm9pZAotICBWZXJ0aWNhbF9HcmF5X1N3ZWVwX1N0ZXAoIFJBU19BUkcgKQotICB7Ci0gICAgc2hvcnQqICBjb3VudCA9IChzaG9ydCopY291bnRfdGFibGU7Ci0gICAgQnl0ZSogICBncmF5czsKLQotCi0gICAgcmFzLnRyYWNlT2ZzICs9IHJhcy5ncmF5X3dpZHRoOwotCi0gICAgaWYgKCByYXMudHJhY2VPZnMgPiByYXMuZ3JheV93aWR0aCApCi0gICAgewotICAgICAgUEJ5dGUgIHBpeDsKLQotCi0gICAgICBwaXggICA9IHJhcy5nVGFyZ2V0ICsgcmFzLnRyYWNlRyArIHJhcy5ncmF5X21pbl94ICogNDsKLSAgICAgIGdyYXlzID0gcmFzLmdyYXlzOwotCi0gICAgICBpZiAoIHJhcy5ncmF5X21heF94ID49IDAgKQotICAgICAgewotICAgICAgICBMb25nICBsYXN0X3BpeGVsID0gcmFzLnRhcmdldC53aWR0aCAtIDE7Ci0gICAgICAgIEludCAgIGxhc3RfY2VsbCAgPSBsYXN0X3BpeGVsID4+IDI7Ci0gICAgICAgIEludCAgIGxhc3RfYml0ICAgPSBsYXN0X3BpeGVsICYgMzsKLSAgICAgICAgQm9vbCAgb3ZlciAgICAgICA9IDA7Ci0KLSAgICAgICAgSW50ICAgIGMxLCBjMjsKLSAgICAgICAgUEJ5dGUgIGJpdCwgYml0MjsKLQotCi0gICAgICAgIGlmICggcmFzLmdyYXlfbWF4X3ggPj0gbGFzdF9jZWxsICYmIGxhc3RfYml0ICE9IDMgKQotICAgICAgICB7Ci0gICAgICAgICAgcmFzLmdyYXlfbWF4X3ggPSBsYXN0X2NlbGwgLSAxOwotICAgICAgICAgIG92ZXIgPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCByYXMuZ3JheV9taW5feCA8IDAgKQotICAgICAgICAgIHJhcy5ncmF5X21pbl94ID0gMDsKLQotICAgICAgICBiaXQgID0gcmFzLmJUYXJnZXQgKyByYXMuZ3JheV9taW5feDsKLSAgICAgICAgYml0MiA9IGJpdCArIHJhcy5ncmF5X3dpZHRoOwotCi0gICAgICAgIGMxID0gcmFzLmdyYXlfbWF4X3ggLSByYXMuZ3JheV9taW5feDsKLQotICAgICAgICB3aGlsZSAoIGMxID49IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgYzIgPSBjb3VudFsqYml0XSArIGNvdW50WypiaXQyXTsKLQotICAgICAgICAgIGlmICggYzIgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHBpeFswXSA9IGdyYXlzWyhjMiA+PiAxMikgJiAweDAwMEZdOwotICAgICAgICAgICAgcGl4WzFdID0gZ3JheXNbKGMyID4+IDggKSAmIDB4MDAwRl07Ci0gICAgICAgICAgICBwaXhbMl0gPSBncmF5c1soYzIgPj4gNCApICYgMHgwMDBGXTsKLSAgICAgICAgICAgIHBpeFszXSA9IGdyYXlzWyBjMiAgICAgICAgJiAweDAwMEZdOwotCi0gICAgICAgICAgICAqYml0ICA9IDA7Ci0gICAgICAgICAgICAqYml0MiA9IDA7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgYml0Kys7Ci0gICAgICAgICAgYml0MisrOwotICAgICAgICAgIHBpeCArPSA0OwotICAgICAgICAgIGMxLS07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIG92ZXIgKQotICAgICAgICB7Ci0gICAgICAgICAgYzIgPSBjb3VudFsqYml0XSArIGNvdW50WypiaXQyXTsKLSAgICAgICAgICBpZiAoIGMyICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKCBsYXN0X2JpdCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgIHBpeFsyXSA9IGdyYXlzWyhjMiA+PiA0ICkgJiAweDAwMEZdOwotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICBwaXhbMV0gPSBncmF5c1soYzIgPj4gOCApICYgMHgwMDBGXTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgIHBpeFswXSA9IGdyYXlzWyhjMiA+PiAxMikgJiAweDAwMEZdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqYml0ICA9IDA7Ci0gICAgICAgICAgICAqYml0MiA9IDA7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJhcy50cmFjZU9mcyA9IDA7Ci0gICAgICByYXMudHJhY2VHICArPSByYXMudHJhY2VJbmNyOwotCi0gICAgICByYXMuZ3JheV9taW5feCA9ICAzMjAwMDsKLSAgICAgIHJhcy5ncmF5X21heF94ID0gLTMyMDAwOwotICAgIH0KLSAgfQotCi0KLSAgc3RhdGljIHZvaWQKLSAgSG9yaXpvbnRhbF9HcmF5X1N3ZWVwX1NwYW4oIFJBU19BUkdTIFNob3J0ICAgICAgIHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICB4MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgIHgyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFByb2ZpbGUgICAgbGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQcm9maWxlICAgIHJpZ2h0ICkKLSAgewotICAgIC8qIG5vdGhpbmcsIHJlYWxseSAqLwotICAgIEZUX1VOVVNFRF9SQVNURVI7Ci0gICAgRlRfVU5VU0VEKCB5ICk7Ci0gICAgRlRfVU5VU0VEKCB4MSApOwotICAgIEZUX1VOVVNFRCggeDIgKTsKLSAgICBGVF9VTlVTRUQoIGxlZnQgKTsKLSAgICBGVF9VTlVTRUQoIHJpZ2h0ICk7Ci0gIH0KLQotCi0gIHN0YXRpYyB2b2lkCi0gIEhvcml6b250YWxfR3JheV9Td2VlcF9Ecm9wKCBSQVNfQVJHUyBTaG9ydCAgICAgICB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgeDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICB4MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQcm9maWxlICAgIGxlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUHJvZmlsZSAgICByaWdodCApCi0gIHsKLSAgICBMb25nICAgZTEsIGUyOwotICAgIFBCeXRlICBwaXhlbDsKLQotCi0gICAgLyogRHVyaW5nIHRoZSBob3Jpem9udGFsIHN3ZWVwLCB3ZSBvbmx5IHRha2UgY2FyZSBvZiBkcm9wLW91dHMgKi8KLQotICAgIGUxID0gQ0VJTElORyggeDEgKTsKLSAgICBlMiA9IEZMT09SICAoIHgyICk7Ci0KLSAgICBpZiAoIGUxID4gZTIgKQotICAgIHsKLSAgICAgIEludCAgZHJvcE91dENvbnRyb2wgPSBsZWZ0LT5mbGFncyAmIDc7Ci0KLQotICAgICAgaWYgKCBlMSA9PSBlMiArIHJhcy5wcmVjaXNpb24gKQotICAgICAgewotICAgICAgICBzd2l0Y2ggKCBkcm9wT3V0Q29udHJvbCApCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSAwOiAvKiBzaW1wbGUgZHJvcC1vdXRzIGluY2x1ZGluZyBzdHVicyAqLwotICAgICAgICAgIGUxID0gZTI7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSA0OiAvKiBzbWFydCBkcm9wLW91dHMgaW5jbHVkaW5nIHN0dWJzICovCi0gICAgICAgICAgZTEgPSBGTE9PUiggKCB4MSArIHgyIC0gMSApIC8gMiArIHJhcy5wcmVjaXNpb25faGFsZiApOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgMTogLyogc2ltcGxlIGRyb3Atb3V0cyBleGNsdWRpbmcgc3R1YnMgKi8KLSAgICAgICAgY2FzZSA1OiAvKiBzbWFydCBkcm9wLW91dHMgZXhjbHVkaW5nIHN0dWJzICAqLwotICAgICAgICAgIC8qIHNlZSBWZXJ0aWNhbF9Td2VlcF9Ecm9wIGZvciBkZXRhaWxzICovCi0KLSAgICAgICAgICAvKiByaWdodG1vc3Qgc3R1YiB0ZXN0ICovCi0gICAgICAgICAgaWYgKCBsZWZ0LT5uZXh0ID09IHJpZ2h0ICYmIGxlZnQtPmhlaWdodCA8PSAwICkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIC8qIGxlZnRtb3N0IHN0dWIgdGVzdCAqLwotICAgICAgICAgIGlmICggcmlnaHQtPm5leHQgPT0gbGVmdCAmJiBsZWZ0LT5zdGFydCA9PSB5ICkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGlmICggZHJvcE91dENvbnRyb2wgPT0gMSApCi0gICAgICAgICAgICBlMSA9IGUyOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGUxID0gRkxPT1IoICggeDEgKyB4MiAtIDEgKSAvIDIgKyByYXMucHJlY2lzaW9uX2hhbGYgKTsKLQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6IC8qIG1vZGVzIDIsIDMsIDYsIDcgKi8KLSAgICAgICAgICByZXR1cm47ICAvKiBubyBkcm9wLW91dCBjb250cm9sICovCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICggZTEgPj0gMCApCi0gICAgewotICAgICAgQnl0ZSAgY29sb3I7Ci0KLQotICAgICAgaWYgKCB4MiAtIHgxID49IHJhcy5wcmVjaXNpb25faGFsZiApCi0gICAgICAgIGNvbG9yID0gcmFzLmdyYXlzWzJdOwotICAgICAgZWxzZQotICAgICAgICBjb2xvciA9IHJhcy5ncmF5c1sxXTsKLQotICAgICAgZTEgPSBUUlVOQyggZTEgKSAvIDI7Ci0gICAgICBpZiAoIGUxIDwgcmFzLnRhcmdldC5yb3dzICkKLSAgICAgIHsKLSAgICAgICAgcGl4ZWwgPSByYXMuZ1RhcmdldCAtIGUxICogcmFzLnRhcmdldC5waXRjaCArIHkgLyAyOwotICAgICAgICBpZiAoIHJhcy50YXJnZXQucGl0Y2ggPiAwICkKLSAgICAgICAgICBwaXhlbCArPSAoIHJhcy50YXJnZXQucm93cyAtIDEgKSAqIHJhcy50YXJnZXQucGl0Y2g7Ci0KLSAgICAgICAgaWYgKCBwaXhlbFswXSA9PSByYXMuZ3JheXNbMF0gKQotICAgICAgICAgIHBpeGVsWzBdID0gY29sb3I7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLQotI2VuZGlmIC8qIEZUX1JBU1RFUl9PUFRJT05fQU5USV9BTElBU0lORyAqLwotCi0KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgR2VuZXJpYyBTd2VlcCBEcmF3aW5nIHJvdXRpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTMwMDcsNyArMjcwMSw3IEBACiAKICAgICB3aGlsZSAoIFAgKQogICAgIHsKLSAgICAgIFAtPmNvdW50TCA9IChVU2hvcnQpKCBQLT5zdGFydCAtIG1pbl9ZICk7CisgICAgICBQLT5jb3VudEwgPSBQLT5zdGFydCAtIG1pbl9ZOwogICAgICAgUCA9IFAtPmxpbms7CiAgICAgfQogCkBAIC0zMjcwLDcgKzI5NjQsNyBAQAogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgc3RhdGljIEZUX0Vycm9yCiAgIFJlbmRlcl9HbHlwaCggUkFTX0FSRyApCiAgIHsKICAgICBGVF9FcnJvciAgZXJyb3I7CkBAIC0zMjkzLDEwICsyOTg3LDEyIEBACiAgICAgICAgIHJhcy5kcm9wT3V0Q29udHJvbCArPSAxOwogICAgIH0KIAotICAgIHJhcy5zZWNvbmRfcGFzcyA9IChGVF9CeXRlKSggISggcmFzLm91dGxpbmUuZmxhZ3MgJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT1VUTElORV9TSU5HTEVfUEFTUyApICk7CisgICAgcmFzLnNlY29uZF9wYXNzID0gKEJvb2wpKCAhKCByYXMub3V0bGluZS5mbGFncyAgICAgICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX09VVExJTkVfU0lOR0xFX1BBU1MgKSApOwogCiAgICAgLyogVmVydGljYWwgU3dlZXAgKi8KKyAgICBGVF9UUkFDRTcoKCAiVmVydGljYWwgcGFzcyAoZnRyYXN0ZXIpXG4iICkpOworCiAgICAgcmFzLlByb2NfU3dlZXBfSW5pdCA9IFZlcnRpY2FsX1N3ZWVwX0luaXQ7CiAgICAgcmFzLlByb2NfU3dlZXBfU3BhbiA9IFZlcnRpY2FsX1N3ZWVwX1NwYW47CiAgICAgcmFzLlByb2NfU3dlZXBfRHJvcCA9IFZlcnRpY2FsX1N3ZWVwX0Ryb3A7CkBAIC0zMzA0LDkgKzMwMDAsOSBAQAogCiAgICAgcmFzLmJhbmRfdG9wICAgICAgICAgICAgPSAwOwogICAgIHJhcy5iYW5kX3N0YWNrWzBdLnlfbWluID0gMDsKLSAgICByYXMuYmFuZF9zdGFja1swXS55X21heCA9IChzaG9ydCkoIHJhcy50YXJnZXQucm93cyAtIDEgKTsKKyAgICByYXMuYmFuZF9zdGFja1swXS55X21heCA9IChTaG9ydCkoIHJhcy50YXJnZXQucm93cyAtIDEgKTsKIAotICAgIHJhcy5iV2lkdGggID0gKHVuc2lnbmVkIHNob3J0KXJhcy50YXJnZXQud2lkdGg7CisgICAgcmFzLmJXaWR0aCAgPSAoVVNob3J0KXJhcy50YXJnZXQud2lkdGg7CiAgICAgcmFzLmJUYXJnZXQgPSAoQnl0ZSopcmFzLnRhcmdldC5idWZmZXI7CiAKICAgICBpZiAoICggZXJyb3IgPSBSZW5kZXJfU2luZ2xlX1Bhc3MoIFJBU19WQVJTIDAgKSApICE9IDAgKQpAQCAtMzMxNSw2ICszMDExLDggQEAKICAgICAvKiBIb3Jpem9udGFsIFN3ZWVwICovCiAgICAgaWYgKCByYXMuc2Vjb25kX3Bhc3MgJiYgcmFzLmRyb3BPdXRDb250cm9sICE9IDIgKQogICAgIHsKKyAgICAgIEZUX1RSQUNFNygoICJIb3Jpem9udGFsIHBhc3MgKGZ0cmFzdGVyKVxuIiApKTsKKwogICAgICAgcmFzLlByb2NfU3dlZXBfSW5pdCA9IEhvcml6b250YWxfU3dlZXBfSW5pdDsKICAgICAgIHJhcy5Qcm9jX1N3ZWVwX1NwYW4gPSBIb3Jpem9udGFsX1N3ZWVwX1NwYW47CiAgICAgICByYXMuUHJvY19Td2VlcF9Ecm9wID0gSG9yaXpvbnRhbF9Td2VlcF9Ecm9wOwpAQCAtMzMyMiw3ICszMDIwLDcgQEAKIAogICAgICAgcmFzLmJhbmRfdG9wICAgICAgICAgICAgPSAwOwogICAgICAgcmFzLmJhbmRfc3RhY2tbMF0ueV9taW4gPSAwOwotICAgICAgcmFzLmJhbmRfc3RhY2tbMF0ueV9tYXggPSAoc2hvcnQpKCByYXMudGFyZ2V0LndpZHRoIC0gMSApOworICAgICAgcmFzLmJhbmRfc3RhY2tbMF0ueV9tYXggPSAoU2hvcnQpKCByYXMudGFyZ2V0LndpZHRoIC0gMSApOwogCiAgICAgICBpZiAoICggZXJyb3IgPSBSZW5kZXJfU2luZ2xlX1Bhc3MoIFJBU19WQVJTIDEgKSApICE9IDAgKQogICAgICAgICByZXR1cm4gZXJyb3I7CkBAIC0zMzMyLDExOCArMzAzMCwxMCBAQAogICB9CiAKIAotI2lmZGVmIEZUX1JBU1RFUl9PUFRJT05fQU5USV9BTElBU0lORwotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJlbmRlcl9HcmF5X0dseXBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJlbmRlciBhIGdseXBoIHdpdGggZ3JheXNjYWxpbmcuICBTdWItYmFuZGluZyBpZiBuZWVkZWQuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCi0gIFJlbmRlcl9HcmF5X0dseXBoKCBSQVNfQVJHICkKLSAgewotICAgIExvbmcgICAgICBwaXhlbF93aWR0aDsKLSAgICBGVF9FcnJvciAgZXJyb3I7Ci0KLQotICAgIFNldF9IaWdoX1ByZWNpc2lvbiggUkFTX1ZBUlMgcmFzLm91dGxpbmUuZmxhZ3MgJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT1VUTElORV9ISUdIX1BSRUNJU0lPTiApOwotICAgIHJhcy5zY2FsZV9zaGlmdCA9IHJhcy5wcmVjaXNpb25fc2hpZnQgKyAxOwotCi0gICAgaWYgKCByYXMub3V0bGluZS5mbGFncyAmIEZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTICkKLSAgICAgIHJhcy5kcm9wT3V0Q29udHJvbCA9IDI7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmICggcmFzLm91dGxpbmUuZmxhZ3MgJiBGVF9PVVRMSU5FX1NNQVJUX0RST1BPVVRTICkKLSAgICAgICAgcmFzLmRyb3BPdXRDb250cm9sID0gNDsKLSAgICAgIGVsc2UKLSAgICAgICAgcmFzLmRyb3BPdXRDb250cm9sID0gMDsKLQotICAgICAgaWYgKCAhKCByYXMub3V0bGluZS5mbGFncyAmIEZUX09VVExJTkVfSU5DTFVERV9TVFVCUyApICkKLSAgICAgICAgcmFzLmRyb3BPdXRDb250cm9sICs9IDE7Ci0gICAgfQotCi0gICAgcmFzLnNlY29uZF9wYXNzID0gISggcmFzLm91dGxpbmUuZmxhZ3MgJiBGVF9PVVRMSU5FX1NJTkdMRV9QQVNTICk7Ci0KLSAgICAvKiBWZXJ0aWNhbCBTd2VlcCAqLwotCi0gICAgcmFzLmJhbmRfdG9wICAgICAgICAgICAgPSAwOwotICAgIHJhcy5iYW5kX3N0YWNrWzBdLnlfbWluID0gMDsKLSAgICByYXMuYmFuZF9zdGFja1swXS55X21heCA9IDIgKiByYXMudGFyZ2V0LnJvd3MgLSAxOwotCi0gICAgcmFzLmJXaWR0aCAgPSByYXMuZ3JheV93aWR0aDsKLSAgICBwaXhlbF93aWR0aCA9IDIgKiAoICggcmFzLnRhcmdldC53aWR0aCArIDMgKSA+PiAyICk7Ci0KLSAgICBpZiAoIHJhcy5iV2lkdGggPiBwaXhlbF93aWR0aCApCi0gICAgICByYXMuYldpZHRoID0gcGl4ZWxfd2lkdGg7Ci0KLSAgICByYXMuYldpZHRoICA9IHJhcy5iV2lkdGggKiA4OwotICAgIHJhcy5iVGFyZ2V0ID0gKEJ5dGUqKXJhcy5ncmF5X2xpbmVzOwotICAgIHJhcy5nVGFyZ2V0ID0gKEJ5dGUqKXJhcy50YXJnZXQuYnVmZmVyOwotCi0gICAgcmFzLlByb2NfU3dlZXBfSW5pdCA9IFZlcnRpY2FsX0dyYXlfU3dlZXBfSW5pdDsKLSAgICByYXMuUHJvY19Td2VlcF9TcGFuID0gVmVydGljYWxfU3dlZXBfU3BhbjsKLSAgICByYXMuUHJvY19Td2VlcF9Ecm9wID0gVmVydGljYWxfU3dlZXBfRHJvcDsKLSAgICByYXMuUHJvY19Td2VlcF9TdGVwID0gVmVydGljYWxfR3JheV9Td2VlcF9TdGVwOwotCi0gICAgZXJyb3IgPSBSZW5kZXJfU2luZ2xlX1Bhc3MoIFJBU19WQVJTIDAgKTsKLSAgICBpZiAoIGVycm9yICkKLSAgICAgIHJldHVybiBlcnJvcjsKLQotICAgIC8qIEhvcml6b250YWwgU3dlZXAgKi8KLSAgICBpZiAoIHJhcy5zZWNvbmRfcGFzcyAmJiByYXMuZHJvcE91dENvbnRyb2wgIT0gMiApCi0gICAgewotICAgICAgcmFzLlByb2NfU3dlZXBfSW5pdCA9IEhvcml6b250YWxfU3dlZXBfSW5pdDsKLSAgICAgIHJhcy5Qcm9jX1N3ZWVwX1NwYW4gPSBIb3Jpem9udGFsX0dyYXlfU3dlZXBfU3BhbjsKLSAgICAgIHJhcy5Qcm9jX1N3ZWVwX0Ryb3AgPSBIb3Jpem9udGFsX0dyYXlfU3dlZXBfRHJvcDsKLSAgICAgIHJhcy5Qcm9jX1N3ZWVwX1N0ZXAgPSBIb3Jpem9udGFsX1N3ZWVwX1N0ZXA7Ci0KLSAgICAgIHJhcy5iYW5kX3RvcCAgICAgICAgICAgID0gMDsKLSAgICAgIHJhcy5iYW5kX3N0YWNrWzBdLnlfbWluID0gMDsKLSAgICAgIHJhcy5iYW5kX3N0YWNrWzBdLnlfbWF4ID0gcmFzLnRhcmdldC53aWR0aCAqIDIgLSAxOwotCi0gICAgICBlcnJvciA9IFJlbmRlcl9TaW5nbGVfUGFzcyggUkFTX1ZBUlMgMSApOwotICAgICAgaWYgKCBlcnJvciApCi0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gUmFzdGVyX0Vycl9Ob25lOwotICB9Ci0KLSNlbHNlIC8qICFGVF9SQVNURVJfT1BUSU9OX0FOVElfQUxJQVNJTkcgKi8KLQotICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKLSAgUmVuZGVyX0dyYXlfR2x5cGgoIFJBU19BUkcgKQotICB7Ci0gICAgRlRfVU5VU0VEX1JBU1RFUjsKLQotICAgIHJldHVybiBGVF9USFJPVyggVW5zdXBwb3J0ZWQgKTsKLSAgfQotCi0jZW5kaWYgLyogIUZUX1JBU1RFUl9PUFRJT05fQU5USV9BTElBU0lORyAqLwotCi0KICAgc3RhdGljIHZvaWQKICAgZnRfYmxhY2tfaW5pdCggYmxhY2tfUFJhc3RlciAgcmFzdGVyICkKICAgewotI2lmZGVmIEZUX1JBU1RFUl9PUFRJT05fQU5USV9BTElBU0lORwotICAgIEZUX1VJbnQgIG47Ci0KLQotICAgIC8qIHNldCBkZWZhdWx0IDUtbGV2ZWxzIGdyYXkgcGFsZXR0ZSAqLwotICAgIGZvciAoIG4gPSAwOyBuIDwgNTsgbisrICkKLSAgICAgIHJhc3Rlci0+Z3JheXNbbl0gPSBuICogMjU1IC8gNDsKLQotICAgIHJhc3Rlci0+Z3JheV93aWR0aCA9IFJBU1RFUl9HUkFZX0xJTkVTIC8gMjsKLSNlbHNlCiAgICAgRlRfVU5VU0VEKCByYXN0ZXIgKTsKLSNlbmRpZgogICB9CiAKIApAQCAtMzUxOCw1NSArMzEwOCwyMyBAQAogICBzdGF0aWMgdm9pZAogICBmdF9ibGFja19yZXNldCggYmxhY2tfUFJhc3RlciAgcmFzdGVyLAogICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgICAgcG9vbF9iYXNlLAotICAgICAgICAgICAgICAgICAgbG9uZyAgICAgICAgICAgcG9vbF9zaXplICkKKyAgICAgICAgICAgICAgICAgIExvbmcgICAgICAgICAgIHBvb2xfc2l6ZSApCiAgIHsKLSAgICBpZiAoIHJhc3RlciApCi0gICAgewotICAgICAgaWYgKCBwb29sX2Jhc2UgJiYgcG9vbF9zaXplID49IChsb25nKXNpemVvZiAoIGJsYWNrX1RXb3JrZXIgKSArIDIwNDggKQotICAgICAgewotICAgICAgICBibGFja19QV29ya2VyICB3b3JrZXIgPSAoYmxhY2tfUFdvcmtlcilwb29sX2Jhc2U7Ci0KLQotICAgICAgICByYXN0ZXItPmJ1ZmZlciAgICAgID0gcG9vbF9iYXNlICsgKCAoIHNpemVvZiAoICp3b3JrZXIgKSArIDcgKSAmIH43ICk7Ci0gICAgICAgIHJhc3Rlci0+YnVmZmVyX3NpemUgPSAobG9uZykoIHBvb2xfYmFzZSArIHBvb2xfc2l6ZSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKXJhc3Rlci0+YnVmZmVyICk7Ci0gICAgICAgIHJhc3Rlci0+d29ya2VyICAgICAgPSB3b3JrZXI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHJhc3Rlci0+YnVmZmVyICAgICAgPSBOVUxMOwotICAgICAgICByYXN0ZXItPmJ1ZmZlcl9zaXplID0gMDsKLSAgICAgICAgcmFzdGVyLT53b3JrZXIgICAgICA9IE5VTEw7Ci0gICAgICB9Ci0gICAgfQorICAgIEZUX1VOVVNFRCggcmFzdGVyICk7CisgICAgRlRfVU5VU0VEKCBwb29sX2Jhc2UgKTsKKyAgICBGVF9VTlVTRUQoIHBvb2xfc2l6ZSApOwogICB9CiAKIAogICBzdGF0aWMgaW50CiAgIGZ0X2JsYWNrX3NldF9tb2RlKCBibGFja19QUmFzdGVyICByYXN0ZXIsCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgVUxvbmcgICAgICAgICAgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgIHBhbGV0dGUgKQogICB7Ci0jaWZkZWYgRlRfUkFTVEVSX09QVElPTl9BTlRJX0FMSUFTSU5HCi0KLSAgICBpZiAoIG1vZGUgPT0gRlRfTUFLRV9UQUcoICdwJywgJ2EnLCAnbCcsICc1JyApICkKLSAgICB7Ci0gICAgICAvKiBzZXQgNS1sZXZlbHMgZ3JheSBwYWxldHRlICovCi0gICAgICByYXN0ZXItPmdyYXlzWzBdID0gcGFsZXR0ZVswXTsKLSAgICAgIHJhc3Rlci0+Z3JheXNbMV0gPSBwYWxldHRlWzFdOwotICAgICAgcmFzdGVyLT5ncmF5c1syXSA9IHBhbGV0dGVbMl07Ci0gICAgICByYXN0ZXItPmdyYXlzWzNdID0gcGFsZXR0ZVszXTsKLSAgICAgIHJhc3Rlci0+Z3JheXNbNF0gPSBwYWxldHRlWzRdOwotICAgIH0KLQotI2Vsc2UKLQogICAgIEZUX1VOVVNFRCggcmFzdGVyICk7CiAgICAgRlRfVU5VU0VEKCBtb2RlICk7CiAgICAgRlRfVU5VU0VEKCBwYWxldHRlICk7CiAKLSNlbmRpZgotCiAgICAgcmV0dXJuIDA7CiAgIH0KIApAQCAtMzU3NywxMCArMzEzNSwxMyBAQAogICB7CiAgICAgY29uc3QgRlRfT3V0bGluZSogIG91dGxpbmUgICAgPSAoY29uc3QgRlRfT3V0bGluZSopcGFyYW1zLT5zb3VyY2U7CiAgICAgY29uc3QgRlRfQml0bWFwKiAgIHRhcmdldF9tYXAgPSBwYXJhbXMtPnRhcmdldDsKLSAgICBibGFja19QV29ya2VyICAgICAgd29ya2VyOworCisgICAgYmxhY2tfVFdvcmtlciAgd29ya2VyWzFdOworCisgICAgTG9uZyAgYnVmZmVyW0ZUX01BWCggRlRfUkVOREVSX1BPT0xfU0laRSwgMjA0OCApIC8gc2l6ZW9mICggTG9uZyApXTsKIAogCi0gICAgaWYgKCAhcmFzdGVyIHx8ICFyYXN0ZXItPmJ1ZmZlciB8fCAhcmFzdGVyLT5idWZmZXJfc2l6ZSApCisgICAgaWYgKCAhcmFzdGVyICkKICAgICAgIHJldHVybiBGVF9USFJPVyggTm90X0luaSApOwogCiAgICAgaWYgKCAhb3V0bGluZSApCkBAIC0zNTk3LDEyICszMTU4LDEzIEBACiAgICAgICAgICAgIG91dGxpbmUtPmNvbnRvdXJzW291dGxpbmUtPm5fY29udG91cnMgLSAxXSArIDEgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkICk7CiAKLSAgICB3b3JrZXIgPSByYXN0ZXItPndvcmtlcjsKLQogICAgIC8qIHRoaXMgdmVyc2lvbiBvZiB0aGUgcmFzdGVyIGRvZXMgbm90IHN1cHBvcnQgZGlyZWN0IHJlbmRlcmluZywgc29ycnkgKi8KICAgICBpZiAoIHBhcmFtcy0+ZmxhZ3MgJiBGVF9SQVNURVJfRkxBR19ESVJFQ1QgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbnN1cHBvcnRlZCApOwogCisgICAgaWYgKCBwYXJhbXMtPmZsYWdzICYgRlRfUkFTVEVSX0ZMQUdfQUEgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbnN1cHBvcnRlZCApOworCiAgICAgaWYgKCAhdGFyZ2V0X21hcCApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWQgKTsKIApAQCAtMzYxNiwzMCArMzE3OCwyMyBAQAogICAgIHJhcy5vdXRsaW5lID0gKm91dGxpbmU7CiAgICAgcmFzLnRhcmdldCAgPSAqdGFyZ2V0X21hcDsKIAotICAgIHdvcmtlci0+YnVmZiAgICAgICA9IChQTG9uZykgcmFzdGVyLT5idWZmZXI7Ci0gICAgd29ya2VyLT5zaXplQnVmZiAgID0gd29ya2VyLT5idWZmICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhc3Rlci0+YnVmZmVyX3NpemUgLyBzaXplb2YgKCBMb25nICk7Ci0jaWZkZWYgRlRfUkFTVEVSX09QVElPTl9BTlRJX0FMSUFTSU5HCi0gICAgd29ya2VyLT5ncmF5cyAgICAgID0gcmFzdGVyLT5ncmF5czsKLSAgICB3b3JrZXItPmdyYXlfd2lkdGggPSByYXN0ZXItPmdyYXlfd2lkdGg7CisgICAgd29ya2VyLT5idWZmICAgICA9IGJ1ZmZlcjsKKyAgICB3b3JrZXItPnNpemVCdWZmID0gKCZidWZmZXIpWzFdOyAvKiBQb2ludHMgdG8gcmlnaHQgYWZ0ZXIgYnVmZmVyLiAqLwogCi0gICAgRlRfTUVNX1pFUk8oIHdvcmtlci0+Z3JheV9saW5lcywgd29ya2VyLT5ncmF5X3dpZHRoICogMiApOwotI2VuZGlmCi0KLSAgICByZXR1cm4gKCBwYXJhbXMtPmZsYWdzICYgRlRfUkFTVEVSX0ZMQUdfQUEgKQotICAgICAgICAgICA/IFJlbmRlcl9HcmF5X0dseXBoKCBSQVNfVkFSICkKLSAgICAgICAgICAgOiBSZW5kZXJfR2x5cGgoIFJBU19WQVIgKTsKKyAgICByZXR1cm4gUmVuZGVyX0dseXBoKCBSQVNfVkFSICk7CiAgIH0KIAogCi0gIEZUX0RFRklORV9SQVNURVJfRlVOQ1MoIGZ0X3N0YW5kYXJkX3Jhc3RlciwKKyAgRlRfREVGSU5FX1JBU1RFUl9GVU5DUygKKyAgICBmdF9zdGFuZGFyZF9yYXN0ZXIsCisKICAgICBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSwKKwogICAgIChGVF9SYXN0ZXJfTmV3X0Z1bmMpICAgICBmdF9ibGFja19uZXcsCiAgICAgKEZUX1Jhc3Rlcl9SZXNldF9GdW5jKSAgIGZ0X2JsYWNrX3Jlc2V0LAogICAgIChGVF9SYXN0ZXJfU2V0X01vZGVfRnVuYylmdF9ibGFja19zZXRfbW9kZSwKICAgICAoRlRfUmFzdGVyX1JlbmRlcl9GdW5jKSAgZnRfYmxhY2tfcmVuZGVyLAotICAgIChGVF9SYXN0ZXJfRG9uZV9GdW5jKSAgICBmdF9ibGFja19kb25lCi0gICkKKyAgICAoRlRfUmFzdGVyX0RvbmVfRnVuYykgICAgZnRfYmxhY2tfZG9uZSApCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL2Z0cmFzdGVyLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL2Z0cmFzdGVyLmgKaW5kZXggODBmZTQ2ZC4uYTI3MGQ0OCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9mdHJhc3Rlci5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggcmFzdGVyaXplciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9mdHJlbmQxLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL2Z0cmVuZDEuYwppbmRleCBhYTdmNmQ1Li5mMzE0MzkyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL2Z0cmVuZDEuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL2Z0cmVuZDEuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggcmFzdGVyaXplciBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAzLCAyMDA1LCAyMDA2LCAyMDExLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgIHsKICAgICBGVF9FcnJvciAgICAgZXJyb3I7CiAgICAgRlRfT3V0bGluZSogIG91dGxpbmU7Ci0gICAgRlRfQkJveCAgICAgIGNib3g7CisgICAgRlRfQkJveCAgICAgIGNib3gsIGNib3gwOwogICAgIEZUX1VJbnQgICAgICB3aWR0aCwgaGVpZ2h0LCBwaXRjaDsKICAgICBGVF9CaXRtYXAqICAgYml0bWFwOwogICAgIEZUX01lbW9yeSAgICBtZW1vcnk7CkBAIC0xMjAsMzggKzEyMCwxMSBAQAogICAgIH0KIAogICAgIC8qIGNoZWNrIHJlbmRlcmluZyBtb2RlICovCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCiAgICAgaWYgKCBtb2RlICE9IEZUX1JFTkRFUl9NT0RFX01PTk8gKQogICAgIHsKICAgICAgIC8qIHJhc3RlcjEgaXMgb25seSBjYXBhYmxlIG9mIHByb2R1Y2luZyBtb25vY2hyb21lIGJpdG1hcHMgKi8KLSAgICAgIGlmICggcmVuZGVyLT5jbGF6eiA9PSAmZnRfcmFzdGVyMV9yZW5kZXJlcl9jbGFzcyApCi0gICAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X1JlbmRlcl9HbHlwaCApOworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfUmVuZGVyX0dseXBoICk7CiAgICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvKiByYXN0ZXI1IGlzIG9ubHkgY2FwYWJsZSBvZiBwcm9kdWNpbmcgNS1ncmF5LWxldmVscyBiaXRtYXBzICovCi0gICAgICBpZiAoIHJlbmRlci0+Y2xhenogPT0gJmZ0X3Jhc3RlcjVfcmVuZGVyZXJfY2xhc3MgKQotICAgICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9SZW5kZXJfR2x5cGggKTsKLSAgICB9Ci0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotICAgIC8qIFdoZW4gUElDIGlzIGVuYWJsZWQsIHdlIGNhbm5vdCBnZXQgdG8gdGhlIGNsYXNzIG9iamVjdCAgICAgICovCi0gICAgLyogc28gaW5zdGVhZCB3ZSBjaGVjayB0aGUgZmluYWwgY2hhcmFjdGVyIGluIHRoZSBjbGFzcyBuYW1lICAgKi8KLSAgICAvKiAoInJhc3RlcjUiIG9yICJyYXN0ZXIxIikuIFllcyB0aGlzIGlzIGEgaGFjay4gICAgICAgICAgICAgICAqLwotICAgIC8qIFRoZSAiY29ycmVjdCIgdGhpbmcgdG8gZG8gaXMgaGF2ZSBkaWZmZXJlbnQgcmVuZGVyIGZ1bmN0aW9uICovCi0gICAgLyogZm9yIGVhY2ggb2YgdGhlIGNsYXNzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBpZiAoIG1vZGUgIT0gRlRfUkVOREVSX01PREVfTU9OTyApCi0gICAgewotICAgICAgLyogcmFzdGVyMSBpcyBvbmx5IGNhcGFibGUgb2YgcHJvZHVjaW5nIG1vbm9jaHJvbWUgYml0bWFwcyAqLwotICAgICAgaWYgKCByZW5kZXItPmNsYXp6LT5yb290Lm1vZHVsZV9uYW1lWzZdID09ICcxJyApCi0gICAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X1JlbmRlcl9HbHlwaCApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLyogcmFzdGVyNSBpcyBvbmx5IGNhcGFibGUgb2YgcHJvZHVjaW5nIDUtZ3JheS1sZXZlbHMgYml0bWFwcyAqLwotICAgICAgaWYgKCByZW5kZXItPmNsYXp6LT5yb290Lm1vZHVsZV9uYW1lWzZdID09ICc1JyApCi0gICAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X1JlbmRlcl9HbHlwaCApOwotICAgIH0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCiAgICAgb3V0bGluZSA9ICZzbG90LT5vdXRsaW5lOwogCkBAIC0xNjAsMTQgKzEzMywxNCBAQAogICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsIG9yaWdpbi0+eCwgb3JpZ2luLT55ICk7CiAKICAgICAvKiBjb21wdXRlIHRoZSBjb250cm9sIGJveCwgYW5kIGdyaWQgZml0IGl0ICovCi0gICAgRlRfT3V0bGluZV9HZXRfQ0JveCggb3V0bGluZSwgJmNib3ggKTsKKyAgICBGVF9PdXRsaW5lX0dldF9DQm94KCBvdXRsaW5lLCAmY2JveDAgKTsKIAogICAgIC8qIHVuZG9jdW1lbnRlZCBidXQgY29uZmlybWVkOiBiYm94IHZhbHVlcyBnZXQgcm91bmRlZCAqLwogI2lmIDEKLSAgICBjYm94LnhNaW4gPSBGVF9QSVhfUk9VTkQoIGNib3gueE1pbiApOwotICAgIGNib3gueU1pbiA9IEZUX1BJWF9ST1VORCggY2JveC55TWluICk7Ci0gICAgY2JveC54TWF4ID0gRlRfUElYX1JPVU5EKCBjYm94LnhNYXggKTsKLSAgICBjYm94LnlNYXggPSBGVF9QSVhfUk9VTkQoIGNib3gueU1heCApOworICAgIGNib3gueE1pbiA9IEZUX1BJWF9ST1VORCggY2JveDAueE1pbiApOworICAgIGNib3gueU1pbiA9IEZUX1BJWF9ST1VORCggY2JveDAueU1pbiApOworICAgIGNib3gueE1heCA9IEZUX1BJWF9ST1VORCggY2JveDAueE1heCApOworICAgIGNib3gueU1heCA9IEZUX1BJWF9ST1VORCggY2JveDAueU1heCApOwogI2Vsc2UKICAgICBjYm94LnhNaW4gPSBGVF9QSVhfRkxPT1IoIGNib3gueE1pbiApOwogICAgIGNib3gueU1pbiA9IEZUX1BJWF9GTE9PUiggY2JveC55TWluICk7CkBAIC0xNzUsOCArMTQ4LDI4IEBACiAgICAgY2JveC55TWF4ID0gRlRfUElYX0NFSUwoIGNib3gueU1heCApOwogI2VuZGlmCiAKKyAgICAvKiBJZiBlaXRoZXIgYHdpZHRoJyBvciBgaGVpZ2h0JyByb3VuZCB0byAwLCB0cnkgICAgKi8KKyAgICAvKiBleHBsaWNpdGx5IHJvdW5kaW5nIHVwL2Rvd24uICBJbiB0aGUgY2FzZSBvZiAgICAgKi8KKyAgICAvKiBnbHlwaHMgY29udGFpbmluZyBvbmx5IG9uZSB2ZXJ5IG5hcnJvdyBmZWF0dXJlLCAgKi8KKyAgICAvKiB0aGlzIGdpdmVzIHRoZSBkcm9wLW91dCBjb21wZW5zYXRpb24gaW4gdGhlIHNjYW4gKi8KKyAgICAvKiBjb252ZXJzaW9uIGNvZGUgYSBjaGFuY2UgdG8gZG8gaXRzIHN0dWZmLiAgICAgICAgKi8KICAgICB3aWR0aCAgPSAoRlRfVUludCkoICggY2JveC54TWF4IC0gY2JveC54TWluICkgPj4gNiApOworICAgIGlmICggd2lkdGggPT0gMCApCisgICAgeworICAgICAgY2JveC54TWluID0gRlRfUElYX0ZMT09SKCBjYm94MC54TWluICk7CisgICAgICBjYm94LnhNYXggPSBGVF9QSVhfQ0VJTCggY2JveDAueE1heCApOworCisgICAgICB3aWR0aCA9IChGVF9VSW50KSggKCBjYm94LnhNYXggLSBjYm94LnhNaW4gKSA+PiA2ICk7CisgICAgfQorCiAgICAgaGVpZ2h0ID0gKEZUX1VJbnQpKCAoIGNib3gueU1heCAtIGNib3gueU1pbiApID4+IDYgKTsKKyAgICBpZiAoIGhlaWdodCA9PSAwICkKKyAgICB7CisgICAgICBjYm94LnlNaW4gPSBGVF9QSVhfRkxPT1IoIGNib3gwLnlNaW4gKTsKKyAgICAgIGNib3gueU1heCA9IEZUX1BJWF9DRUlMKCBjYm94MC55TWF4ICk7CisKKyAgICAgIGhlaWdodCA9IChGVF9VSW50KSggKCBjYm94LnlNYXggLSBjYm94LnlNaW4gKSA+PiA2ICk7CisgICAgfQogCiAgICAgaWYgKCB3aWR0aCA+IEZUX1VTSE9SVF9NQVggfHwgaGVpZ2h0ID4gRlRfVVNIT1JUX01BWCApCiAgICAgewpAQCAtMTk0LDIzICsxODcsMTIgQEAKICAgICAgIHNsb3QtPmludGVybmFsLT5mbGFncyAmPSB+RlRfR0xZUEhfT1dOX0JJVE1BUDsKICAgICB9CiAKLSAgICAvKiBhbGxvY2F0ZSBuZXcgb25lLCBkZXBlbmRzIG9uIHBpeGVsIGZvcm1hdCAqLwotICAgIGlmICggISggbW9kZSAmIEZUX1JFTkRFUl9NT0RFX01PTk8gKSApCi0gICAgewotICAgICAgLyogd2UgcGFkIHRvIDMyIGJpdHMsIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggRlQgMS54ICovCi0gICAgICBwaXRjaCAgICAgICAgICAgICAgPSBGVF9QQURfQ0VJTCggd2lkdGgsIDQgKTsKLSAgICAgIGJpdG1hcC0+cGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfR1JBWTsKLSAgICAgIGJpdG1hcC0+bnVtX2dyYXlzICA9IDI1NjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHBpdGNoICAgICAgICAgICAgICA9ICggKCB3aWR0aCArIDE1ICkgPj4gNCApIDw8IDE7Ci0gICAgICBiaXRtYXAtPnBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX01PTk87Ci0gICAgfQorICAgIHBpdGNoICAgICAgICAgICAgICA9ICggKCB3aWR0aCArIDE1ICkgPj4gNCApIDw8IDE7CisgICAgYml0bWFwLT5waXhlbF9tb2RlID0gRlRfUElYRUxfTU9ERV9NT05POwogCiAgICAgYml0bWFwLT53aWR0aCA9IHdpZHRoOwogICAgIGJpdG1hcC0+cm93cyAgPSBoZWlnaHQ7Ci0gICAgYml0bWFwLT5waXRjaCA9IHBpdGNoOworICAgIGJpdG1hcC0+cGl0Y2ggPSAoaW50KXBpdGNoOwogCiAgICAgaWYgKCBGVF9BTExPQ19NVUxUKCBiaXRtYXAtPmJ1ZmZlciwgcGl0Y2gsIGhlaWdodCApICkKICAgICAgIGdvdG8gRXhpdDsKQEAgLTIyNSw5ICsyMDcsNiBAQAogICAgIHBhcmFtcy5zb3VyY2UgPSBvdXRsaW5lOwogICAgIHBhcmFtcy5mbGFncyAgPSAwOwogCi0gICAgaWYgKCBiaXRtYXAtPnBpeGVsX21vZGUgPT0gRlRfUElYRUxfTU9ERV9HUkFZICkKLSAgICAgIHBhcmFtcy5mbGFncyB8PSBGVF9SQVNURVJfRkxBR19BQTsKLQogICAgIC8qIHJlbmRlciBvdXRsaW5lIGludG8gdGhlIGJpdG1hcCAqLwogICAgIGVycm9yID0gcmVuZGVyLT5yYXN0ZXJfcmVuZGVyKCByZW5kZXItPnJhc3RlciwgJnBhcmFtcyApOwogCkBAIC0yNzIsMzUgKzI1MSw0IEBACiAgICkKIAogCi0gIC8qIFRoaXMgcmVuZGVyZXIgaXMgX05PVF8gcGFydCBvZiB0aGUgZGVmYXVsdCBtb2R1bGVzOyB5b3Ugd2lsbCBuZWVkICovCi0gIC8qIHRvIHJlZ2lzdGVyIGl0IGJ5IGhhbmQgaW4geW91ciBhcHBsaWNhdGlvbi4gIEl0IHNob3VsZCBvbmx5IGJlICAgICovCi0gIC8qIHVzZWQgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggRlQgMS54IGFueXdheS4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0RFRklORV9SRU5ERVJFUiggZnRfcmFzdGVyNV9yZW5kZXJlcl9jbGFzcywKLQotICAgICAgRlRfTU9EVUxFX1JFTkRFUkVSLAotICAgICAgc2l6ZW9mICggRlRfUmVuZGVyZXJSZWMgKSwKLQotICAgICAgInJhc3RlcjUiLAotICAgICAgMHgxMDAwMEwsCi0gICAgICAweDIwMDAwTCwKLQotICAgICAgMCwgICAgLyogbW9kdWxlIHNwZWNpZmljIGludGVyZmFjZSAqLwotCi0gICAgICAoRlRfTW9kdWxlX0NvbnN0cnVjdG9yKWZ0X3Jhc3RlcjFfaW5pdCwKLSAgICAgIChGVF9Nb2R1bGVfRGVzdHJ1Y3RvcikgMCwKLSAgICAgIChGVF9Nb2R1bGVfUmVxdWVzdGVyKSAgMAotICAgICwKLQotICAgIEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FLAotCi0gICAgKEZUX1JlbmRlcmVyX1JlbmRlckZ1bmMpICAgZnRfcmFzdGVyMV9yZW5kZXIsCi0gICAgKEZUX1JlbmRlcmVyX1RyYW5zZm9ybUZ1bmMpZnRfcmFzdGVyMV90cmFuc2Zvcm0sCi0gICAgKEZUX1JlbmRlcmVyX0dldENCb3hGdW5jKSAgZnRfcmFzdGVyMV9nZXRfY2JveCwKLSAgICAoRlRfUmVuZGVyZXJfU2V0TW9kZUZ1bmMpICBmdF9yYXN0ZXIxX3NldF9tb2RlLAotCi0gICAgKEZUX1Jhc3Rlcl9GdW5jcyopICAgICZGVF9TVEFOREFSRF9SQVNURVJfR0VUCi0gICkKLQotCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9yYXN0ZXIvZnRyZW5kMS5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9mdHJlbmQxLmgKaW5kZXggNGNmMTI4Ni4uZWRjNWQxMyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9mdHJlbmQxLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9mdHJlbmQxLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGdseXBoIHJhc3Rlcml6ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI5LDEyICsyOSw2IEBACiAKICAgRlRfREVDTEFSRV9SRU5ERVJFUiggZnRfcmFzdGVyMV9yZW5kZXJlcl9jbGFzcyApCiAKLSAgLyogdGhpcyByZW5kZXJlciBpcyBfTk9UXyBwYXJ0IG9mIHRoZSBkZWZhdWx0IG1vZHVsZXMsIHlvdSdsbCBuZWVkICovCi0gIC8qIHRvIHJlZ2lzdGVyIGl0IGJ5IGhhbmQgaW4geW91ciBhcHBsaWNhdGlvbi4gIEl0IHNob3VsZCBvbmx5IGJlICAqLwotICAvKiB1c2VkIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSB3aXRoIEZUIDEueCBhbnl3YXkuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0RFQ0xBUkVfUkVOREVSRVIoIGZ0X3Jhc3RlcjVfcmVuZGVyZXJfY2xhc3MgKQotCiAKIEZUX0VORF9IRUFERVIKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9yYXN0ZXIuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9yYXN0ZXIvcmFzdGVyLmMKaW5kZXggMTIwMmExMS4uMjFiYjE2ZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9yYXN0ZXIuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL3Jhc3Rlci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIG1vbm9jaHJvbWUgcmFzdGVyZXIgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDEgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL3Jhc3RlcnJzLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL3Jhc3RlcnJzLmgKaW5kZXggYWI4NWMwMC4uZTdmMDBiYyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9yYXN0ZXJycy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9yYXN0ZXIvcmFzdGVycnMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBtb25vY2hyb21lIHJlbmRlcmVyIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMSwgMjAxMiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9yYXN0cGljLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL3Jhc3RwaWMuYwppbmRleCA1ZTlmN2NjLi43N2U3ZWMzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL3Jhc3RwaWMuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL3Jhc3RwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcmFzdGVyIG1vZHVsZS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNTksOCArNTksOSBAQAogICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OwogCiAKLSAgICAvKiBzaW5jZSB0aGlzIGZ1bmN0aW9uIGFsc28gc2VydmVzIHJhc3RlcjUgcmVuZGVyZXIsICovCi0gICAgLyogaXQgaW1wbGVtZW50cyByZWZlcmVuY2UgY291bnRpbmcgICAgICAgICAgICAgICAgICAqLworICAgIC8qIFhYWDogc2luY2UgdGhpcyBmdW5jdGlvbiBhbHNvIHNlcnZlZCB0aGUgbm8gbG9uZ2VyIGF2YWlsYWJsZSAgKi8KKyAgICAvKiAgICAgIHJhc3RlcjUgcmVuZGVyZXIgaXQgdXNlcyByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGNvdWxkICovCisgICAgLyogICAgICBiZSByZW1vdmVkIG5vdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmICggcGljX2NvbnRhaW5lci0+cmFzdGVyICkKICAgICB7CiAgICAgICAoKFJhc3RlclBJQyopcGljX2NvbnRhaW5lci0+cmFzdGVyKS0+cmVmX2NvdW50Kys7CkBAIC04MiwyMSArODMsNiBAQAogICAgIHJldHVybiBlcnJvcjsKICAgfQogCi0KLSAgLyogcmUtcm91dGUgdGhlc2UgaW5pdCBhbmQgZnJlZSBmdW5jdGlvbnMgdG8gdGhlIGFib3ZlIGZ1bmN0aW9ucyAqLwotICBGVF9FcnJvcgotICBmdF9yYXN0ZXI1X3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKLSAgewotICAgIHJldHVybiBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KCBsaWJyYXJ5ICk7Ci0gIH0KLQotCi0gIHZvaWQKLSAgZnRfcmFzdGVyNV9yZW5kZXJlcl9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApCi0gIHsKLSAgICBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzX3BpY19mcmVlKCBsaWJyYXJ5ICk7Ci0gIH0KLQogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCiAKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Jhc3Rlci9yYXN0cGljLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL3Jhc3RwaWMuaAppbmRleCBlMGRkYmE2Li40MDg5OTZhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL3Jhc3RwaWMuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvcmFzdGVyL3Jhc3RwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcmFzdGVyIG1vZHVsZS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjAsMTEgKzIwLDExIEBACiAjZGVmaW5lIF9fUkFTVFBJQ19IX18KIAogCi1GVF9CRUdJTl9IRUFERVIKLQogI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKIAogCitGVF9CRUdJTl9IRUFERVIKKwogI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwogCiAjZGVmaW5lIEZUX1NUQU5EQVJEX1JBU1RFUl9HRVQgIGZ0X3N0YW5kYXJkX3Jhc3RlcgpAQCAtNDgsMTUgKzQ4LDkgQEAKICAgdm9pZAogICBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CiAKLSAgdm9pZAotICBmdF9yYXN0ZXI1X3JlbmRlcmVyX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7Ci0KICAgRlRfRXJyb3IKICAgZnRfcmFzdGVyMV9yZW5kZXJlcl9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApOwogCi0gIEZUX0Vycm9yCi0gIGZ0X3Jhc3RlcjVfcmVuZGVyZXJfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKLQogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCiAKICAvKiAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvSmFtZmlsZSBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L0phbWZpbGUKaW5kZXggY2IyMGIxYi4uY2M5OGQxMCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvSmFtZmlsZQorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy9zZm50IEphbWZpbGUKICMKLSMgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDQsIDIwMDUgYnkKKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCkBAIC0xNiw3ICsxNiwxOCBAQAogCiAgIGlmICQoRlQyX01VTFRJKQogICB7Ci0gICAgX3NvdXJjZXMgPSBzZm9ianMgc2Zkcml2ZXIgdHRjbWFwIHR0bXR4IHR0cG9zdCB0dGxvYWQgdHRzYml0IHR0a2VybiB0dGJkZiBzZm50cGljIDsKKyAgICBfc291cmNlcyA9IHBuZ3NoaW0KKyAgICAgICAgICAgICAgIHNmZHJpdmVyCisgICAgICAgICAgICAgICBzZm50cGljCisgICAgICAgICAgICAgICBzZm9ianMKKyAgICAgICAgICAgICAgIHR0YmRmCisgICAgICAgICAgICAgICB0dGNtYXAKKyAgICAgICAgICAgICAgIHR0a2VybgorICAgICAgICAgICAgICAgdHRsb2FkCisgICAgICAgICAgICAgICB0dG10eAorICAgICAgICAgICAgICAgdHRwb3N0CisgICAgICAgICAgICAgICB0dHNiaXQKKyAgICAgICAgICAgICAgIDsKICAgfQogICBlbHNlCiAgIHsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3BuZ3NoaW0uYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3BuZ3NoaW0uYwppbmRleCA5YmZjYzJhLi5lYTYwNDUyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC9wbmdzaGltLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvcG5nc2hpbS5jCkBAIC00LDcgKzQsOCBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBORyBCaXRtYXAgZ2x5cGggc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLCAyMDE0IGJ5IEdvb2dsZSwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgR29vZ2xlLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFdyaXR0ZW4gYnkgU3R1YXJ0IEdpbGwgYW5kIEJlaGRhZCBFc2ZhaGJvZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzYsMTEgKzM3LDExIEBACiAgIC8qIFRoaXMgY29kZSBpcyBmcmVlbHkgYmFzZWQgb24gY2Fpcm8tcG5nLmMuICBUaGVyZSdzIHNvIG1hbnkgd2F5cyAqLwogICAvKiB0byBjYWxsIGxpYnBuZywgYW5kIHRoZSB3YXkgY2Fpcm8gZG9lcyBpdCBpcyBkZWZhY3RvIHN0YW5kYXJkLiAgKi8KIAotICBzdGF0aWMgaW50Ci0gIG11bHRpcGx5X2FscGhhKCBpbnQgIGFscGhhLAotICAgICAgICAgICAgICAgICAgaW50ICBjb2xvciApCisgIHN0YXRpYyB1bnNpZ25lZCBpbnQKKyAgbXVsdGlwbHlfYWxwaGEoIHVuc2lnbmVkIGludCAgYWxwaGEsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgIGNvbG9yICkKICAgewotICAgIGludCAgdGVtcCA9ICggYWxwaGEgKiBjb2xvciApICsgMHg4MDsKKyAgICB1bnNpZ25lZCBpbnQgIHRlbXAgPSBhbHBoYSAqIGNvbG9yICsgMHg4MDsKIAogCiAgICAgcmV0dXJuICggdGVtcCArICggdGVtcCA+PiA4ICkgKSA+PiA4OwpAQCAtODEsMTAgKzgyLDEwIEBACiAgICAgICAgICAgYmx1ZSAgPSBtdWx0aXBseV9hbHBoYSggYWxwaGEsIGJsdWUgICk7CiAgICAgICAgIH0KIAotICAgICAgICBiYXNlWzBdID0gYmx1ZTsKLSAgICAgICAgYmFzZVsxXSA9IGdyZWVuOwotICAgICAgICBiYXNlWzJdID0gcmVkOwotICAgICAgICBiYXNlWzNdID0gYWxwaGE7CisgICAgICAgIGJhc2VbMF0gPSAodW5zaWduZWQgY2hhcilibHVlOworICAgICAgICBiYXNlWzFdID0gKHVuc2lnbmVkIGNoYXIpZ3JlZW47CisgICAgICAgIGJhc2VbMl0gPSAodW5zaWduZWQgY2hhcilyZWQ7CisgICAgICAgIGJhc2VbM10gPSAodW5zaWduZWQgY2hhcilhbHBoYTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTEwOSw5ICsxMTAsOSBAQAogICAgICAgdW5zaWduZWQgaW50ICAgIGJsdWUgID0gYmFzZVsyXTsKIAogCi0gICAgICBiYXNlWzBdID0gYmx1ZTsKLSAgICAgIGJhc2VbMV0gPSBncmVlbjsKLSAgICAgIGJhc2VbMl0gPSByZWQ7CisgICAgICBiYXNlWzBdID0gKHVuc2lnbmVkIGNoYXIpYmx1ZTsKKyAgICAgIGJhc2VbMV0gPSAodW5zaWduZWQgY2hhcilncmVlbjsKKyAgICAgIGJhc2VbMl0gPSAodW5zaWduZWQgY2hhcilyZWQ7CiAgICAgICBiYXNlWzNdID0gMHhGRjsKICAgICB9CiAgIH0KQEAgLTI1NywxNiArMjU4LDE2IEBACiAKICAgICBpZiAoIHBvcHVsYXRlX21hcF9hbmRfbWV0cmljcyApCiAgICAgewotICAgICAgRlRfTG9uZyAgc2l6ZTsKKyAgICAgIEZUX1VMb25nICBzaXplOwogCiAKLSAgICAgIG1ldHJpY3MtPndpZHRoICA9IChGVF9JbnQpaW1nV2lkdGg7Ci0gICAgICBtZXRyaWNzLT5oZWlnaHQgPSAoRlRfSW50KWltZ0hlaWdodDsKKyAgICAgIG1ldHJpY3MtPndpZHRoICA9IChGVF9VU2hvcnQpaW1nV2lkdGg7CisgICAgICBtZXRyaWNzLT5oZWlnaHQgPSAoRlRfVVNob3J0KWltZ0hlaWdodDsKIAogICAgICAgbWFwLT53aWR0aCAgICAgID0gbWV0cmljcy0+d2lkdGg7CiAgICAgICBtYXAtPnJvd3MgICAgICAgPSBtZXRyaWNzLT5oZWlnaHQ7CiAgICAgICBtYXAtPnBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX0JHUkE7Ci0gICAgICBtYXAtPnBpdGNoICAgICAgPSBtYXAtPndpZHRoICogNDsKKyAgICAgIG1hcC0+cGl0Y2ggICAgICA9IChpbnQpKCBtYXAtPndpZHRoICogNCApOwogICAgICAgbWFwLT5udW1fZ3JheXMgID0gMjU2OwogCiAgICAgICAvKiByZWplY3QgdG9vIGxhcmdlIGJpdG1hcHMgc2ltaWxhcmx5IHRvIHRoZSByYXN0ZXJpemVyICovCkBAIC0yNzcsNyArMjc4LDcgQEAKICAgICAgIH0KIAogICAgICAgLyogdGhpcyBkb2Vzbid0IG92ZXJmbG93OiAweDdGRkYgKiAweDdGRkYgKiA0IDwgMl4zMiAqLwotICAgICAgc2l6ZSA9IG1hcC0+cm93cyAqIG1hcC0+cGl0Y2g7CisgICAgICBzaXplID0gbWFwLT5yb3dzICogKEZUX1VMb25nKW1hcC0+cGl0Y2g7CiAKICAgICAgIGVycm9yID0gZnRfZ2x5cGhzbG90X2FsbG9jX2JpdG1hcCggc2xvdCwgc2l6ZSApOwogICAgICAgaWYgKCBlcnJvciApCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC9wbmdzaGltLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC9wbmdzaGltLmgKaW5kZXggZGM5ZWNhZi4uNGNjNWMyYiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvcG5nc2hpbS5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3BuZ3NoaW0uaApAQCAtNCw3ICs0LDggQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQTkcgQml0bWFwIGdseXBoIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMyBieSBHb29nbGUsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEdvb2dsZSwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBXcml0dGVuIGJ5IFN0dWFydCBHaWxsIGFuZCBCZWhkYWQgRXNmYWhib2QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3NmZHJpdmVyLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC9zZmRyaXZlci5jCmluZGV4IGJkOGRkMmUuLjZhM2YwZDkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3NmZHJpdmVyLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvc2Zkcml2ZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBIaWdoLWxldmVsIFNGTlQgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA3LCAyMDA5LTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjY2LDcgKzI2Niw3IEBACiAgICAgICB7CiAgICAgICAgIEZUX1N0cmVhbSAgIHN0cmVhbSA9IGZhY2UtPm5hbWVfdGFibGUuc3RyZWFtOwogICAgICAgICBGVF9TdHJpbmcqICByICAgICAgPSAoRlRfU3RyaW5nKilyZXN1bHQ7Ci0gICAgICAgIEZUX0J5dGUqICAgIHA7CisgICAgICAgIEZUX0NoYXIqICAgIHA7CiAKIAogICAgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBuYW1lLT5zdHJpbmdPZmZzZXQgKSB8fApAQCAtMjgwLDExICsyODAsMTEgQEAKICAgICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICAgIH0KIAotICAgICAgICBwID0gKEZUX0J5dGUqKXN0cmVhbS0+Y3Vyc29yOworICAgICAgICBwID0gKEZUX0NoYXIqKXN0cmVhbS0+Y3Vyc29yOwogCiAgICAgICAgIGZvciAoIDsgbGVuID4gMDsgbGVuLS0sIHAgKz0gMiApCiAgICAgICAgIHsKLSAgICAgICAgICBpZiAoIHBbMF0gPT0gMCAmJiBwWzFdID49IDMyICYmIHBbMV0gPCAxMjggKQorICAgICAgICAgIGlmICggcFswXSA9PSAwICYmIHBbMV0gPj0gMzIgKQogICAgICAgICAgICAgKnIrKyA9IHBbMV07CiAgICAgICAgIH0KICAgICAgICAgKnIgPSAnXDAnOwpAQCAtNDI3LDcgKzQyNyw3IEBACiAgIHNmbnRfZ2V0X2ludGVyZmFjZSggRlRfTW9kdWxlICAgIG1vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgbW9kdWxlX2ludGVyZmFjZSApCiAgIHsKLSAgICAvKiBTRk5UX1NFUlZJQ0VTX0dFVCBkZXJlZmVycyBgbGlicmFyeScgaW4gUElDIG1vZGUgKi8KKyAgICAvKiBTRk5UX1NFUlZJQ0VTX0dFVCBkZXJlZmVyZW5jZXMgYGxpYnJhcnknIGluIFBJQyBtb2RlICovCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OwogCkBAIC01MDUsNyArNTA1LDkgQEAKICAgICBQVVRfRU1CRURERURfQklUTUFQUyggdHRfZmFjZV9zZXRfc2JpdF9zdHJpa2UgICAgICksCiAgICAgUFVUX0VNQkVEREVEX0JJVE1BUFMoIHR0X2ZhY2VfbG9hZF9zdHJpa2VfbWV0cmljcyApLAogCi0gICAgdHRfZmFjZV9nZXRfbWV0cmljcworICAgIHR0X2ZhY2VfZ2V0X21ldHJpY3MsCisKKyAgICB0dF9mYWNlX2dldF9uYW1lCiAgICkKIAogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC9zZmRyaXZlci5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvc2Zkcml2ZXIuaAppbmRleCA1ZGUyNWQ1Li45NDQxMTljIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC9zZmRyaXZlci5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3NmZHJpdmVyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSGlnaC1sZXZlbCBTRk5UIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3NmZXJyb3JzLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC9zZmVycm9ycy5oCmluZGV4IGU5ODFlMWQuLmUzYmVmM2YgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3NmZXJyb3JzLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvc2ZlcnJvcnMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBTRk5UIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMSwgMjAwNCwgMjAxMiwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvc2ZudC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvc2ZudC5jCmluZGV4IGQ2MmVkNGUuLjBiOGI1ZjQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3NmbnQuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC9zZm50LmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgU2luZ2xlIG9iamVjdCBsaWJyYXJ5IGNvbXBvbmVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwNiwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3NmbnRwaWMuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3NmbnRwaWMuYwppbmRleCBiM2ZiMjRiLi4yYWFmNGJjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC9zZm50cGljLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvc2ZudHBpYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBzZm50IG1vZHVsZS4gICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC9zZm50cGljLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC9zZm50cGljLmgKaW5kZXggYjA5YTkxNC4uZDk5YmU2YSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvc2ZudHBpYy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3NmbnRwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3Igc2ZudCBtb2R1bGUuICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOSwgMjAxMiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjAsOCArMjAsNiBAQAogI2RlZmluZSBfX1NGTlRQSUNfSF9fCiAKIAotRlRfQkVHSU5fSEVBREVSCi0KICNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICiAKIApAQCAtMzEsNyArMjksNiBAQAogI2RlZmluZSBTRk5UX1NFUlZJQ0VfR0xZUEhfRElDVF9HRVQgIHNmbnRfc2VydmljZV9nbHlwaF9kaWN0CiAjZGVmaW5lIFNGTlRfU0VSVklDRV9QU19OQU1FX0dFVCAgICAgc2ZudF9zZXJ2aWNlX3BzX25hbWUKICNkZWZpbmUgVFRfU0VSVklDRV9DTUFQX0lORk9fR0VUICAgICB0dF9zZXJ2aWNlX2dldF9jbWFwX2luZm8KLSNkZWZpbmUgU0ZOVF9TRVJWSUNFU19HRVQgICAgICAgICAgICBzZm50X3NlcnZpY2VzCiAjZGVmaW5lIFRUX0NNQVBfQ0xBU1NFU19HRVQgICAgICAgICAgdHRfY21hcF9jbGFzc2VzCiAjZGVmaW5lIFNGTlRfU0VSVklDRV9TRk5UX1RBQkxFX0dFVCAgc2ZudF9zZXJ2aWNlX3NmbnRfdGFibGUKICNkZWZpbmUgU0ZOVF9TRVJWSUNFX0JERl9HRVQgICAgICAgICBzZm50X3NlcnZpY2VfYmRmCkBAIC01Niw2ICs1Myw4IEBACiAjaW5jbHVkZSAidHRjbWFwLmgiCiAKIAorRlRfQkVHSU5fSEVBREVSCisKICAgdHlwZWRlZiBzdHJ1Y3QgIHNmbnRNb2R1bGVQSUNfCiAgIHsKICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogICAgICAgIHNmbnRfc2VydmljZXM7CkBAIC04Myw4ICs4Miw2IEBACiAgICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPnNmbnRfc2VydmljZV9wc19uYW1lICkKICNkZWZpbmUgVFRfU0VSVklDRV9DTUFQX0lORk9fR0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT50dF9zZXJ2aWNlX2dldF9jbWFwX2luZm8gKQotI2RlZmluZSBTRk5UX1NFUlZJQ0VTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5zZm50X3NlcnZpY2VzICkKICNkZWZpbmUgVFRfQ01BUF9DTEFTU0VTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT50dF9jbWFwX2NsYXNzZXMgKQogI2RlZmluZSBTRk5UX1NFUlZJQ0VfU0ZOVF9UQUJMRV9HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTEwMiwxMiArOTksMTMgQEAKICAgRlRfRXJyb3IKICAgc2ZudF9tb2R1bGVfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKIAorCitGVF9FTkRfSEVBREVSCisKICNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCiAgIC8qICovCiAKLUZUX0VORF9IRUFERVIKLQogI2VuZGlmIC8qIF9fU0ZOVFBJQ19IX18gKi8KIAogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC9zZm9ianMuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3Nmb2Jqcy5jCmluZGV4IDcwYjk4OGQuLjE0ZDNhZGUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3Nmb2Jqcy5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3Nmb2Jqcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFNGTlQgb2JqZWN0IG1hbmFnZW1lbnQgKGJhc2UpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDgsIDIwMTAtMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xMjAsMjcgKzEyMCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZmFjZV9nZXRfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0dXJucyBhIGdpdmVuIEVOR0xJU0ggbmFtZSByZWNvcmQgaW4gQVNDSUkuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuYW1laWQgOjogVGhlIG5hbWUgaWQgb2YgdGhlIG5hbWUgcmVjb3JkIHRvIHJldHVybi4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuYW1lICAgOjogVGhlIGFkZHJlc3Mgb2YgYSBzdHJpbmcgcG9pbnRlci4gIE5VTEwgaWYgbm8gbmFtZSBpcyAgICAgKi8KLSAgLyogICAgICAgICAgICAgIHByZXNlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgRlRfRXJyb3IKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBzZm50LmggKi8KKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgdHRfZmFjZV9nZXRfbmFtZSggVFRfRmFjZSAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICBuYW1laWQsCiAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmluZyoqICBuYW1lICkKQEAgLTM3Niw4ICszNTgsOCBAQAogICAgIEZUX0ZSRUUoIHN0cmVhbS0+YmFzZSApOwogCiAgICAgc3RyZWFtLT5zaXplICA9IDA7Ci0gICAgc3RyZWFtLT5iYXNlICA9IDA7Ci0gICAgc3RyZWFtLT5jbG9zZSA9IDA7CisgICAgc3RyZWFtLT5iYXNlICA9IE5VTEw7CisgICAgc3RyZWFtLT5jbG9zZSA9IE5VTEw7CiAgIH0KIAogCkBAIC01ODAsOCArNTYyLDggQEAKICAgICAgIHRhYmxlLT5PcmlnT2Zmc2V0ID0gc2ZudF9vZmZzZXQ7CiAKICAgICAgIC8qIFRoZSBvZmZzZXRzIG11c3QgYmUgbXVsdGlwbGVzIG9mIDQuICovCi0gICAgICB3b2ZmX29mZnNldCArPSAoIHRhYmxlLT5Db21wTGVuZ3RoICsgMyApICYgfjM7Ci0gICAgICBzZm50X29mZnNldCArPSAoIHRhYmxlLT5PcmlnTGVuZ3RoICsgMyApICYgfjM7CisgICAgICB3b2ZmX29mZnNldCArPSAoIHRhYmxlLT5Db21wTGVuZ3RoICsgMyApICYgfjNVOworICAgICAgc2ZudF9vZmZzZXQgKz0gKCB0YWJsZS0+T3JpZ0xlbmd0aCArIDMgKSAmIH4zVTsKICAgICB9CiAKICAgICAvKgpAQCAtNjA5LDcgKzU5MSw3IEBACiAgICAgaWYgKCB3b2ZmLnByaXZPZmZzZXQgKQogICAgIHsKICAgICAgIC8qIC4uLiBpZiBpdCBpc24ndCB0aGUgbGFzdCBibG9jay4gKi8KLSAgICAgIHdvZmZfb2Zmc2V0ID0gKCB3b2ZmX29mZnNldCArIDMgKSAmIH4zOworICAgICAgd29mZl9vZmZzZXQgPSAoIHdvZmZfb2Zmc2V0ICsgMyApICYgfjNVOwogCiAgICAgICBpZiAoIHdvZmYucHJpdk9mZnNldCAhPSB3b2ZmX29mZnNldCAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgIHdvZmYucHJpdk9mZnNldCArIHdvZmYucHJpdkxlbmd0aCA+IHdvZmYubGVuZ3RoICkKQEAgLTgzOSwxMyArODIxLDE0IEBACiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBzZm50X2luaXRfZmFjZSggRlRfU3RyZWFtICAgICAgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBmYWNlX2luc3RhbmNlX2luZGV4LAogICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgbnVtX3BhcmFtcywKICAgICAgICAgICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyApCiAgIHsKLSAgICBGVF9FcnJvciAgICAgICAgZXJyb3I7Ci0gICAgRlRfTGlicmFyeSAgICAgIGxpYnJhcnkgPSBmYWNlLT5yb290LmRyaXZlci0+cm9vdC5saWJyYXJ5OwotICAgIFNGTlRfU2VydmljZSAgICBzZm50OworICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CisgICAgRlRfTGlicmFyeSAgICBsaWJyYXJ5ID0gZmFjZS0+cm9vdC5kcml2ZXItPnJvb3QubGlicmFyeTsKKyAgICBTRk5UX1NlcnZpY2UgIHNmbnQ7CisgICAgRlRfSW50ICAgICAgICBmYWNlX2luZGV4OwogCiAKICAgICAvKiBmb3Igbm93LCBwYXJhbWV0ZXJzIGFyZSB1bnVzZWQgKi8KQEAgLTg3OCwyMiArODYxLDY1IEBACiAgICAgLyogU3RyZWFtIG1heSBoYXZlIGNoYW5nZWQgaW4gc2ZudF9vcGVuX2ZvbnQuICovCiAgICAgc3RyZWFtID0gZmFjZS0+cm9vdC5zdHJlYW07CiAKLSAgICBGVF9UUkFDRTIoKCAic2ZudF9pbml0X2ZhY2U6ICUwOHAsICVsZFxuIiwgZmFjZSwgZmFjZV9pbmRleCApKTsKKyAgICBGVF9UUkFDRTIoKCAic2ZudF9pbml0X2ZhY2U6ICUwOHAsICVsZFxuIiwgZmFjZSwgZmFjZV9pbnN0YW5jZV9pbmRleCApKTsKIAotICAgIGlmICggZmFjZV9pbmRleCA8IDAgKQotICAgICAgZmFjZV9pbmRleCA9IDA7CisgICAgZmFjZV9pbmRleCA9IEZUX0FCUyggZmFjZV9pbnN0YW5jZV9pbmRleCApICYgMHhGRkZGOwogCiAgICAgaWYgKCBmYWNlX2luZGV4ID49IGZhY2UtPnR0Y19oZWFkZXIuY291bnQgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgeworICAgICAgaWYgKCBmYWNlX2luc3RhbmNlX2luZGV4ID49IDAgKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZmFjZV9pbmRleCA9IDA7CisgICAgfQogCiAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggZmFjZS0+dHRjX2hlYWRlci5vZmZzZXRzW2ZhY2VfaW5kZXhdICkgKQogICAgICAgcmV0dXJuIGVycm9yOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgVHJ1ZVR5cGUgZmlsZSAqLworICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBhIHZhbGlkIFRydWVUeXBlIGZpbGUgKi8KICAgICBlcnJvciA9IHNmbnQtPmxvYWRfZm9udF9kaXIoIGZhY2UsIHN0cmVhbSApOwogICAgIGlmICggZXJyb3IgKQogICAgICAgcmV0dXJuIGVycm9yOwogCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorICAgIHsKKyAgICAgIEZUX1VMb25nICAgZnZhcl9sZW47CisgICAgICBGVF9VU2hvcnQgIG51bV9pbnN0YW5jZXM7CisgICAgICBGVF9JbnQgICAgIGluc3RhbmNlX2luZGV4OworCisKKyAgICAgIGluc3RhbmNlX2luZGV4ID0gRlRfQUJTKCBmYWNlX2luc3RhbmNlX2luZGV4ICkgPj4gMTY7CisKKyAgICAgIC8qIHRlc3Qgd2hldGhlciBjdXJyZW50IGZhY2UgaXMgYSBHWCBmb250IHdpdGggbmFtZWQgaW5zdGFuY2VzICovCisgICAgICBpZiAoIGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfZnZhciwgc3RyZWFtLCAmZnZhcl9sZW4gKSB8fAorICAgICAgICAgICBmdmFyX2xlbiA8IDIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgRlRfU1RSRUFNX1NLSVAoIDEyICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgIEZUX1JFQURfVVNIT1JUKCBudW1faW5zdGFuY2VzICkgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIG51bV9pbnN0YW5jZXMgPSAwOworCisgICAgICAvKiB3ZSBzdXBwb3J0IGF0IG1vc3QgMl4xNSAtIDEgaW5zdGFuY2VzICovCisgICAgICBpZiAoIG51bV9pbnN0YW5jZXMgPj0gKCAxVSA8PCAxNSApIC0gMSApCisgICAgICB7CisgICAgICAgIGlmICggZmFjZV9pbnN0YW5jZV9pbmRleCA+PSAwICkKKyAgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIG51bV9pbnN0YW5jZXMgPSAwOworICAgICAgfQorCisgICAgICAvKiBpbnN0YW5jZSBpbmRpY2VzIGluIGBmYWNlX2luc3RhbmNlX2luZGV4JyBzdGFydCB3aXRoIGluZGV4IDEsICovCisgICAgICAvKiB0aHVzIGA+JyBhbmQgbm90IGA+PScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIGluc3RhbmNlX2luZGV4ID4gbnVtX2luc3RhbmNlcyApCisgICAgICB7CisgICAgICAgIGlmICggZmFjZV9pbnN0YW5jZV9pbmRleCA+PSAwICkKKyAgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIG51bV9pbnN0YW5jZXMgPSAwOworICAgICAgfQorCisgICAgICBmYWNlLT5yb290LnN0eWxlX2ZsYWdzID0gKEZUX0xvbmcpbnVtX2luc3RhbmNlcyA8PCAxNjsKKyAgICB9CisjZW5kaWYKKwogICAgIGZhY2UtPnJvb3QubnVtX2ZhY2VzICA9IGZhY2UtPnR0Y19oZWFkZXIuY291bnQ7CiAgICAgZmFjZS0+cm9vdC5mYWNlX2luZGV4ID0gZmFjZV9pbmRleDsKIApAQCAtOTQ2LDcgKzk3Miw3IEBACiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBzZm50X2xvYWRfZmFjZSggRlRfU3RyZWFtICAgICAgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBmYWNlX2luc3RhbmNlX2luZGV4LAogICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgbnVtX3BhcmFtcywKICAgICAgICAgICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyApCiAgIHsKQEAgLTk2Miw3ICs5ODgsNyBAQAogCiAgICAgU0ZOVF9TZXJ2aWNlICBzZm50ID0gKFNGTlRfU2VydmljZSlmYWNlLT5zZm50OwogCi0gICAgRlRfVU5VU0VEKCBmYWNlX2luZGV4ICk7CisgICAgRlRfVU5VU0VEKCBmYWNlX2luc3RhbmNlX2luZGV4ICk7CiAKIAogICAgIC8qIENoZWNrIHBhcmFtZXRlcnMgKi8KQEAgLTEyODQsNyArMTMxMCw3IEBACiAgICAgICAgICAgZmxhZ3MgfD0gRlRfU1RZTEVfRkxBR19JVEFMSUM7CiAgICAgICB9CiAKLSAgICAgIHJvb3QtPnN0eWxlX2ZsYWdzID0gZmxhZ3M7CisgICAgICByb290LT5zdHlsZV9mbGFncyB8PSBmbGFnczsKIAogICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNDMxLDggKzE0NTcsOCBAQAogICAgICAgICByb290LT5hc2NlbmRlciAgPSBmYWNlLT5ob3Jpem9udGFsLkFzY2VuZGVyOwogICAgICAgICByb290LT5kZXNjZW5kZXIgPSBmYWNlLT5ob3Jpem9udGFsLkRlc2NlbmRlcjsKIAotICAgICAgICByb290LT5oZWlnaHQgPSAoRlRfU2hvcnQpKCByb290LT5hc2NlbmRlciAtIHJvb3QtPmRlc2NlbmRlciArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmhvcml6b250YWwuTGluZV9HYXAgKTsKKyAgICAgICAgcm9vdC0+aGVpZ2h0ID0gcm9vdC0+YXNjZW5kZXIgLSByb290LT5kZXNjZW5kZXIgKworICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5ob3Jpem9udGFsLkxpbmVfR2FwOwogCiAgICAgICAgIGlmICggISggcm9vdC0+YXNjZW5kZXIgfHwgcm9vdC0+ZGVzY2VuZGVyICkgKQogICAgICAgICB7CkBAIC0xNDQzLDIzICsxNDY5LDI0IEBACiAgICAgICAgICAgICAgIHJvb3QtPmFzY2VuZGVyICA9IGZhY2UtPm9zMi5zVHlwb0FzY2VuZGVyOwogICAgICAgICAgICAgICByb290LT5kZXNjZW5kZXIgPSBmYWNlLT5vczIuc1R5cG9EZXNjZW5kZXI7CiAKLSAgICAgICAgICAgICAgcm9vdC0+aGVpZ2h0ID0gKEZUX1Nob3J0KSggcm9vdC0+YXNjZW5kZXIgLSByb290LT5kZXNjZW5kZXIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5vczIuc1R5cG9MaW5lR2FwICk7CisgICAgICAgICAgICAgIHJvb3QtPmhlaWdodCA9IHJvb3QtPmFzY2VuZGVyIC0gcm9vdC0+ZGVzY2VuZGVyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+b3MyLnNUeXBvTGluZUdhcDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcm9vdC0+YXNjZW5kZXIgID0gIChGVF9TaG9ydClmYWNlLT5vczIudXNXaW5Bc2NlbnQ7CiAgICAgICAgICAgICAgIHJvb3QtPmRlc2NlbmRlciA9IC0oRlRfU2hvcnQpZmFjZS0+b3MyLnVzV2luRGVzY2VudDsKIAotICAgICAgICAgICAgICByb290LT5oZWlnaHQgPSAoRlRfVVNob3J0KSggcm9vdC0+YXNjZW5kZXIgLSByb290LT5kZXNjZW5kZXIgKTsKKyAgICAgICAgICAgICAgcm9vdC0+aGVpZ2h0ID0gcm9vdC0+YXNjZW5kZXIgLSByb290LT5kZXNjZW5kZXI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcm9vdC0+bWF4X2FkdmFuY2Vfd2lkdGggID0gZmFjZS0+aG9yaXpvbnRhbC5hZHZhbmNlX1dpZHRoX01heDsKLSAgICAgICAgcm9vdC0+bWF4X2FkdmFuY2VfaGVpZ2h0ID0gKEZUX1Nob3J0KSggZmFjZS0+dmVydGljYWxfaW5mbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZmFjZS0+dmVydGljYWwuYWR2YW5jZV9IZWlnaHRfTWF4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByb290LT5oZWlnaHQgKTsKKyAgICAgICAgcm9vdC0+bWF4X2FkdmFuY2Vfd2lkdGggID0KKyAgICAgICAgICAoRlRfU2hvcnQpZmFjZS0+aG9yaXpvbnRhbC5hZHZhbmNlX1dpZHRoX01heDsKKyAgICAgICAgcm9vdC0+bWF4X2FkdmFuY2VfaGVpZ2h0ID0KKyAgICAgICAgICAoRlRfU2hvcnQpKCBmYWNlLT52ZXJ0aWNhbF9pbmZvID8gZmFjZS0+dmVydGljYWwuYWR2YW5jZV9IZWlnaHRfTWF4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJvb3QtPmhlaWdodCApOwogCiAgICAgICAgIC8qIFNlZSBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vT3BlblR5cGUvT1RTcGVjL3Bvc3QuaHRtIC0tICovCiAgICAgICAgIC8qIEFkanVzdCB1bmRlcmxpbmUgcG9zaXRpb24gZnJvbSB0b3AgZWRnZSB0byBjZW50cmUgb2YgICAgICovCkBAIC0xNTY5LDcgKzE1OTYsNyBAQAogCiAgICAgRlRfRlJFRSggZmFjZS0+cG9zdHNjcmlwdF9uYW1lICk7CiAKLSAgICBmYWNlLT5zZm50ID0gMDsKKyAgICBmYWNlLT5zZm50ID0gTlVMTDsKICAgfQogCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3Nmb2Jqcy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvc2ZvYmpzLmgKaW5kZXggNjI0MWM5My4uNDU1Zjg2NyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvc2ZvYmpzLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvc2ZvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgU0ZOVCBvYmplY3QgbWFuYWdlbWVudCAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTMxLDIwICszMSwyNSBAQAogICBGVF9MT0NBTCggRlRfRXJyb3IgKQogICBzZm50X2luaXRfZmFjZSggRlRfU3RyZWFtICAgICAgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBmYWNlX2luc3RhbmNlX2luZGV4LAogICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgbnVtX3BhcmFtcywKICAgICAgICAgICAgICAgICAgIEZUX1BhcmFtZXRlciogIHBhcmFtcyApOwogCiAgIEZUX0xPQ0FMKCBGVF9FcnJvciApCiAgIHNmbnRfbG9hZF9mYWNlKCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgZmFjZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgIGZhY2VfaW5zdGFuY2VfaW5kZXgsCiAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICBudW1fcGFyYW1zLAogICAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICk7CiAKICAgRlRfTE9DQUwoIHZvaWQgKQogICBzZm50X2RvbmVfZmFjZSggVFRfRmFjZSAgZmFjZSApOwogCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfZ2V0X25hbWUoIFRUX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgbmFtZWlkLAorICAgICAgICAgICAgICAgICAgICBGVF9TdHJpbmcqKiAgbmFtZSApOworCiAKIEZUX0VORF9IRUFERVIKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRiZGYuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0YmRmLmMKaW5kZXggOTQwMWRhZS4uMDk4Yjc4MSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRiZGYuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dGJkZi5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBlbWJlZGRlZCBCREYgcHJvcGVydGllcyAoYm9keSkuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LCAyMDA2LCAyMDEwLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dGJkZi5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRiZGYuaAppbmRleCA0OGExMGQ2Li5mZTRiYTQ4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dGJkZi5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0YmRmLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGVtYmVkZGVkIEJERiBwcm9wZXJ0aWVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0Y21hcC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRjbWFwLmMKaW5kZXggZWNlOWVmMS4uYzRkOWFiZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRjbWFwLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRjbWFwLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgY2hhcmFjdGVyIG1hcHBpbmcgdGFibGUgKGNtYXApIHN1cHBvcnQgKGJvZHkpLiAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxMCwgMjAxMi0yMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTUxLDYgKzUxLDEzIEBACiAjZGVmaW5lIFRUX05FWFRfVUxPTkcgICBGVF9ORVhUX1VMT05HCiAKIAorICAvKiBUb28gbGFyZ2UgZ2x5cGggaW5kZXggcmV0dXJuIHZhbHVlcyBhcmUgY2F1Z2h0IGluIGBGVF9HZXRfQ2hhcl9JbmRleCcgKi8KKyAgLyogYW5kIGBGVF9HZXRfTmV4dF9DaGFyJyAodGhlIGxhdHRlciBjYWxscyB0aGUgaW50ZXJuYWwgYG5leHQnIGZ1bmN0aW9uICovCisgIC8qIGFnYWluIGluIHRoaXMgY2FzZSkuICBUbyBtYXJrIGNoYXJhY3RlciBjb2RlIHJldHVybiB2YWx1ZXMgYXMgaW52YWxpZCAqLworICAvKiBpdCBpcyBzdWZmaWNpZW50IHRvIHNldCB0aGUgY29ycmVzcG9uZGluZyBnbHlwaCBpbmRleCByZXR1cm4gdmFsdWUgdG8gKi8KKyAgLyogemVyby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwogICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKICAgdHRfY21hcF9pbml0KCBUVF9DTWFwICAgY21hcCwKICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgdGFibGUgKQpAQCAtMTk5LDcgKzIwNiw3IEBACiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgRk9STUFUIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqIFRoaXMgaXMgdXNlZCBmb3IgY2VydGFpbiBDSksgZW5jb2RpbmdzIHRoYXQgZW5jb2RlIHRleHQgaW4gYSAgKioqKiovCi0gIC8qKioqKiBtaXhlZCA4LzE2IGJpdHMgZW5jb2RpbmcgYWxvbmcgdGhlIGZvbGxvd2luZyBsaW5lczogICAgICAgICAgICoqKioqLworICAvKioqKiogbWl4ZWQgOC8xNiBiaXRzIGVuY29kaW5nIGFsb25nIHRoZSBmb2xsb3dpbmcgbGluZXMuICAgICAgICAgICAqKioqKi8KICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKiAqIENlcnRhaW4gYnl0ZSB2YWx1ZXMgY29ycmVzcG9uZCB0byBhbiA4LWJpdCBjaGFyYWN0ZXIgY29kZSAgICoqKioqLwogICAvKioqKiogICAodHlwaWNhbGx5IGluIHRoZSByYW5nZSAwLi4xMjcgZm9yIEFTQ0lJIGNvbXBhdGliaWxpdHkpLiAgICAqKioqKi8KQEAgLTIwOSwxOSArMjE2LDE5IEBACiAgIC8qKioqKiAgIHNlY29uZCBieXRlIG9mIGEgMi1ieXRlIGNoYXJhY3RlcikuICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqIFRoZSBmb2xsb3dpbmcgY2hhcm1hcCBsb29rdXAgYW5kIGl0ZXJhdGlvbiBmdW5jdGlvbnMgYWxsICAgICAgKioqKiovCi0gIC8qKioqKiBhc3N1bWUgdGhhdCB0aGUgdmFsdWUgImNoYXJjb2RlIiBjb3JyZXNwb25kIHRvIGZvbGxvd2luZzogICAgICoqKioqLworICAvKioqKiogYXNzdW1lIHRoYXQgdGhlIHZhbHVlIGBjaGFyY29kZScgZnVsZmlsbHMgdGhlIGZvbGxvd2luZy4gICAgICAqKioqKi8KICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0gIC8qKioqKiAgIC0gRm9yIG9uZSBieXRlIGNoYXJhY3RlcnMsICJjaGFyY29kZSIgaXMgc2ltcGx5IHRoZSAgICAgICAgICoqKioqLworICAvKioqKiogICAtIEZvciBvbmUgYnl0ZSBjaGFyYWN0ZXJzLCBgY2hhcmNvZGUnIGlzIHNpbXBseSB0aGUgICAgICAgICAqKioqKi8KICAgLyoqKioqICAgICBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotICAvKioqKiogICAtIEZvciB0d28gYnl0ZSBjaGFyYWN0ZXJzLCAiY2hhcmNvZGUiIGlzIHRoZSAyLWJ5dGUgICAgICAgICAqKioqKi8KLSAgLyoqKioqICAgICBjaGFyYWN0ZXIgY29kZSBpbiBiaWcgZW5kaWFuIGZvcm1hdC4gIE1vcmUgZXhhY3RseTogICAgICAgKioqKiovCisgIC8qKioqKiAgIC0gRm9yIHR3byBieXRlIGNoYXJhY3RlcnMsIGBjaGFyY29kZScgaXMgdGhlIDItYnl0ZSAgICAgICAgICoqKioqLworICAvKioqKiogICAgIGNoYXJhY3RlciBjb2RlIGluIGJpZyBlbmRpYW4gZm9ybWF0LiAgTW9yZSBwcmVjaXNlbHk6ICAgICAqKioqKi8KICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgICAoY2hhcmNvZGUgPj4gOCkgICAgaXMgdGhlIGZpcnN0IGJ5dGUgdmFsdWUgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogICAgICAgKGNoYXJjb2RlICYgMHhGRikgIGlzIHRoZSBzZWNvbmQgYnl0ZSB2YWx1ZSAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0gIC8qKioqKiBOb3RlIHRoYXQgbm90IGFsbCB2YWx1ZXMgb2YgImNoYXJjb2RlIiBhcmUgdmFsaWQgYWNjb3JkaW5nICAgICoqKioqLwotICAvKioqKiogdG8gdGhlc2UgcnVsZXMsIGFuZCB0aGUgZnVuY3Rpb24gbW9kZXJhdGVseSBjaGVjayB0aGUgICAgICAgICAqKioqKi8KKyAgLyoqKioqIE5vdGUgdGhhdCBub3QgYWxsIHZhbHVlcyBvZiBgY2hhcmNvZGUnIGFyZSB2YWxpZCBhY2NvcmRpbmcgICAgKioqKiovCisgIC8qKioqKiB0byB0aGVzZSBydWxlcywgYW5kIHRoZSBmdW5jdGlvbiBtb2RlcmF0ZWx5IGNoZWNrcyB0aGUgICAgICAgICoqKioqLwogICAvKioqKiogYXJndW1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjQ5LDcgKzI1Niw3IEBACiAgIC8qIHRhYmxlLCBpLmUuLCBpdCBpcyB0aGUgY29ycmVzcG9uZGluZyBzdWItaGVhZGVyIGluZGV4IG11bHRpcGxpZWQgICAgICAqLwogICAvKiBieSA4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEVhY2ggc3ViLWhlYWRlciBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBFYWNoIHN1Yi1oZWFkZXIgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgTkFNRSAgICAgICAgT0ZGU0VUICAgICAgVFlQRSAgICAgICAgICAgIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI2NCwxMSArMjcxLDExIEBACiAgIC8qIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogSWYgYSBjaGFyYWN0ZXIgY29kZSBpcyBjb250YWluZWQgd2l0aGluIGEgZ2l2ZW4gc3ViLWhlYWRlciwgdGhlbiAgICAgICovCi0gIC8qIG1hcHBpbmcgaXQgdG8gYSBnbHlwaCBpbmRleCBpcyBkb25lIGFzIGZvbGxvd3M6ICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBtYXBwaW5nIGl0IHRvIGEgZ2x5cGggaW5kZXggaXMgZG9uZSBhcyBmb2xsb3dzLiAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICogVGhlIHZhbHVlIG9mIGBvZmZzZXQnIGlzIHJlYWQuICBUaGlzIGlzIGEgX2J5dGVfIGRpc3RhbmNlIGZyb20gdGhlICAqLwogICAvKiAgIGxvY2F0aW9uIG9mIHRoZSBgb2Zmc2V0JyBmaWVsZCBpdHNlbGYgaW50byBhIHNsaWNlIG9mIHRoZSAgICAgICAgICAgKi8KLSAgLyogICBgZ2x5cGhfaWRzJyB0YWJsZS4gIExldCdzIGNhbGwgaXQgYHNsaWNlJyAoaXQgaXMgYSBVU0hPUlRbXSB0b28pLiAgICovCisgIC8qICAgYGdseXBoX2lkcycgdGFibGUuICBMZXQncyBjYWxsIGl0IGBzbGljZScgKGl0IGlzIGEgVVNIT1JUW10sIHRvbykuICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogKiBUaGUgdmFsdWUgYHNsaWNlW2NoYXIubG8gLSBmaXJzdF0nIGlzIHJlYWQuICBJZiBpdCBpcyAwLCB0aGVyZSBpcyAgICovCiAgIC8qICAgbm8gZ2x5cGggZm9yIHRoZSBjaGFyY29kZS4gIE90aGVyd2lzZSwgdGhlIHZhbHVlIG9mIGBkZWx0YScgaXMgICAgICAqLwpAQCAtMzI2LDcgKzMzMyw3IEBACiAgICAgRlRfQVNTRVJUKCBwID09IHRhYmxlICsgNTE4ICk7CiAKICAgICBzdWJzICAgICAgPSBwOwotICAgIGdseXBoX2lkcyA9IHN1YnMgKyAobWF4X3N1YnMgKyAxKSAqIDg7CisgICAgZ2x5cGhfaWRzID0gc3VicyArICggbWF4X3N1YnMgKyAxICkgKiA4OwogICAgIGlmICggZ2x5cGhfaWRzID4gdmFsaWQtPmxpbWl0ICkKICAgICAgIEZUX0lOVkFMSURfVE9PX1NIT1JUOwogCkBAIC0zNjAsNyArMzY3LDcgQEAKIAogCiAgICAgICAgIGlkcyA9IHAgLSAyICsgb2Zmc2V0OwotICAgICAgICBpZiAoIGlkcyA8IGdseXBoX2lkcyB8fCBpZHMgKyBjb2RlX2NvdW50KjIgPiB0YWJsZSArIGxlbmd0aCApCisgICAgICAgIGlmICggaWRzIDwgZ2x5cGhfaWRzIHx8IGlkcyArIGNvZGVfY291bnQgKiAyID4gdGFibGUgKyBsZW5ndGggKQogICAgICAgICAgIEZUX0lOVkFMSURfT0ZGU0VUOwogCiAgICAgICAgIC8qIGNoZWNrIGdseXBoIElEcyAqLwpAQCAtMzc1LDcgKzM4Miw3IEBACiAgICAgICAgICAgICBpZHggPSBUVF9ORVhUX1VTSE9SVCggcCApOwogICAgICAgICAgICAgaWYgKCBpZHggIT0gMCApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlkeCA9ICggaWR4ICsgZGVsdGEgKSAmIDB4RkZGRlU7CisgICAgICAgICAgICAgIGlkeCA9IChGVF9VSW50KSggKEZUX0ludClpZHggKyBkZWx0YSApICYgMHhGRkZGVTsKICAgICAgICAgICAgICAgaWYgKCBpZHggPj0gVFRfVkFMSURfR0xZUEhfQ09VTlQoIHZhbGlkICkgKQogICAgICAgICAgICAgICAgIEZUX0lOVkFMSURfR0xZUEhfSUQ7CiAgICAgICAgICAgICB9CkBAIC00MzYsNiArNDQzLDcgQEAKICAgICAgIH0KICAgICAgIHJlc3VsdCA9IHN1YjsKICAgICB9CisKICAgRXhpdDoKICAgICByZXR1cm4gcmVzdWx0OwogICB9CkBAIC00NzIsOSArNDgwLDEwIEBACiAgICAgICAgIGlkeCA9IFRUX1BFRUtfVVNIT1JUKCBwICk7CiAKICAgICAgICAgaWYgKCBpZHggIT0gMCApCi0gICAgICAgICAgcmVzdWx0ID0gKEZUX1VJbnQpKCBpZHggKyBkZWx0YSApICYgMHhGRkZGVTsKKyAgICAgICAgICByZXN1bHQgPSAoRlRfVUludCkoIChGVF9JbnQpaWR4ICsgZGVsdGEgKSAmIDB4RkZGRlU7CiAgICAgICB9CiAgICAgfQorCiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCkBAIC01MjQsNyArNTMzLDcgQEAKIAogICAgICAgICAgIGlmICggaWR4ICE9IDAgKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIGdpbmRleCA9ICggaWR4ICsgZGVsdGEgKSAmIDB4RkZGRlU7CisgICAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIChGVF9JbnQpaWR4ICsgZGVsdGEgKSAmIDB4RkZGRlU7CiAgICAgICAgICAgICBpZiAoIGdpbmRleCAhPSAwICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmVzdWx0ID0gY2hhcmNvZGU7CkBAIC03ODYsNyArNzk1LDcgQEAKIAogICAgICAgICAgICAgaWYgKCBnaW5kZXggIT0gMCApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggKCBnaW5kZXggKyBkZWx0YSApICYgMHhGRkZGVSApOworICAgICAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIChGVF9JbnQpZ2luZGV4ICsgZGVsdGEgKSAmIDB4RkZGRlU7CiAgICAgICAgICAgICAgIGlmICggZ2luZGV4ICE9IDAgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY21hcC0+Y3VyX2NoYXJjb2RlID0gY2hhcmNvZGU7CkBAIC04MDAsNyArODA5LDcgQEAKICAgICAgICAgewogICAgICAgICAgIGRvCiAgICAgICAgICAgewotICAgICAgICAgICAgRlRfVUludCAgZ2luZGV4ID0gKEZUX1VJbnQpKCAoIGNoYXJjb2RlICsgZGVsdGEgKSAmIDB4RkZGRlUgKTsKKyAgICAgICAgICAgIEZUX1VJbnQgIGdpbmRleCA9IChGVF9VSW50KSggKEZUX0ludCljaGFyY29kZSArIGRlbHRhICkgJiAweEZGRkZVOwogCiAKICAgICAgICAgICAgIGlmICggZ2luZGV4ICE9IDAgKQpAQCAtOTczLDcgKzk4Miw3IEBACiAgICAgICAgICAgLyogc2VnbWVudCBpZiBpdCBjb250YWlucyBvbmx5IGEgc2luZ2xlIGNoYXJhY3Rlci4gICAgICovCiAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgLyogV2UgdGh1cyBvbWl0IHRoZSB0ZXN0IGhlcmUsIGRlbGF5aW5nIGl0IHRvIHRoZSAgICAgICovCi0gICAgICAgICAgLyogcm91dGluZXMgd2hpY2ggYWN0dWFsbHkgYWNjZXNzIHRoZSBjbWFwLiAgICAgICAgICAgICovCisgICAgICAgICAgLyogcm91dGluZXMgdGhhdCBhY3R1YWxseSBhY2Nlc3MgdGhlIGNtYXAuICAgICAgICAgICAgICovCiAgICAgICAgICAgZWxzZSBpZiAoIG4gIT0gbnVtX3NlZ3MgLSAxICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgICAgICAhKCBzdGFydCA9PSAweEZGRkZVICYmIGVuZCA9PSAweEZGRkZVICkgKQogICAgICAgICAgIHsKQEAgLTk5Myw3ICsxMDAyLDcgQEAKICAgICAgICAgICAgICAgaWR4ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKICAgICAgICAgICAgICAgaWYgKCBpZHggIT0gMCApCiAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZHggPSAoRlRfVUludCkoIGlkeCArIGRlbHRhICkgJiAweEZGRkZVOworICAgICAgICAgICAgICAgIGlkeCA9IChGVF9VSW50KSggKEZUX0ludClpZHggKyBkZWx0YSApICYgMHhGRkZGVTsKIAogICAgICAgICAgICAgICAgIGlmICggaWR4ID49IFRUX1ZBTElEX0dMWVBIX0NPVU5UKCB2YWxpZCApICkKICAgICAgICAgICAgICAgICAgIEZUX0lOVkFMSURfR0xZUEhfSUQ7CkBAIC0xMDI2LDEyICsxMDM1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyKiAgcGNoYXJjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgIG5leHQgKQogICB7CisgICAgVFRfRmFjZSAgIGZhY2UgID0gKFRUX0ZhY2UpY21hcC0+Y21hcC5jaGFybWFwLmZhY2U7CisgICAgRlRfQnl0ZSogIGxpbWl0ID0gZmFjZS0+Y21hcF90YWJsZSArIGZhY2UtPmNtYXBfc2l6ZTsKKworCiAgICAgRlRfVUludCAgICBudW1fc2VnczIsIHN0YXJ0LCBlbmQsIG9mZnNldDsKICAgICBGVF9JbnQgICAgIGRlbHRhOwogICAgIEZUX1VJbnQgICAgaSwgbnVtX3NlZ3M7CiAgICAgRlRfVUludDMyICBjaGFyY29kZSA9ICpwY2hhcmNvZGU7CiAgICAgRlRfVUludCAgICBnaW5kZXggICA9IDA7CiAgICAgRlRfQnl0ZSogICBwOworICAgIEZUX0J5dGUqICAgcTsKIAogCiAgICAgcCA9IGNtYXAtPmRhdGEgKyA2OwpAQCAtMTA0NSw2NSArMTA1OSwxMDYgQEAKICAgICBpZiAoIG5leHQgKQogICAgICAgY2hhcmNvZGUrKzsKIAorICAgIGlmICggY2hhcmNvZGUgPiAweEZGRkZVICkKKyAgICAgIHJldHVybiAwOworCiAgICAgLyogbGluZWFyIHNlYXJjaCAqLwotICAgIGZvciAoIDsgY2hhcmNvZGUgPD0gMHhGRkZGVTsgY2hhcmNvZGUrKyApCisgICAgcCA9IGNtYXAtPmRhdGEgKyAxNDsgICAgICAgICAgICAgICAvKiBlbmRzIHRhYmxlICAgKi8KKyAgICBxID0gY21hcC0+ZGF0YSArIDE2ICsgbnVtX3NlZ3MyOyAgIC8qIHN0YXJ0cyB0YWJsZSAqLworCisgICAgZm9yICggaSA9IDA7IGkgPCBudW1fc2VnczsgaSsrICkKICAgICB7Ci0gICAgICBGVF9CeXRlKiAgcTsKKyAgICAgIGVuZCAgID0gVFRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIHN0YXJ0ID0gVFRfTkVYVF9VU0hPUlQoIHEgKTsKIAotCi0gICAgICBwID0gY21hcC0+ZGF0YSArIDE0OyAgICAgICAgICAgICAgIC8qIGVuZHMgdGFibGUgICAqLwotICAgICAgcSA9IGNtYXAtPmRhdGEgKyAxNiArIG51bV9zZWdzMjsgICAvKiBzdGFydHMgdGFibGUgKi8KLQotICAgICAgZm9yICggaSA9IDA7IGkgPCBudW1fc2VnczsgaSsrICkKKyAgICAgIGlmICggY2hhcmNvZGUgPCBzdGFydCApCiAgICAgICB7Ci0gICAgICAgIGVuZCAgID0gVFRfTkVYVF9VU0hPUlQoIHAgKTsKLSAgICAgICAgc3RhcnQgPSBUVF9ORVhUX1VTSE9SVCggcSApOwotCi0gICAgICAgIGlmICggY2hhcmNvZGUgPj0gc3RhcnQgJiYgY2hhcmNvZGUgPD0gZW5kICkKLSAgICAgICAgewotICAgICAgICAgIHAgICAgICAgPSBxIC0gMiArIG51bV9zZWdzMjsKLSAgICAgICAgICBkZWx0YSAgID0gVFRfUEVFS19TSE9SVCggcCApOwotICAgICAgICAgIHAgICAgICArPSBudW1fc2VnczI7Ci0gICAgICAgICAgb2Zmc2V0ICA9IFRUX1BFRUtfVVNIT1JUKCBwICk7Ci0KLSAgICAgICAgICAvKiBzb21lIGZvbnRzIGhhdmUgYW4gaW5jb3JyZWN0IGxhc3Qgc2VnbWVudDsgKi8KLSAgICAgICAgICAvKiB3ZSBoYXZlIHRvIGNhdGNoIGl0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICBpZiAoIGkgPj0gbnVtX3NlZ3MgLSAxICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgICAgIHN0YXJ0ID09IDB4RkZGRlUgJiYgZW5kID09IDB4RkZGRlUgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFRUX0ZhY2UgICBmYWNlICA9IChUVF9GYWNlKWNtYXAtPmNtYXAuY2hhcm1hcC5mYWNlOwotICAgICAgICAgICAgRlRfQnl0ZSogIGxpbWl0ID0gZmFjZS0+Y21hcF90YWJsZSArIGZhY2UtPmNtYXBfc2l6ZTsKLQotCi0gICAgICAgICAgICBpZiAoIG9mZnNldCAmJiBwICsgb2Zmc2V0ICsgMiA+IGxpbWl0ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZGVsdGEgID0gMTsKLSAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoIG9mZnNldCA9PSAweEZGRkZVICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgaWYgKCBvZmZzZXQgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHAgKz0gb2Zmc2V0ICsgKCBjaGFyY29kZSAtIHN0YXJ0ICkgKiAyOwotICAgICAgICAgICAgZ2luZGV4ID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKLSAgICAgICAgICAgIGlmICggZ2luZGV4ICE9IDAgKQotICAgICAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIGdpbmRleCArIGRlbHRhICkgJiAweEZGRkZVOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIGNoYXJjb2RlICsgZGVsdGEgKSAmIDB4RkZGRlU7Ci0KKyAgICAgICAgaWYgKCBuZXh0ICkKKyAgICAgICAgICBjaGFyY29kZSA9IHN0YXJ0OworICAgICAgICBlbHNlCiAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgIH0KIAotICAgICAgaWYgKCAhbmV4dCB8fCBnaW5kZXggKQorICAgIEFnYWluOgorICAgICAgaWYgKCBjaGFyY29kZSA8PSBlbmQgKQorICAgICAgeworICAgICAgICBGVF9CeXRlKiAgcjsKKworCisgICAgICAgIHIgICAgICAgPSBxIC0gMiArIG51bV9zZWdzMjsKKyAgICAgICAgZGVsdGEgICA9IFRUX1BFRUtfU0hPUlQoIHIgKTsKKyAgICAgICAgciAgICAgICs9IG51bV9zZWdzMjsKKyAgICAgICAgb2Zmc2V0ICA9IFRUX1BFRUtfVVNIT1JUKCByICk7CisKKyAgICAgICAgLyogc29tZSBmb250cyBoYXZlIGFuIGluY29ycmVjdCBsYXN0IHNlZ21lbnQ7ICovCisgICAgICAgIC8qIHdlIGhhdmUgdG8gY2F0Y2ggaXQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIGkgPj0gbnVtX3NlZ3MgLSAxICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICBzdGFydCA9PSAweEZGRkZVICYmIGVuZCA9PSAweEZGRkZVICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggb2Zmc2V0ICYmIHIgKyBvZmZzZXQgKyAyID4gbGltaXQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGRlbHRhICA9IDE7CisgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggb2Zmc2V0ID09IDB4RkZGRlUgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICggb2Zmc2V0ICkKKyAgICAgICAgeworICAgICAgICAgIHIgKz0gb2Zmc2V0ICsgKCBjaGFyY29kZSAtIHN0YXJ0ICkgKiAyOworCisgICAgICAgICAgLyogaWYgciA+IGxpbWl0LCB0aGUgd2hvbGUgc2VnbWVudCBpcyBpbnZhbGlkICovCisgICAgICAgICAgaWYgKCBuZXh0ICYmIHIgPiBsaW1pdCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgIGdpbmRleCA9IFRUX1BFRUtfVVNIT1JUKCByICk7CisgICAgICAgICAgaWYgKCBnaW5kZXggKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggKEZUX0ludClnaW5kZXggKyBkZWx0YSApICYgMHhGRkZGVTsKKyAgICAgICAgICAgIGlmICggZ2luZGV4ID49IChGVF9VSW50KWZhY2UtPnJvb3QubnVtX2dseXBocyApCisgICAgICAgICAgICAgIGdpbmRleCA9IDA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggKEZUX0ludCljaGFyY29kZSArIGRlbHRhICkgJiAweEZGRkZVOworCisgICAgICAgICAgaWYgKCBuZXh0ICYmIGdpbmRleCA+PSAoRlRfVUludClmYWNlLT5yb290Lm51bV9nbHlwaHMgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHdlIGhhdmUgYW4gaW52YWxpZCBnbHlwaCBpbmRleDsgaWYgdGhlcmUgaXMgYW4gb3ZlcmZsb3csICovCisgICAgICAgICAgICAvKiB3ZSBjYW4gYWRqdXN0IGBjaGFyY29kZScsIG90aGVyd2lzZSB0aGUgd2hvbGUgc2VnbWVudCBpcyAqLworICAgICAgICAgICAgLyogaW52YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGdpbmRleCA9IDA7CisKKyAgICAgICAgICAgIGlmICggKEZUX0ludCljaGFyY29kZSArIGRlbHRhIDwgMCAmJgorICAgICAgICAgICAgICAgICAoRlRfSW50KWVuZCArIGRlbHRhID49IDAgICAgICkKKyAgICAgICAgICAgICAgY2hhcmNvZGUgPSAoRlRfVUludCkoIC1kZWx0YSApOworCisgICAgICAgICAgICBlbHNlIGlmICggKEZUX0ludCljaGFyY29kZSArIGRlbHRhIDwgMHgxMDAwMEwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KWVuZCArIGRlbHRhID49IDB4MTAwMDBMICAgICApCisgICAgICAgICAgICAgIGNoYXJjb2RlID0gKEZUX1VJbnQpKCAweDEwMDAwTCAtIGRlbHRhICk7CisKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCBuZXh0ICYmICFnaW5kZXggKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBjaGFyY29kZSA+PSAweEZGRkZVICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2hhcmNvZGUrKzsKKyAgICAgICAgICBnb3RvIEFnYWluOworICAgICAgICB9CisKICAgICAgICAgYnJlYWs7CisgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCBuZXh0ICYmIGdpbmRleCApCisgICAgaWYgKCBuZXh0ICkKICAgICAgICpwY2hhcmNvZGUgPSBjaGFyY29kZTsKIAogICAgIHJldHVybiBnaW5kZXg7CkBAIC0xMjk0LDEwICsxMzQ5LDEwIEBACiAgICAgICAgICAgcCArPSBvZmZzZXQgKyAoIGNoYXJjb2RlIC0gc3RhcnQgKSAqIDI7CiAgICAgICAgICAgZ2luZGV4ID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKICAgICAgICAgICBpZiAoIGdpbmRleCAhPSAwICkKLSAgICAgICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggZ2luZGV4ICsgZGVsdGEgKSAmIDB4RkZGRlU7CisgICAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIChGVF9JbnQpZ2luZGV4ICsgZGVsdGEgKSAmIDB4RkZGRlU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQotICAgICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggY2hhcmNvZGUgKyBkZWx0YSApICYgMHhGRkZGVTsKKyAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIChGVF9JbnQpY2hhcmNvZGUgKyBkZWx0YSApICYgMHhGRkZGVTsKIAogICAgICAgICBicmVhazsKICAgICAgIH0KQEAgLTEzMTAsNyArMTM2NSw2IEBACiAKICAgICAgIC8qIGlmIGBjaGFyY29kZScgaXMgbm90IGluIGFueSBzZWdtZW50LCB0aGVuIGBtaWQnIGlzICovCiAgICAgICAvKiB0aGUgc2VnbWVudCBuZWFyZXN0IHRvIGBjaGFyY29kZScgICAgICAgICAgICAgICAgICAqLwotICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgaWYgKCBjaGFyY29kZSA+IGVuZCApCiAgICAgICB7CkBAIC0xNDQzLDcgKzE0OTcsNyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICBOQU1FICAgICAgICBPRkZTRVQgICAgICAgICAgVFlQRSAgICAgICAgICAgICBERVNDUklQVElPTiAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGZvcm1hdCAgICAgICAwICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgIG11c3QgYmUgNCAgICAgICAgICAgICAgKi8KKyAgLyogICBmb3JtYXQgICAgICAgMCAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICBtdXN0IGJlIDYgICAgICAgICAgICAgICovCiAgIC8qICAgbGVuZ3RoICAgICAgIDIgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgdGFibGUgbGVuZ3RoIGluIGJ5dGVzICAqLwogICAvKiAgIGxhbmd1YWdlICAgICA0ICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgIE1hYyBsYW5ndWFnZSBjb2RlICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNTExLDYgKzE1NjUsNyBAQAogICAgICAgcCArPSAyICogaWR4OwogICAgICAgcmVzdWx0ID0gVFRfUEVFS19VU0hPUlQoIHAgKTsKICAgICB9CisKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKQEAgLTE1MzEsNyArMTU4Niw3IEBACiAKIAogICAgIGlmICggY2hhcl9jb2RlID49IDB4MTAwMDBVTCApCi0gICAgICBnb3RvIEV4aXQ7CisgICAgICByZXR1cm4gMDsKIAogICAgIGlmICggY2hhcl9jb2RlIDwgc3RhcnQgKQogICAgICAgY2hhcl9jb2RlID0gc3RhcnQ7CkBAIC0xNTQ3LDEwICsxNjAyLDEzIEBACiAgICAgICAgIHJlc3VsdCA9IGNoYXJfY29kZTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CisKKyAgICAgIGlmICggY2hhcl9jb2RlID49IDB4RkZGRlUgKQorICAgICAgICByZXR1cm4gMDsKKwogICAgICAgY2hhcl9jb2RlKys7CiAgICAgfQogCi0gIEV4aXQ6CiAgICAgKnBjaGFyX2NvZGUgPSByZXN1bHQ7CiAgICAgcmV0dXJuIGdpbmRleDsKICAgfQpAQCAtMTYwMiw3ICsxNjYwLDcgQEAKICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKiBUaGUgcHVycG9zZSBvZiB0aGlzIGZvcm1hdCBpcyB0byBlYXNpbHkgbWFwIFVURi0xNiB0ZXh0IHRvICAgICoqKioqLwogICAvKioqKiogZ2x5cGggaW5kaWNlcy4gIEJhc2ljYWxseSwgdGhlIGBjaGFyX2NvZGUnIG11c3QgYmUgaW4gb25lIG9mICAqKioqKi8KLSAgLyoqKioqIHRoZSBmb2xsb3dpbmcgZm9ybWF0czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiB0aGUgZm9sbG93aW5nIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqICAgLSBBIDE2LWJpdCB2YWx1ZSB0aGF0IGlzbid0IHBhcnQgb2YgdGhlIFVuaWNvZGUgU3Vycm9nYXRlcyAgKioqKiovCiAgIC8qKioqKiAgICAgQXJlYSAoaS5lLiBVK0Q4MDAtVStERkZGKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwpAQCAtMTYxNSw3ICsxNjczLDcgQEAKICAgLyoqKioqIFRoZSBgaXMzMicgdGFibGUgZW1iZWRkZWQgaW4gdGhlIGNoYXJtYXAgaW5kaWNhdGVzIHdoZXRoZXIgYSAgKioqKiovCiAgIC8qKioqKiBnaXZlbiAxNi1iaXQgdmFsdWUgaXMgaW4gdGhlIHN1cnJvZ2F0ZXMgYXJlYSBvciBub3QuICAgICAgICAgICoqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLSAgLyoqKioqIFNvLCBmb3IgYW55IGdpdmVuIGBjaGFyX2NvZGUnLCB3ZSBjYW4gYXNzZXJ0IHRoZSBmb2xsb3dpbmc6ICAgKioqKiovCisgIC8qKioqKiBTbywgZm9yIGFueSBnaXZlbiBgY2hhcl9jb2RlJywgd2UgY2FuIGFzc2VydCB0aGUgZm9sbG93aW5nLiAgICoqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqICAgSWYgYGNoYXJfaGkgPT0gMCcgdGhlbiB3ZSBtdXN0IGhhdmUgYGlzMzJbY2hhcl9sb10gPT0gMCcuICAgKioqKiovCiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwpAQCAtMTc3MCw3ICsxODI4LDEwIEBACiAKICAgICAgIGlmICggY2hhcl9jb2RlIDw9IGVuZCApCiAgICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IChGVF9VSW50KSggc3RhcnRfaWQgKyBjaGFyX2NvZGUgLSBzdGFydCApOworICAgICAgICBpZiAoIHN0YXJ0X2lkID4gMHhGRkZGRkZGRlVMIC0gKCBjaGFyX2NvZGUgLSBzdGFydCApICkKKyAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZXN1bHQgPSAoRlRfVUludCkoIHN0YXJ0X2lkICsgKCBjaGFyX2NvZGUgLSBzdGFydCApICk7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0KQEAgLTE3ODIsOCArMTg0Myw5IEBACiAgIHR0X2NtYXA4X2NoYXJfbmV4dCggVFRfQ01hcCAgICAgY21hcCwKICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICpwY2hhcl9jb2RlICkKICAgeworICAgIEZUX0ZhY2UgICAgZmFjZSAgICAgICA9IGNtYXAtPmNtYXAuY2hhcm1hcC5mYWNlOwogICAgIEZUX1VJbnQzMiAgcmVzdWx0ICAgICA9IDA7Ci0gICAgRlRfVUludDMyICBjaGFyX2NvZGUgID0gKnBjaGFyX2NvZGUgKyAxOworICAgIEZUX1VJbnQzMiAgY2hhcl9jb2RlOwogICAgIEZUX1VJbnQgICAgZ2luZGV4ICAgICA9IDA7CiAgICAgRlRfQnl0ZSogICB0YWJsZSAgICAgID0gY21hcC0+ZGF0YTsKICAgICBGVF9CeXRlKiAgIHAgICAgICAgICAgPSB0YWJsZSArIDgyMDQ7CkBAIC0xNzkxLDYgKzE4NTMsMTEgQEAKICAgICBGVF9VSW50MzIgIHN0YXJ0LCBlbmQsIHN0YXJ0X2lkOwogCiAKKyAgICBpZiAoICpwY2hhcl9jb2RlID49IDB4RkZGRkZGRkZVTCApCisgICAgICByZXR1cm4gMDsKKworICAgIGNoYXJfY29kZSA9ICpwY2hhcl9jb2RlICsgMTsKKwogICAgIHAgPSB0YWJsZSArIDgyMDg7CiAKICAgICBmb3IgKCA7IG51bV9ncm91cHMgPiAwOyBudW1fZ3JvdXBzLS0gKQpAQCAtMTgwMiwxOCArMTg2OSwzNSBAQAogICAgICAgaWYgKCBjaGFyX2NvZGUgPCBzdGFydCApCiAgICAgICAgIGNoYXJfY29kZSA9IHN0YXJ0OwogCisgICAgQWdhaW46CiAgICAgICBpZiAoIGNoYXJfY29kZSA8PSBlbmQgKQogICAgICAgewotICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIGNoYXJfY29kZSAtIHN0YXJ0ICsgc3RhcnRfaWQgKTsKLSAgICAgICAgaWYgKCBnaW5kZXggIT0gMCApCisgICAgICAgIC8qIGlnbm9yZSBpbnZhbGlkIGdyb3VwICovCisgICAgICAgIGlmICggc3RhcnRfaWQgPiAweEZGRkZGRkZGVUwgLSAoIGNoYXJfY29kZSAtIHN0YXJ0ICkgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGdpbmRleCA9IChGVF9VSW50KSggc3RhcnRfaWQgKyAoIGNoYXJfY29kZSAtIHN0YXJ0ICkgKTsKKworICAgICAgICAvKiBkb2VzIGZpcnN0IGVsZW1lbnQgb2YgZ3JvdXAgcG9pbnQgdG8gYC5ub3RkZWYnIGdseXBoPyAqLworICAgICAgICBpZiAoIGdpbmRleCA9PSAwICkKICAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IGNoYXJfY29kZTsKLSAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgaWYgKCBjaGFyX2NvZGUgPj0gMHhGRkZGRkZGRlVMICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2hhcl9jb2RlKys7CisgICAgICAgICAgZ290byBBZ2FpbjsKICAgICAgICAgfQorCisgICAgICAgIC8qIGlmIGBnaW5kZXgnIGlzIGludmFsaWQsIHRoZSByZW1haW5pbmcgdmFsdWVzICovCisgICAgICAgIC8qIGluIHRoaXMgZ3JvdXAgYXJlIGludmFsaWQsIHRvbyAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggZ2luZGV4ID49IChGVF9VSW50KWZhY2UtPm51bV9nbHlwaHMgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJlc3VsdCA9IGNoYXJfY29kZTsKKyAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQogCi0gIEV4aXQ6CiAgICAgKnBjaGFyX2NvZGUgPSByZXN1bHQ7CiAgICAgcmV0dXJuIGdpbmRleDsKICAgfQpAQCAtMTkzMCwxNCArMjAxNCwyMCBAQAogICAgIEZUX0J5dGUqICAgcCAgICAgID0gdGFibGUgKyAxMjsKICAgICBGVF9VSW50MzIgIHN0YXJ0ICA9IFRUX05FWFRfVUxPTkcoIHAgKTsKICAgICBGVF9VSW50MzIgIGNvdW50ICA9IFRUX05FWFRfVUxPTkcoIHAgKTsKLSAgICBGVF9VSW50MzIgIGlkeCAgICA9IChGVF9VTG9uZykoIGNoYXJfY29kZSAtIHN0YXJ0ICk7CisgICAgRlRfVUludDMyICBpZHg7CiAKIAorICAgIGlmICggY2hhcl9jb2RlIDwgc3RhcnQgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICBpZHggPSBjaGFyX2NvZGUgLSBzdGFydDsKKwogICAgIGlmICggaWR4IDwgY291bnQgKQogICAgIHsKICAgICAgIHAgICAgICs9IDIgKiBpZHg7CiAgICAgICByZXN1bHQgPSBUVF9QRUVLX1VTSE9SVCggcCApOwogICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIApAQCAtMTk0Nyw3ICsyMDM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAqcGNoYXJfY29kZSApCiAgIHsKICAgICBGVF9CeXRlKiAgIHRhYmxlICAgICA9IGNtYXAtPmRhdGE7Ci0gICAgRlRfVUludDMyICBjaGFyX2NvZGUgPSAqcGNoYXJfY29kZSArIDE7CisgICAgRlRfVUludDMyICBjaGFyX2NvZGU7CiAgICAgRlRfVUludCAgICBnaW5kZXggICAgPSAwOwogICAgIEZUX0J5dGUqICAgcCAgICAgICAgID0gdGFibGUgKyAxMjsKICAgICBGVF9VSW50MzIgIHN0YXJ0ICAgICA9IFRUX05FWFRfVUxPTkcoIHAgKTsKQEAgLTE5NTUsMTAgKzIwNDUsMTUgQEAKICAgICBGVF9VSW50MzIgIGlkeDsKIAogCisgICAgaWYgKCAqcGNoYXJfY29kZSA+PSAweEZGRkZGRkZGVUwgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICBjaGFyX2NvZGUgPSAqcGNoYXJfY29kZSArIDE7CisKICAgICBpZiAoIGNoYXJfY29kZSA8IHN0YXJ0ICkKICAgICAgIGNoYXJfY29kZSA9IHN0YXJ0OwogCi0gICAgaWR4ID0gKEZUX1VJbnQzMikoIGNoYXJfY29kZSAtIHN0YXJ0ICk7CisgICAgaWR4ID0gY2hhcl9jb2RlIC0gc3RhcnQ7CiAgICAgcCAgKz0gMiAqIGlkeDsKIAogICAgIGZvciAoIDsgaWR4IDwgY291bnQ7IGlkeCsrICkKQEAgLTE5NjYsNiArMjA2MSwxMCBAQAogICAgICAgZ2luZGV4ID0gVFRfTkVYVF9VU0hPUlQoIHAgKTsKICAgICAgIGlmICggZ2luZGV4ICE9IDAgKQogICAgICAgICBicmVhazsKKworICAgICAgaWYgKCBjaGFyX2NvZGUgPj0gMHhGRkZGRkZGRlVMICkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICAgIGNoYXJfY29kZSsrOwogICAgIH0KIApAQCAtMjEzNCw2ICsyMjMzLDcgQEAKICAgc3RhdGljIHZvaWQKICAgdHRfY21hcDEyX25leHQoIFRUX0NNYXAxMiAgY21hcCApCiAgIHsKKyAgICBGVF9GYWNlICAgZmFjZSA9IGNtYXAtPmNtYXAuY21hcC5jaGFybWFwLmZhY2U7CiAgICAgRlRfQnl0ZSogIHA7CiAgICAgRlRfVUxvbmcgIHN0YXJ0LCBlbmQsIHN0YXJ0X2lkLCBjaGFyX2NvZGU7CiAgICAgRlRfVUxvbmcgIG47CkBAIC0yMTU1LDE4ICsyMjU1LDM1IEBACiAgICAgICBpZiAoIGNoYXJfY29kZSA8IHN0YXJ0ICkKICAgICAgICAgY2hhcl9jb2RlID0gc3RhcnQ7CiAKLSAgICAgIGZvciAoIDsgY2hhcl9jb2RlIDw9IGVuZDsgY2hhcl9jb2RlKysgKQorICAgIEFnYWluOgorICAgICAgaWYgKCBjaGFyX2NvZGUgPD0gZW5kICkKICAgICAgIHsKLSAgICAgICAgZ2luZGV4ID0gKEZUX1VJbnQpKCBzdGFydF9pZCArIGNoYXJfY29kZSAtIHN0YXJ0ICk7CisgICAgICAgIC8qIGlnbm9yZSBpbnZhbGlkIGdyb3VwICovCisgICAgICAgIGlmICggc3RhcnRfaWQgPiAweEZGRkZGRkZGVUwgLSAoIGNoYXJfY29kZSAtIHN0YXJ0ICkgKQorICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICggZ2luZGV4ICkKKyAgICAgICAgZ2luZGV4ID0gKEZUX1VJbnQpKCBzdGFydF9pZCArICggY2hhcl9jb2RlIC0gc3RhcnQgKSApOworCisgICAgICAgIC8qIGRvZXMgZmlyc3QgZWxlbWVudCBvZiBncm91cCBwb2ludCB0byBgLm5vdGRlZicgZ2x5cGg/ICovCisgICAgICAgIGlmICggZ2luZGV4ID09IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgY21hcC0+Y3VyX2NoYXJjb2RlID0gY2hhcl9jb2RlOzsKLSAgICAgICAgICBjbWFwLT5jdXJfZ2luZGV4ICAgPSBnaW5kZXg7Ci0gICAgICAgICAgY21hcC0+Y3VyX2dyb3VwICAgID0gbjsKKyAgICAgICAgICBpZiAoIGNoYXJfY29kZSA+PSAweEZGRkZGRkZGVUwgKQorICAgICAgICAgICAgZ290byBGYWlsOwogCi0gICAgICAgICAgcmV0dXJuOworICAgICAgICAgIGNoYXJfY29kZSsrOworICAgICAgICAgIGdvdG8gQWdhaW47CiAgICAgICAgIH0KKworICAgICAgICAvKiBpZiBgZ2luZGV4JyBpcyBpbnZhbGlkLCB0aGUgcmVtYWluaW5nIHZhbHVlcyAqLworICAgICAgICAvKiBpbiB0aGlzIGdyb3VwIGFyZSBpbnZhbGlkLCB0b28gICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIGdpbmRleCA+PSAoRlRfVUludClmYWNlLT5udW1fZ2x5cGhzICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjbWFwLT5jdXJfY2hhcmNvZGUgPSBjaGFyX2NvZGU7CisgICAgICAgIGNtYXAtPmN1cl9naW5kZXggICA9IGdpbmRleDsKKyAgICAgICAgY21hcC0+Y3VyX2dyb3VwICAgID0gbjsKKworICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgfQogCkBAIC0yMTk2LDcgKzIzMTMsMTIgQEAKICAgICBlbmQgPSAweEZGRkZGRkZGVUw7CiAKICAgICBpZiAoIG5leHQgKQorICAgIHsKKyAgICAgIGlmICggY2hhcl9jb2RlID49IDB4RkZGRkZGRkZVTCApCisgICAgICAgIHJldHVybiAwOworCiAgICAgICBjaGFyX2NvZGUrKzsKKyAgICB9CiAKICAgICBtaW4gPSAwOwogICAgIG1heCA9IG51bV9ncm91cHM7CkBAIC0yMjE3LDIwICsyMzM5LDI0IEBACiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIHN0YXJ0X2lkID0gVFRfUEVFS19VTE9ORyggcCApOwotICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIHN0YXJ0X2lkICsgY2hhcl9jb2RlIC0gc3RhcnQgKTsKIAorICAgICAgICAvKiByZWplY3QgaW52YWxpZCBnbHlwaCBpbmRleCAqLworICAgICAgICBpZiAoIHN0YXJ0X2lkID4gMHhGRkZGRkZGRlVMIC0gKCBjaGFyX2NvZGUgLSBzdGFydCApICkKKyAgICAgICAgICBnaW5kZXggPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgZ2luZGV4ID0gKEZUX1VJbnQpKCBzdGFydF9pZCArICggY2hhcl9jb2RlIC0gc3RhcnQgKSApOwogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIG5leHQgKQogICAgIHsKKyAgICAgIEZUX0ZhY2UgICAgZmFjZSAgID0gY21hcC0+Y21hcC5jaGFybWFwLmZhY2U7CiAgICAgICBUVF9DTWFwMTIgIGNtYXAxMiA9IChUVF9DTWFwMTIpY21hcDsKIAogCiAgICAgICAvKiBpZiBgY2hhcl9jb2RlJyBpcyBub3QgaW4gYW55IGdyb3VwLCB0aGVuIGBtaWQnIGlzICovCiAgICAgICAvKiB0aGUgZ3JvdXAgbmVhcmVzdCB0byBgY2hhcl9jb2RlJyAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgICAgIGlmICggY2hhcl9jb2RlID4gZW5kICkKICAgICAgIHsKQEAgLTIyNDMsNiArMjM2OSw5IEBACiAgICAgICBjbWFwMTItPmN1cl9jaGFyY29kZSA9IGNoYXJfY29kZTsKICAgICAgIGNtYXAxMi0+Y3VyX2dyb3VwICAgID0gbWlkOwogCisgICAgICBpZiAoIGdpbmRleCA+PSAoRlRfVUludClmYWNlLT5udW1fZ2x5cGhzICkKKyAgICAgICAgZ2luZGV4ID0gMDsKKwogICAgICAgaWYgKCAhZ2luZGV4ICkKICAgICAgIHsKICAgICAgICAgdHRfY21hcDEyX25leHQoIGNtYXAxMiApOwpAQCAtMjI1Myw4ICsyMzgyLDcgQEAKICAgICAgIGVsc2UKICAgICAgICAgY21hcDEyLT5jdXJfZ2luZGV4ID0gZ2luZGV4OwogCi0gICAgICBpZiAoIGdpbmRleCApCi0gICAgICAgICpwY2hhcl9jb2RlID0gY21hcDEyLT5jdXJfY2hhcmNvZGU7CisgICAgICAqcGNoYXJfY29kZSA9IGNtYXAxMi0+Y3VyX2NoYXJjb2RlOwogICAgIH0KIAogICAgIHJldHVybiBnaW5kZXg7CkBAIC0yMjc0LDIzICsyNDAyLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgKnBjaGFyX2NvZGUgKQogICB7CiAgICAgVFRfQ01hcDEyICBjbWFwMTIgPSAoVFRfQ01hcDEyKWNtYXA7Ci0gICAgRlRfVUxvbmcgICBnaW5kZXg7CisgICAgRlRfVUludCAgICBnaW5kZXg7CiAKIAotICAgIGlmICggY21hcDEyLT5jdXJfY2hhcmNvZGUgPj0gMHhGRkZGRkZGRlVMICkKLSAgICAgIHJldHVybiAwOwotCiAgICAgLyogbm8gbmVlZCB0byBzZWFyY2ggKi8KICAgICBpZiAoIGNtYXAxMi0+dmFsaWQgJiYgY21hcDEyLT5jdXJfY2hhcmNvZGUgPT0gKnBjaGFyX2NvZGUgKQogICAgIHsKICAgICAgIHR0X2NtYXAxMl9uZXh0KCBjbWFwMTIgKTsKICAgICAgIGlmICggY21hcDEyLT52YWxpZCApCiAgICAgICB7Ci0gICAgICAgIGdpbmRleCA9IGNtYXAxMi0+Y3VyX2dpbmRleDsKLQotICAgICAgICAvKiBYWFg6IGNoZWNrIGN1cl9jaGFyY29kZSBvdmVyZmxvdyBpcyBleHBlY3RlZCAqLwotICAgICAgICBpZiAoIGdpbmRleCApCi0gICAgICAgICAgKnBjaGFyX2NvZGUgPSAoRlRfVUludDMyKWNtYXAxMi0+Y3VyX2NoYXJjb2RlOworICAgICAgICBnaW5kZXggICAgICA9IGNtYXAxMi0+Y3VyX2dpbmRleDsKKyAgICAgICAgKnBjaGFyX2NvZGUgPSAoRlRfVUludDMyKWNtYXAxMi0+Y3VyX2NoYXJjb2RlOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgICBnaW5kZXggPSAwOwpAQCAtMjI5OCw4ICsyNDIwLDcgQEAKICAgICBlbHNlCiAgICAgICBnaW5kZXggPSB0dF9jbWFwMTJfY2hhcl9tYXBfYmluYXJ5KCBjbWFwLCBwY2hhcl9jb2RlLCAxICk7CiAKLSAgICAvKiBYWFg6IGNoZWNrIGdpbmRleCBvdmVyZmxvdyBpcyBleHBlY3RlZCAqLwotICAgIHJldHVybiAoRlRfVUludDMyKWdpbmRleDsKKyAgICByZXR1cm4gZ2luZGV4OwogICB9CiAKIApAQCAtMjQ1OCw2ICsyNTc5LDcgQEAKICAgc3RhdGljIHZvaWQKICAgdHRfY21hcDEzX25leHQoIFRUX0NNYXAxMyAgY21hcCApCiAgIHsKKyAgICBGVF9GYWNlICAgZmFjZSA9IGNtYXAtPmNtYXAuY21hcC5jaGFybWFwLmZhY2U7CiAgICAgRlRfQnl0ZSogIHA7CiAgICAgRlRfVUxvbmcgIHN0YXJ0LCBlbmQsIGdseXBoX2lkLCBjaGFyX2NvZGU7CiAgICAgRlRfVUxvbmcgIG47CkBAIC0yNDgzLDkgKzI2MDUsOSBAQAogICAgICAgewogICAgICAgICBnaW5kZXggPSAoRlRfVUludClnbHlwaF9pZDsKIAotICAgICAgICBpZiAoIGdpbmRleCApCisgICAgICAgIGlmICggZ2luZGV4ICYmIGdpbmRleCA8IChGVF9VSW50KWZhY2UtPm51bV9nbHlwaHMgKQogICAgICAgICB7Ci0gICAgICAgICAgY21hcC0+Y3VyX2NoYXJjb2RlID0gY2hhcl9jb2RlOzsKKyAgICAgICAgICBjbWFwLT5jdXJfY2hhcmNvZGUgPSBjaGFyX2NvZGU7CiAgICAgICAgICAgY21hcC0+Y3VyX2dpbmRleCAgID0gZ2luZGV4OwogICAgICAgICAgIGNtYXAtPmN1cl9ncm91cCAgICA9IG47CiAKQEAgLTI1MjAsNyArMjY0MiwxMiBAQAogICAgIGVuZCA9IDB4RkZGRkZGRkZVTDsKIAogICAgIGlmICggbmV4dCApCisgICAgeworICAgICAgaWYgKCBjaGFyX2NvZGUgPj0gMHhGRkZGRkZGRlVMICkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICAgIGNoYXJfY29kZSsrOworICAgIH0KIAogICAgIG1pbiA9IDA7CiAgICAgbWF4ID0gbnVtX2dyb3VwczsKQEAgLTI1NDgsNiArMjY3NSw3IEBACiAKICAgICBpZiAoIG5leHQgKQogICAgIHsKKyAgICAgIEZUX0ZhY2UgICAgZmFjZSAgID0gY21hcC0+Y21hcC5jaGFybWFwLmZhY2U7CiAgICAgICBUVF9DTWFwMTMgIGNtYXAxMyA9IChUVF9DTWFwMTMpY21hcDsKIAogCkBAIC0yNTY1LDYgKzI2OTMsOSBAQAogICAgICAgY21hcDEzLT5jdXJfY2hhcmNvZGUgPSBjaGFyX2NvZGU7CiAgICAgICBjbWFwMTMtPmN1cl9ncm91cCAgICA9IG1pZDsKIAorICAgICAgaWYgKCBnaW5kZXggPj0gKEZUX1VJbnQpZmFjZS0+bnVtX2dseXBocyApCisgICAgICAgIGdpbmRleCA9IDA7CisKICAgICAgIGlmICggIWdpbmRleCApCiAgICAgICB7CiAgICAgICAgIHR0X2NtYXAxM19uZXh0KCBjbWFwMTMgKTsKQEAgLTI1NzUsOCArMjcwNiw3IEBACiAgICAgICBlbHNlCiAgICAgICAgIGNtYXAxMy0+Y3VyX2dpbmRleCA9IGdpbmRleDsKIAotICAgICAgaWYgKCBnaW5kZXggKQotICAgICAgICAqcGNoYXJfY29kZSA9IGNtYXAxMy0+Y3VyX2NoYXJjb2RlOworICAgICAgKnBjaGFyX2NvZGUgPSBjbWFwMTMtPmN1cl9jaGFyY29kZTsKICAgICB9CiAKICAgICByZXR1cm4gZ2luZGV4OwpAQCAtMjU5OSwxOCArMjcyOSwxNCBAQAogICAgIEZUX1VJbnQgICAgZ2luZGV4OwogCiAKLSAgICBpZiAoIGNtYXAxMy0+Y3VyX2NoYXJjb2RlID49IDB4RkZGRkZGRkZVTCApCi0gICAgICByZXR1cm4gMDsKLQogICAgIC8qIG5vIG5lZWQgdG8gc2VhcmNoICovCiAgICAgaWYgKCBjbWFwMTMtPnZhbGlkICYmIGNtYXAxMy0+Y3VyX2NoYXJjb2RlID09ICpwY2hhcl9jb2RlICkKICAgICB7CiAgICAgICB0dF9jbWFwMTNfbmV4dCggY21hcDEzICk7CiAgICAgICBpZiAoIGNtYXAxMy0+dmFsaWQgKQogICAgICAgewotICAgICAgICBnaW5kZXggPSBjbWFwMTMtPmN1cl9naW5kZXg7Ci0gICAgICAgIGlmICggZ2luZGV4ICkKLSAgICAgICAgICAqcGNoYXJfY29kZSA9IGNtYXAxMy0+Y3VyX2NoYXJjb2RlOworICAgICAgICBnaW5kZXggICAgICA9IGNtYXAxMy0+Y3VyX2dpbmRleDsKKyAgICAgICAgKnBjaGFyX2NvZGUgPSBjbWFwMTMtPmN1cl9jaGFyY29kZTsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgICAgZ2luZGV4ID0gMDsKQEAgLTM0OTYsNyArMzYyMiw3IEBACiAgICAgewogICAgICAgRlRfRVJST1IoKCAidHRfZmFjZV9idWlsZF9jbWFwczoiCiAgICAgICAgICAgICAgICAgICIgdW5zdXBwb3J0ZWQgYGNtYXAnIHRhYmxlIGZvcm1hdCA9ICVkXG4iLAotICAgICAgICAgICAgICAgICBUVF9QRUVLX1VTSE9SVCggcCAtIDIpICkpOworICAgICAgICAgICAgICAgICBUVF9QRUVLX1VTSE9SVCggcCAtIDIgKSApKTsKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRjbWFwLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dGNtYXAuaAppbmRleCAwZmRlMTY3Li5iN2VhOGVlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dGNtYXAuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dGNtYXAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSAoY21hcCkgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDA1LCAyMDA5LCAyMDEyIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRjbWFwYy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRjbWFwYy5oCmluZGV4IDJlYTIwNDMuLjRhNDg5NDAgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0Y21hcGMuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dGNtYXBjLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVFQgQ01BUCBjbGFzc2VzIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDkgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0a2Vybi5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRrZXJuLmMKaW5kZXggNDU1ZTdiNS4uNGZjY2M1MyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRrZXJuLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRrZXJuLmMKQEAgLTUsNyArNSw3IEBACiAvKiAgICBMb2FkIHRoZSBiYXNpYyBUcnVlVHlwZSBrZXJuaW5nIHRhYmxlLiAgVGhpcyBkb2Vzbid0IGhhbmRsZSAgICAgICAgICAqLwogLyogICAga2VybmluZyBkYXRhIHdpdGhpbiB0aGUgR1BPUyB0YWJsZSBhdCB0aGUgbW9tZW50LiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwNywgMjAwOSwgMjAxMCwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEwOCw4ICsxMDgsOCBAQAogICAgICAgICBwX25leHQgPSBwX2xpbWl0OwogCiAgICAgICAvKiBvbmx5IHVzZSBob3Jpem9udGFsIGtlcm5pbmcgdGFibGVzICovCi0gICAgICBpZiAoICggY292ZXJhZ2UgJiB+OCApICE9IDB4MDAwMSB8fAotICAgICAgICAgICBwICsgOCA+IHBfbGltaXQgICAgICAgICAgICAgKQorICAgICAgaWYgKCAoIGNvdmVyYWdlICYgfjhVICkgIT0gMHgwMDAxIHx8CisgICAgICAgICAgIHAgKyA4ID4gcF9saW1pdCAgICAgICAgICAgICAgKQogICAgICAgICBnb3RvIE5leHRUYWJsZTsKIAogICAgICAgbnVtX3BhaXJzID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0a2Vybi5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRrZXJuLmgKaW5kZXggZGYxZGE5Yi4uODljYjI0ZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRrZXJuLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRrZXJuLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBMb2FkIHRoZSBiYXNpYyBUcnVlVHlwZSBrZXJuaW5nIHRhYmxlLiAgVGhpcyBkb2Vzbid0IGhhbmRsZSAgICAgICAgICAqLwogLyogICAga2VybmluZyBkYXRhIHdpdGhpbiB0aGUgR1BPUyB0YWJsZSBhdCB0aGUgbW9tZW50LiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMiwgMjAwNSwgMjAwNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0bG9hZC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRsb2FkLmMKaW5kZXggODMzODE1MC4uYzFiZDdmMCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRsb2FkLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRsb2FkLmMKQEAgLTUsNyArNSw3IEBACiAvKiAgICBMb2FkIHRoZSBiYXNpYyBUcnVlVHlwZSB0YWJsZXMsIGkuZS4sIHRhYmxlcyB0aGF0IGNhbiBiZSBlaXRoZXIgaW4gICAqLwogLyogICAgVFRGIG9yIE9URiBmb250cyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxMCwgMjAxMi0yMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE1MSw3ICsxNTEsOCBAQAogCiAgIC8qIEhlcmUsIHdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIGNoZWNrIHRoYXQgYG51bV90YWJsZXMnIGlzIHZhbGlkIChhbmQgYWRqdXN0IGl0IGlmIG5lY2Vzc2FyeSkgICovCisgIC8qIC0gY2hlY2sgdGhhdCBgbnVtX3RhYmxlcycgaXMgdmFsaWQgKGFuZCBhZGp1c3QgaXQgaWYgbmVjZXNzYXJ5KTsgKi8KKyAgLyogICBhbHNvIHJldHVybiB0aGUgbnVtYmVyIG9mIHZhbGlkIHRhYmxlIGVudHJpZXMgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIC0gbG9vayBmb3IgYSBgaGVhZCcgdGFibGUsIGNoZWNrIGl0cyBzaXplLCBhbmQgcGFyc2UgaXQgdG8gY2hlY2sgKi8KICAgLyogICB3aGV0aGVyIGl0cyBgbWFnaWMnIGZpZWxkIGlzIGNvcnJlY3RseSBzZXQgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTY3LDcgKzE2OCw4IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIEZUX0Vycm9yCiAgIGNoZWNrX3RhYmxlX2RpciggU0ZOVF9IZWFkZXIgIHNmbnQsCi0gICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgIHN0cmVhbSApCisgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgdmFsaWQgKQogICB7CiAgICAgRlRfRXJyb3IgICBlcnJvcjsKICAgICBGVF9VU2hvcnQgIG5uLCB2YWxpZF9lbnRyaWVzID0gMDsKQEAgLTIwOCwxMyArMjEwLDI3IEBACiAKICAgICAgIC8qIHdlIGlnbm9yZSBpbnZhbGlkIHRhYmxlcyAqLwogCi0gICAgICAvKiB0YWJsZS5PZmZzZXQgKyB0YWJsZS5MZW5ndGggPiBzdHJlYW0tPnNpemUgPyAqLwotICAgICAgaWYgKCB0YWJsZS5MZW5ndGggPiBzdHJlYW0tPnNpemUgICAgICAgICAgICAgICAgfHwKLSAgICAgICAgICAgdGFibGUuT2Zmc2V0ID4gc3RyZWFtLT5zaXplIC0gdGFibGUuTGVuZ3RoICkKKyAgICAgIGlmICggdGFibGUuT2Zmc2V0ID4gc3RyZWFtLT5zaXplICkKICAgICAgIHsKICAgICAgICAgRlRfVFJBQ0UyKCggImNoZWNrX3RhYmxlX2RpcjogdGFibGUgZW50cnkgJWQgaW52YWxpZFxuIiwgbm4gKSk7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQorICAgICAgZWxzZSBpZiAoIHRhYmxlLkxlbmd0aCA+IHN0cmVhbS0+c2l6ZSAtIHRhYmxlLk9mZnNldCApCisgICAgICB7CisgICAgICAgIC8qIFNvbWUgdGFibGVzIGhhdmUgc3VjaCBhIHNpbXBsZSBzdHJ1Y3R1cmUgdGhhdCBjbGlwcGluZyBpdHMgICAgICovCisgICAgICAgIC8qIGNvbnRlbnRzIGlzIGhhcm1sZXNzLiAgVGhpcyBhbHNvIG1ha2VzIEZyZWVUeXBlIGxlc3Mgc2Vuc2l0aXZlICovCisgICAgICAgIC8qIHRvIGludmFsaWQgdGFibGUgbGVuZ3RocyAod2hpY2ggcHJvZ3JhbXMgbGlrZSBBY3JvcmVhZCBzZWVtIHRvICovCisgICAgICAgIC8qIGlnbm9yZSBpbiBnZW5lcmFsKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgaWYgKCB0YWJsZS5UYWcgPT0gVFRBR19obXR4IHx8CisgICAgICAgICAgICAgdGFibGUuVGFnID09IFRUQUdfdm10eCApCisgICAgICAgICAgdmFsaWRfZW50cmllcysrOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTIoKCAiY2hlY2tfdGFibGVfZGlyOiB0YWJsZSBlbnRyeSAlZCBpbnZhbGlkXG4iLCBubiApKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgfQogICAgICAgZWxzZQogICAgICAgICB2YWxpZF9lbnRyaWVzKys7CiAKQEAgLTI2MiwxMSArMjc4LDExIEBACiAgICAgICAgIGhhc19tZXRhID0gMTsKICAgICB9CiAKLSAgICBzZm50LT5udW1fdGFibGVzID0gdmFsaWRfZW50cmllczsKKyAgICAqdmFsaWQgPSB2YWxpZF9lbnRyaWVzOwogCi0gICAgaWYgKCBzZm50LT5udW1fdGFibGVzID09IDAgKQorICAgIGlmICggIXZhbGlkX2VudHJpZXMgKQogICAgIHsKLSAgICAgIEZUX1RSQUNFMigoICJjaGVja190YWJsZV9kaXI6IG5vIHRhYmxlcyBmb3VuZFxuIiApKTsKKyAgICAgIEZUX1RSQUNFMigoICJjaGVja190YWJsZV9kaXI6IG5vIHZhbGlkIHRhYmxlcyBmb3VuZFxuIiApKTsKICAgICAgIGVycm9yID0gRlRfVEhST1coIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKICAgICAgIGdvdG8gRXhpdDsKICAgICB9CkBAIC0zMjIsOCArMzM4LDcgQEAKICAgICBTRk5UX0hlYWRlclJlYyAgc2ZudDsKICAgICBGVF9FcnJvciAgICAgICAgZXJyb3I7CiAgICAgRlRfTWVtb3J5ICAgICAgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OwotICAgIFRUX1RhYmxlUmVjKiAgICBlbnRyeTsKLSAgICBGVF9JbnQgICAgICAgICAgbm47CisgICAgRlRfVVNob3J0ICAgICAgIG5uLCB2YWxpZF9lbnRyaWVzOwogCiAgICAgc3RhdGljIGNvbnN0IEZUX0ZyYW1lX0ZpZWxkICBvZmZzZXRfdGFibGVfZmllbGRzW10gPQogICAgIHsKQEAgLTM2NCw1OSArMzc5LDExNCBAQAogICAgIGlmICggc2ZudC5mb3JtYXRfdGFnICE9IFRUQUdfT1RUTyApCiAgICAgewogICAgICAgLyogY2hlY2sgZmlyc3QgKi8KLSAgICAgIGVycm9yID0gY2hlY2tfdGFibGVfZGlyKCAmc2ZudCwgc3RyZWFtICk7CisgICAgICBlcnJvciA9IGNoZWNrX3RhYmxlX2RpciggJnNmbnQsIHN0cmVhbSwgJnZhbGlkX2VudHJpZXMgKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgewogICAgICAgICBGVF9UUkFDRTIoKCAidHRfZmFjZV9sb2FkX2ZvbnRfZGlyOiIKICAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIHRhYmxlIGRpcmVjdG9yeSBmb3IgVHJ1ZVR5cGVcbiIgKSk7Ci0KICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQogICAgIH0KKyAgICBlbHNlCisgICAgICB2YWxpZF9lbnRyaWVzID0gc2ZudC5udW1fdGFibGVzOwogCi0gICAgZmFjZS0+bnVtX3RhYmxlcyA9IHNmbnQubnVtX3RhYmxlczsKKyAgICBmYWNlLT5udW1fdGFibGVzID0gdmFsaWRfZW50cmllczsKICAgICBmYWNlLT5mb3JtYXRfdGFnID0gc2ZudC5mb3JtYXRfdGFnOwogCiAgICAgaWYgKCBGVF9RTkVXX0FSUkFZKCBmYWNlLT5kaXJfdGFibGVzLCBmYWNlLT5udW1fdGFibGVzICkgKQogICAgICAgZ290byBFeGl0OwogCi0gICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggc2ZudC5vZmZzZXQgKyAxMiApICAgICAgIHx8Ci0gICAgICAgICBGVF9GUkFNRV9FTlRFUiggZmFjZS0+bnVtX3RhYmxlcyAqIDE2TCApICkKKyAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBzZm50Lm9mZnNldCArIDEyICkgICAgICB8fAorICAgICAgICAgRlRfRlJBTUVfRU5URVIoIHNmbnQubnVtX3RhYmxlcyAqIDE2TCApICkKICAgICAgIGdvdG8gRXhpdDsKIAotICAgIGVudHJ5ID0gZmFjZS0+ZGlyX3RhYmxlczsKLQogICAgIEZUX1RSQUNFMigoICJcbiIKICAgICAgICAgICAgICAgICAiICB0YWcgICAgb2Zmc2V0ICAgIGxlbmd0aCAgIGNoZWNrc3VtXG4iCiAgICAgICAgICAgICAgICAgIiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIiApKTsKIAorICAgIHZhbGlkX2VudHJpZXMgPSAwOwogICAgIGZvciAoIG5uID0gMDsgbm4gPCBzZm50Lm51bV90YWJsZXM7IG5uKysgKQogICAgIHsKLSAgICAgIGVudHJ5LT5UYWcgICAgICA9IEZUX0dFVF9UQUc0KCk7Ci0gICAgICBlbnRyeS0+Q2hlY2tTdW0gPSBGVF9HRVRfVUxPTkcoKTsKLSAgICAgIGVudHJ5LT5PZmZzZXQgICA9IEZUX0dFVF9VTE9ORygpOwotICAgICAgZW50cnktPkxlbmd0aCAgID0gRlRfR0VUX1VMT05HKCk7CisgICAgICBUVF9UYWJsZVJlYyAgZW50cnk7CisgICAgICBGVF9VU2hvcnQgICAgaTsKKyAgICAgIEZUX0Jvb2wgICAgICBkdXBsaWNhdGU7CiAKLSAgICAgIC8qIGlnbm9yZSBpbnZhbGlkIHRhYmxlcyAqLwogCi0gICAgICAvKiBlbnRyeS0+T2Zmc2V0ICsgZW50cnktPkxlbmd0aCA+IHN0cmVhbS0+c2l6ZSA/ICovCi0gICAgICBpZiAoIGVudHJ5LT5MZW5ndGggPiBzdHJlYW0tPnNpemUgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAgICAgIGVudHJ5LT5PZmZzZXQgPiBzdHJlYW0tPnNpemUgLSBlbnRyeS0+TGVuZ3RoICkKKyAgICAgIGVudHJ5LlRhZyAgICAgID0gRlRfR0VUX1RBRzQoKTsKKyAgICAgIGVudHJ5LkNoZWNrU3VtID0gRlRfR0VUX1VMT05HKCk7CisgICAgICBlbnRyeS5PZmZzZXQgICA9IEZUX0dFVF9VTE9ORygpOworICAgICAgZW50cnkuTGVuZ3RoICAgPSBGVF9HRVRfVUxPTkcoKTsKKworICAgICAgLyogaWdub3JlIGludmFsaWQgdGFibGVzIHRoYXQgY2FuJ3QgYmUgc2FuaXRpemVkICovCisKKyAgICAgIGlmICggZW50cnkuT2Zmc2V0ID4gc3RyZWFtLT5zaXplICkKICAgICAgICAgY29udGludWU7CisgICAgICBlbHNlIGlmICggZW50cnkuTGVuZ3RoID4gc3RyZWFtLT5zaXplIC0gZW50cnkuT2Zmc2V0ICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBlbnRyeS5UYWcgPT0gVFRBR19obXR4IHx8CisgICAgICAgICAgICAgZW50cnkuVGFnID09IFRUQUdfdm10eCApCisgICAgICAgIHsKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICAgIEZUX1VMb25nICBvbGRfbGVuZ3RoID0gZW50cnkuTGVuZ3RoOworI2VuZGlmCisKKworICAgICAgICAgIC8qIG1ha2UgbWV0cmljcyB0YWJsZSBsZW5ndGggYSBtdWx0aXBsZSBvZiA0ICovCisgICAgICAgICAgZW50cnkuTGVuZ3RoID0gKCBzdHJlYW0tPnNpemUgLSBlbnRyeS5PZmZzZXQgKSAmIH4zVTsKKworICAgICAgICAgIEZUX1RSQUNFMigoICIgICVjJWMlYyVjICAlMDhseCAgJTA4bHggICUwOGx4IgorICAgICAgICAgICAgICAgICAgICAgICIgKHNhbml0aXplZDsgb3JpZ2luYWwgbGVuZ3RoICUwOGx4KSIsCisgICAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS5UYWcgPj4gMjQgKSwKKyAgICAgICAgICAgICAgICAgICAgICAoRlRfQ2hhcikoIGVudHJ5LlRhZyA+PiAxNiApLAorICAgICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggZW50cnkuVGFnID4+IDggICksCisgICAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS5UYWcgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5PZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgZW50cnkuTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LkNoZWNrU3VtLAorICAgICAgICAgICAgICAgICAgICAgIG9sZF9sZW5ndGggKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICBlbHNlCisgICAgICAgIEZUX1RSQUNFMigoICIgICVjJWMlYyVjICAlMDhseCAgJTA4bHggICUwOGx4IiwKKyAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS5UYWcgPj4gMjQgKSwKKyAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS5UYWcgPj4gMTYgKSwKKyAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS5UYWcgPj4gOCAgKSwKKyAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS5UYWcgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgZW50cnkuT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBlbnRyeS5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LkNoZWNrU3VtICkpOworI2VuZGlmCisKKyAgICAgIC8qIGlnbm9yZSBkdXBsaWNhdGUgdGFibGVzIOKAkyB0aGUgZmlyc3Qgb25lIHdpbnMgKi8KKyAgICAgIGR1cGxpY2F0ZSA9IDA7CisgICAgICBmb3IgKCBpID0gMDsgaSA8IHZhbGlkX2VudHJpZXM7IGkrKyApCisgICAgICB7CisgICAgICAgIGlmICggZmFjZS0+ZGlyX3RhYmxlc1tpXS5UYWcgPT0gZW50cnkuVGFnICkKKyAgICAgICAgeworICAgICAgICAgIGR1cGxpY2F0ZSA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmICggZHVwbGljYXRlICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UyKCggIiAgKGR1cGxpY2F0ZSwgaWdub3JlZClcbiIgKSk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBGVF9UUkFDRTIoKCAiICAlYyVjJWMlYyAgJTA4bHggICUwOGx4ICAlMDhseFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS0+VGFnID4+IDI0ICksCi0gICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggZW50cnktPlRhZyA+PiAxNiApLAotICAgICAgICAgICAgICAgICAgICAoRlRfQ2hhcikoIGVudHJ5LT5UYWcgPj4gOCAgKSwKLSAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCBlbnRyeS0+VGFnICAgICAgICksCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5PZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5MZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5DaGVja1N1bSApKTsKLSAgICAgICAgZW50cnkrKzsKKyAgICAgICAgRlRfVFJBQ0UyKCggIlxuIiApKTsKKworICAgICAgICAvKiB3ZSBmaW5hbGx5IGhhdmUgYSB2YWxpZCBlbnRyeSAqLworICAgICAgICBmYWNlLT5kaXJfdGFibGVzW3ZhbGlkX2VudHJpZXMrK10gPSBlbnRyeTsKICAgICAgIH0KICAgICB9CiAKKyAgICAvKiBmaW5hbCBhZGp1c3RtZW50IHRvIG51bWJlciBvZiB0YWJsZXMgKi8KKyAgICBmYWNlLT5udW1fdGFibGVzID0gdmFsaWRfZW50cmllczsKKwogICAgIEZUX0ZSQU1FX0VYSVQoKTsKIAogICAgIEZUX1RSQUNFMigoICJ0YWJsZSBkaXJlY3RvcnkgbG9hZGVkXG5cbiIgKSk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dGxvYWQuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0bG9hZC5oCmluZGV4IDQ5YTFhZWUuLmE2ZDkxYzUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0bG9hZC5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0bG9hZC5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgTG9hZCB0aGUgYmFzaWMgVHJ1ZVR5cGUgdGFibGVzLCBpLmUuLCB0YWJsZXMgdGhhdCBjYW4gYmUgZWl0aGVyIGluICAgKi8KIC8qICAgIFRURiBvciBPVEYgZm9udHMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDEsIDIwMDIsIDIwMDUsIDIwMDYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dG10eC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRtdHguYwppbmRleCBiYjMxOTU3Li41ODMwOWFhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dG10eC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0bXR4LmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgTG9hZCB0aGUgbWV0cmljcyB0YWJsZXMgY29tbW9uIHRvIFRURiBhbmQgT1RGIGZvbnRzIChib2R5KS4gICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAwOSwgMjAxMS0yMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0bXR4LmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dG10eC5oCmluZGV4IGZiMDQwMzkuLjA5NmVlMDYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0bXR4LmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRtdHguaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBMb2FkIHRoZSBtZXRyaWNzIHRhYmxlcyBjb21tb24gdG8gVFRGIGFuZCBPVEYgZm9udHMgKHNwZWNpZmljYXRpb24pLiAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNiwgMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRwb3N0LmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dHBvc3QuYwppbmRleCA5OWQ4MDA1Li44ZDI5ZDFlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dHBvc3QuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dHBvc3QuYwpAQCAtNSw3ICs1LDcgQEAKIC8qICAgIFBvc3RjcmlwdCBuYW1lIHRhYmxlIHByb2Nlc3NpbmcgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBmb250cyAgICAgICovCiAvKiAgICAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAzLCAyMDA2LTIwMTAsIDIwMTMsIDIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNTIsNyArNTIsNyBAQAogCiAjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAogCi0jZGVmaW5lIE1BQ19OQU1FKCB4ICkgICggKEZUX1N0cmluZyopcHNuYW1lcy0+bWFjaW50b3NoX25hbWUoIHggKSApCisjZGVmaW5lIE1BQ19OQU1FKCB4ICkgIChGVF9TdHJpbmcqKXBzbmFtZXMtPm1hY2ludG9zaF9uYW1lKCAoRlRfVUludCkoeCkgKQogCiAKICNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUyAqLwpAQCAtNjIsNyArNjIsNyBAQAogICAgLyogdGFibGUgb2YgTWFjIG5hbWVzLiAgVGh1cywgaXQgaXMgcG9zc2libGUgdG8gYnVpbGQgYSB2ZXJzaW9uIG9mICovCiAgICAvKiBGcmVlVHlwZSB3aXRob3V0IHRoZSBUeXBlIDEgZHJpdmVyICYgUFNOYW1lcyBtb2R1bGUuICAgICAgICAgICAgKi8KIAotI2RlZmluZSBNQUNfTkFNRSggeCApICAoIChGVF9TdHJpbmcqKXR0X3Bvc3RfZGVmYXVsdF9uYW1lc1t4XSApCisjZGVmaW5lIE1BQ19OQU1FKCB4ICkgIChGVF9TdHJpbmcqKXR0X3Bvc3RfZGVmYXVsdF9uYW1lc1t4XQogCiAgIC8qIHRoZSAyNTggZGVmYXVsdCBNYWMgUFMgZ2x5cGggbmFtZXM7IHNlZSBmaWxlIGB0b29scy9nbG5hbWVzLnB5JyAqLwogCkBAIC0xNTUsNyArMTU1LDcgQEAKICAgc3RhdGljIEZUX0Vycm9yCiAgIGxvYWRfZm9ybWF0XzIwKCBUVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgcG9zdF9saW1pdCApCisgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHBvc3RfbGltaXQgKQogICB7CiAgICAgRlRfTWVtb3J5ICAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CiAgICAgRlRfRXJyb3IgICAgZXJyb3I7CkBAIC0xNjMsOCArMTYzLDggQEAKICAgICBGVF9JbnQgICAgICBudW1fZ2x5cGhzOwogICAgIEZUX1VTaG9ydCAgIG51bV9uYW1lczsKIAotICAgIEZUX1VTaG9ydCogIGdseXBoX2luZGljZXMgPSAwOwotICAgIEZUX0NoYXIqKiAgIG5hbWVfc3RyaW5ncyAgPSAwOworICAgIEZUX1VTaG9ydCogIGdseXBoX2luZGljZXMgPSBOVUxMOworICAgIEZUX0NoYXIqKiAgIG5hbWVfc3RyaW5ncyAgPSBOVUxMOwogCiAKICAgICBpZiAoIEZUX1JFQURfVVNIT1JUKCBudW1fZ2x5cGhzICkgKQpAQCAtMjQzLDE0ICsyNDMsMTcgQEAKICAgICAgICAgICAgIGdvdG8gRmFpbDE7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIChGVF9JbnQpbGVuID4gcG9zdF9saW1pdCAgICAgICAgICAgICAgICAgICB8fAotICAgICAgICAgICAgIEZUX1NUUkVBTV9QT1MoKSA+IHBvc3RfbGltaXQgLSAoRlRfSW50KWxlbiApCisgICAgICAgIGlmICggbGVuID4gcG9zdF9saW1pdCAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgIEZUX1NUUkVBTV9QT1MoKSA+IHBvc3RfbGltaXQgLSBsZW4gKQogICAgICAgICB7CisgICAgICAgICAgRlRfSW50ICBkID0gKEZUX0ludClwb3N0X2xpbWl0IC0gKEZUX0ludClGVF9TVFJFQU1fUE9TKCk7CisKKwogICAgICAgICAgIEZUX0VSUk9SKCggImxvYWRfZm9ybWF0XzIwOiIKICAgICAgICAgICAgICAgICAgICAgICIgZXhjZWVkaW5nIHN0cmluZyBsZW5ndGggKCVkKSwiCiAgICAgICAgICAgICAgICAgICAgICAiIHRydW5jYXRpbmcgYXQgZW5kIG9mIHBvc3QgdGFibGUgKCVkIGJ5dGUgbGVmdClcbiIsCi0gICAgICAgICAgICAgICAgICAgICBsZW4sIHBvc3RfbGltaXQgLSBGVF9TVFJFQU1fUE9TKCkgKSk7Ci0gICAgICAgICAgbGVuID0gRlRfTUFYKCAwLCBwb3N0X2xpbWl0IC0gRlRfU1RSRUFNX1BPUygpICk7CisgICAgICAgICAgICAgICAgICAgICBsZW4sIGQgKSk7CisgICAgICAgICAgbGVuID0gKEZUX1VJbnQpRlRfTUFYKCAwLCBkICk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIEZUX05FV19BUlJBWSggbmFtZV9zdHJpbmdzW25dLCBsZW4gKyAxICkgfHwKQEAgLTMwNywxMyArMzEwLDEzIEBACiAgIHN0YXRpYyBGVF9FcnJvcgogICBsb2FkX2Zvcm1hdF8yNSggVFRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIHBvc3RfbGltaXQgKQorICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBwb3N0X2xpbWl0ICkKICAgewogICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CiAgICAgRlRfRXJyb3IgICBlcnJvcjsKIAogICAgIEZUX0ludCAgICAgbnVtX2dseXBoczsKLSAgICBGVF9DaGFyKiAgIG9mZnNldF90YWJsZSA9IDA7CisgICAgRlRfQ2hhciogICBvZmZzZXRfdGFibGUgPSBOVUxMOwogCiAgICAgRlRfVU5VU0VEKCBwb3N0X2xpbWl0ICk7CiAKQEAgLTM3Nyw3ICszODAsNyBAQAogICAgIEZUX0Vycm9yICAgZXJyb3I7CiAgICAgRlRfRml4ZWQgICBmb3JtYXQ7CiAgICAgRlRfVUxvbmcgICBwb3N0X2xlbjsKLSAgICBGVF9Mb25nICAgIHBvc3RfbGltaXQ7CisgICAgRlRfVUxvbmcgICBwb3N0X2xpbWl0OwogCiAKICAgICAvKiBnZXQgYSBzdHJlYW0gZm9yIHRoZSBmYWNlJ3MgcmVzb3VyY2UgKi8KQEAgLTU0NywxMCArNTUwLDcgQEAKICAgICAgIH0KIAogICAgICAgaWYgKCBpZHggPCAoRlRfVUludCl0YWJsZS0+bnVtX2dseXBocyApICAgIC8qIHBhcmFub2lkIGNoZWNraW5nICovCi0gICAgICB7Ci0gICAgICAgIGlkeCAgICArPSB0YWJsZS0+b2Zmc2V0c1tpZHhdOwotICAgICAgICAqUFNuYW1lID0gTUFDX05BTUUoIGlkeCApOwotICAgICAgfQorICAgICAgICAqUFNuYW1lID0gTUFDX05BTUUoIChGVF9JbnQpaWR4ICsgdGFibGUtPm9mZnNldHNbaWR4XSApOwogICAgIH0KIAogICAgIC8qIG5vdGhpbmcgdG8gZG8gZm9yIGZvcm1hdCA9PSAweDAwMDMwMDAwTCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRwb3N0LmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dHBvc3QuaAppbmRleCA2ZjA2ZDc1Li5lM2VjYTAyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dHBvc3QuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dHBvc3QuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIFBvc3RjcmlwdCBuYW1lIHRhYmxlIHByb2Nlc3NpbmcgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBmb250cyAgICAgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDAyIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRzYml0LmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dHNiaXQuYwppbmRleCBjMmRiOTZjLi4zYjM1MWVjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dHNiaXQuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc2ZudC90dHNiaXQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZW1iZWRkZWQgYml0bWFwIHN1cHBvcnQgKGJvZHkpLiAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDA5LCAyMDEzLCAyMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgQ29weXJpZ2h0IDIwMTMgYnkgR29vZ2xlLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTAxLDEwICsxMDEsMTAgQEAKIAogICAgICAgICBwID0gZmFjZS0+c2JpdF90YWJsZTsKIAotICAgICAgICB2ZXJzaW9uICAgICA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICAgICAgdmVyc2lvbiAgICAgPSBGVF9ORVhUX0xPTkcoIHAgKTsKICAgICAgICAgbnVtX3N0cmlrZXMgPSBGVF9ORVhUX1VMT05HKCBwICk7CiAKLSAgICAgICAgaWYgKCAoIHZlcnNpb24gJiAweEZGRkYwMDAwVUwgKSAhPSAweDAwMDIwMDAwVUwgKQorICAgICAgICBpZiAoICggKEZUX1VMb25nKXZlcnNpb24gJiAweEZGRkYwMDAwVUwgKSAhPSAweDAwMDIwMDAwVUwgKQogICAgICAgICB7CiAgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOwogICAgICAgICAgIGdvdG8gRXhpdDsKQEAgLTI1NCwxNSArMjU0LDE1IEBACiAgICAgICAgIG1ldHJpY3MtPnhfcHBlbSA9IChGVF9VU2hvcnQpc3RyaWtlWzQ0XTsKICAgICAgICAgbWV0cmljcy0+eV9wcGVtID0gKEZUX1VTaG9ydClzdHJpa2VbNDVdOwogCi0gICAgICAgIG1ldHJpY3MtPmFzY2VuZGVyICA9IChGVF9DaGFyKXN0cmlrZVsxNl0gPDwgNjsgIC8qIGhvcmkuYXNjZW5kZXIgICovCi0gICAgICAgIG1ldHJpY3MtPmRlc2NlbmRlciA9IChGVF9DaGFyKXN0cmlrZVsxN10gPDwgNjsgIC8qIGhvcmkuZGVzY2VuZGVyICovCisgICAgICAgIG1ldHJpY3MtPmFzY2VuZGVyICA9IChGVF9DaGFyKXN0cmlrZVsxNl0gKiA2NDsgIC8qIGhvcmkuYXNjZW5kZXIgICovCisgICAgICAgIG1ldHJpY3MtPmRlc2NlbmRlciA9IChGVF9DaGFyKXN0cmlrZVsxN10gKiA2NDsgIC8qIGhvcmkuZGVzY2VuZGVyICovCiAgICAgICAgIG1ldHJpY3MtPmhlaWdodCAgICA9IG1ldHJpY3MtPmFzY2VuZGVyIC0gbWV0cmljcy0+ZGVzY2VuZGVyOwogCiAgICAgICAgIC8qIElzIHRoaXMgY29ycmVjdD8gKi8KICAgICAgICAgbWV0cmljcy0+bWF4X2FkdmFuY2UgPSAoIChGVF9DaGFyKXN0cmlrZVsyMl0gKyAvKiBtaW5fb3JpZ2luX1NCICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWtlWzE4XSArIC8qIG1heF93aWR0aCAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfQ2hhcilzdHJpa2VbMjNdICAgLyogbWluX2FkdmFuY2VfU0IgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA8PCA2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICogNjQ7CiAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CiAgICAgICB9CiAKQEAgLTI3Myw2ICsyNzMsNyBAQAogICAgICAgICBGVF9VU2hvcnQgICAgICAgcHBlbSwgcmVzb2x1dGlvbjsKICAgICAgICAgVFRfSG9yaUhlYWRlciAgKmhvcmk7CiAgICAgICAgIEZUX1VMb25nICAgICAgICB0YWJsZV9zaXplOworICAgICAgICBGVF9Qb3MgICAgICAgICAgcHBlbV8sIHVwZW1fOyAvKiB0byByZWR1Y2UgY2FzdHMgKi8KIAogICAgICAgICBGVF9FcnJvciAgZXJyb3I7CiAgICAgICAgIEZUX0J5dGUqICBwOwpAQCAtMzA1LDEyICszMDYsMTUgQEAKICAgICAgICAgbWV0cmljcy0+eF9wcGVtID0gcHBlbTsKICAgICAgICAgbWV0cmljcy0+eV9wcGVtID0gcHBlbTsKIAotICAgICAgICBtZXRyaWNzLT5hc2NlbmRlciAgICA9IHBwZW0gKiBob3JpLT5Bc2NlbmRlciAqIDY0IC8gdXBlbTsKLSAgICAgICAgbWV0cmljcy0+ZGVzY2VuZGVyICAgPSBwcGVtICogaG9yaS0+RGVzY2VuZGVyICogNjQgLyB1cGVtOwotICAgICAgICBtZXRyaWNzLT5oZWlnaHQgICAgICA9IHBwZW0gKiAoIGhvcmktPkFzY2VuZGVyIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3JpLT5EZXNjZW5kZXIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcmktPkxpbmVfR2FwICkgKiA2NCAvIHVwZW07Ci0gICAgICAgIG1ldHJpY3MtPm1heF9hZHZhbmNlID0gcHBlbSAqIGhvcmktPmFkdmFuY2VfV2lkdGhfTWF4ICogNjQgLyB1cGVtOworICAgICAgICBwcGVtXyA9IChGVF9Qb3MpcHBlbTsKKyAgICAgICAgdXBlbV8gPSAoRlRfUG9zKXVwZW07CisKKyAgICAgICAgbWV0cmljcy0+YXNjZW5kZXIgICAgPSBwcGVtXyAqIGhvcmktPkFzY2VuZGVyICogNjQgLyB1cGVtXzsKKyAgICAgICAgbWV0cmljcy0+ZGVzY2VuZGVyICAgPSBwcGVtXyAqIGhvcmktPkRlc2NlbmRlciAqIDY0IC8gdXBlbV87CisgICAgICAgIG1ldHJpY3MtPmhlaWdodCAgICAgID0gcHBlbV8gKiAoIGhvcmktPkFzY2VuZGVyIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaS0+RGVzY2VuZGVyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaS0+TGluZV9HYXAgKSAqIDY0IC8gdXBlbV87CisgICAgICAgIG1ldHJpY3MtPm1heF9hZHZhbmNlID0gcHBlbV8gKiBob3JpLT5hZHZhbmNlX1dpZHRoX01heCAqIDY0IC8gdXBlbV87CiAKICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgfQpAQCAtNDIwLDcgKzQyNCw3IEBACiAgICAgRlRfRXJyb3IgICAgZXJyb3IgPSBGVF9FcnJfT2s7CiAgICAgRlRfVUludCAgICAgd2lkdGgsIGhlaWdodDsKICAgICBGVF9CaXRtYXAqICBtYXAgPSBkZWNvZGVyLT5iaXRtYXA7Ci0gICAgRlRfTG9uZyAgICAgc2l6ZTsKKyAgICBGVF9VTG9uZyAgICBzaXplOwogCiAKICAgICBpZiAoICFkZWNvZGVyLT5tZXRyaWNzX2xvYWRlZCApCkBAIC00MzIsMzggKzQzNiwzOCBAQAogICAgIHdpZHRoICA9IGRlY29kZXItPm1ldHJpY3MtPndpZHRoOwogICAgIGhlaWdodCA9IGRlY29kZXItPm1ldHJpY3MtPmhlaWdodDsKIAotICAgIG1hcC0+d2lkdGggPSAoaW50KXdpZHRoOwotICAgIG1hcC0+cm93cyAgPSAoaW50KWhlaWdodDsKKyAgICBtYXAtPndpZHRoID0gd2lkdGg7CisgICAgbWFwLT5yb3dzICA9IGhlaWdodDsKIAogICAgIHN3aXRjaCAoIGRlY29kZXItPmJpdF9kZXB0aCApCiAgICAgewogICAgIGNhc2UgMToKICAgICAgIG1hcC0+cGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfTU9OTzsKLSAgICAgIG1hcC0+cGl0Y2ggICAgICA9ICggbWFwLT53aWR0aCArIDcgKSA+PiAzOworICAgICAgbWFwLT5waXRjaCAgICAgID0gKGludCkoICggbWFwLT53aWR0aCArIDcgKSA+PiAzICk7CiAgICAgICBtYXAtPm51bV9ncmF5cyAgPSAyOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDI6CiAgICAgICBtYXAtPnBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX0dSQVkyOwotICAgICAgbWFwLT5waXRjaCAgICAgID0gKCBtYXAtPndpZHRoICsgMyApID4+IDI7CisgICAgICBtYXAtPnBpdGNoICAgICAgPSAoaW50KSggKCBtYXAtPndpZHRoICsgMyApID4+IDIgKTsKICAgICAgIG1hcC0+bnVtX2dyYXlzICA9IDQ7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgNDoKICAgICAgIG1hcC0+cGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfR1JBWTQ7Ci0gICAgICBtYXAtPnBpdGNoICAgICAgPSAoIG1hcC0+d2lkdGggKyAxICkgPj4gMTsKKyAgICAgIG1hcC0+cGl0Y2ggICAgICA9IChpbnQpKCAoIG1hcC0+d2lkdGggKyAxICkgPj4gMSApOwogICAgICAgbWFwLT5udW1fZ3JheXMgID0gMTY7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgODoKICAgICAgIG1hcC0+cGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfR1JBWTsKLSAgICAgIG1hcC0+cGl0Y2ggICAgICA9IG1hcC0+d2lkdGg7CisgICAgICBtYXAtPnBpdGNoICAgICAgPSAoaW50KSggbWFwLT53aWR0aCApOwogICAgICAgbWFwLT5udW1fZ3JheXMgID0gMjU2OwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDMyOgogICAgICAgbWFwLT5waXhlbF9tb2RlID0gRlRfUElYRUxfTU9ERV9CR1JBOwotICAgICAgbWFwLT5waXRjaCAgICAgID0gbWFwLT53aWR0aCAqIDQ7CisgICAgICBtYXAtPnBpdGNoICAgICAgPSAoaW50KSggbWFwLT53aWR0aCAqIDQgKTsKICAgICAgIG1hcC0+bnVtX2dyYXlzICA9IDI1NjsKICAgICAgIGJyZWFrOwogCkBAIC00NzIsNyArNDc2LDcgQEAKICAgICAgIGdvdG8gRXhpdDsKICAgICB9CiAKLSAgICBzaXplID0gbWFwLT5yb3dzICogbWFwLT5waXRjaDsKKyAgICBzaXplID0gbWFwLT5yb3dzICogKEZUX1VMb25nKW1hcC0+cGl0Y2g7CiAKICAgICAvKiBjaGVjayB0aGF0IHRoZXJlIGlzIG5vIGVtcHR5IGltYWdlICovCiAgICAgaWYgKCBzaXplID09IDAgKQpAQCAtNTYxLDcgKzU2NSw4IEBACiAgIHsKICAgICBGVF9FcnJvciAgICBlcnJvciA9IEZUX0Vycl9PazsKICAgICBGVF9CeXRlKiAgICBsaW5lOwotICAgIEZUX0ludCAgICAgIGJpdF9oZWlnaHQsIGJpdF93aWR0aCwgcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIGxpbmVfYml0cywgaDsKKyAgICBGVF9JbnQgICAgICBwaXRjaCwgd2lkdGgsIGhlaWdodCwgbGluZV9iaXRzLCBoOworICAgIEZUX1VJbnQgICAgIGJpdF9oZWlnaHQsIGJpdF93aWR0aDsKICAgICBGVF9CaXRtYXAqICBiaXRtYXA7CiAKIApAQCAtNTc3LDggKzU4Miw4IEBACiAKICAgICBsaW5lX2JpdHMgPSB3aWR0aCAqIGRlY29kZXItPmJpdF9kZXB0aDsKIAotICAgIGlmICggeF9wb3MgPCAwIHx8IHhfcG9zICsgd2lkdGggPiBiaXRfd2lkdGggICB8fAotICAgICAgICAgeV9wb3MgPCAwIHx8IHlfcG9zICsgaGVpZ2h0ID4gYml0X2hlaWdodCApCisgICAgaWYgKCB4X3BvcyA8IDAgfHwgKEZUX1VJbnQpKCB4X3BvcyArIHdpZHRoICkgPiBiaXRfd2lkdGggICB8fAorICAgICAgICAgeV9wb3MgPCAwIHx8IChGVF9VSW50KSggeV9wb3MgKyBoZWlnaHQgKSA+IGJpdF9oZWlnaHQgKQogICAgIHsKICAgICAgIEZUX1RSQUNFMSgoICJ0dF9zYml0X2RlY29kZXJfbG9hZF9ieXRlX2FsaWduZWQ6IgogICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIGJpdG1hcCBkaW1lbnNpb25zXG4iICkpOwpAQCAtNjk5LDcgKzcwNCw4IEBACiAgIHsKICAgICBGVF9FcnJvciAgICBlcnJvciA9IEZUX0Vycl9PazsKICAgICBGVF9CeXRlKiAgICBsaW5lOwotICAgIEZUX0ludCAgICAgIGJpdF9oZWlnaHQsIGJpdF93aWR0aCwgcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIGxpbmVfYml0cywgaCwgbmJpdHM7CisgICAgRlRfSW50ICAgICAgcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIGxpbmVfYml0cywgaCwgbmJpdHM7CisgICAgRlRfVUludCAgICAgYml0X2hlaWdodCwgYml0X3dpZHRoOwogICAgIEZUX0JpdG1hcCogIGJpdG1hcDsKICAgICBGVF9VU2hvcnQgICBydmFsOwogCkBAIC03MTYsOCArNzIyLDggQEAKIAogICAgIGxpbmVfYml0cyA9IHdpZHRoICogZGVjb2Rlci0+Yml0X2RlcHRoOwogCi0gICAgaWYgKCB4X3BvcyA8IDAgfHwgeF9wb3MgKyB3aWR0aCAgPiBiaXRfd2lkdGggIHx8Ci0gICAgICAgICB5X3BvcyA8IDAgfHwgeV9wb3MgKyBoZWlnaHQgPiBiaXRfaGVpZ2h0ICkKKyAgICBpZiAoIHhfcG9zIDwgMCB8fCAoRlRfVUludCkoIHhfcG9zICsgd2lkdGggKSA+IGJpdF93aWR0aCAgIHx8CisgICAgICAgICB5X3BvcyA8IDAgfHwgKEZUX1VJbnQpKCB5X3BvcyArIGhlaWdodCApID4gYml0X2hlaWdodCApCiAgICAgewogICAgICAgRlRfVFJBQ0UxKCggInR0X3NiaXRfZGVjb2Rlcl9sb2FkX2JpdF9hbGlnbmVkOiIKICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBiaXRtYXAgZGltZW5zaW9uc1xuIiApKTsKQEAgLTEzNzksOSArMTM4NSw5IEBACiAKICAgICAgIG1ldHJpY3MtPmhvcmlCZWFyaW5nWCA9IChGVF9TaG9ydClvcmlnaW5PZmZzZXRYOwogICAgICAgbWV0cmljcy0+aG9yaUJlYXJpbmdZID0gKEZUX1Nob3J0KSggLW9yaWdpbk9mZnNldFkgKyBtZXRyaWNzLT5oZWlnaHQgKTsKLSAgICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlICA9IChGVF9TaG9ydCkoIGFhZHZhbmNlICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnJvb3Quc2l6ZS0+bWV0cmljcy54X3BwZW0gLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+aGVhZGVyLlVuaXRzX1Blcl9FTSApOworICAgICAgbWV0cmljcy0+aG9yaUFkdmFuY2UgID0gKEZUX1VTaG9ydCkoIGFhZHZhbmNlICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5yb290LnNpemUtPm1ldHJpY3MueF9wcGVtIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5oZWFkZXIuVW5pdHNfUGVyX0VNICk7CiAgICAgfQogCiAgICAgcmV0dXJuIGVycm9yOwpAQCAtMTQ0Miw3ICsxNDQ4LDcgQEAKICAgICAgIEZUX0xpYnJhcnkgIGxpYnJhcnkgPSBmYWNlLT5yb290LmdseXBoLT5saWJyYXJ5OwogCiAKLSAgICAgIEZUX0JpdG1hcF9OZXcoICZuZXdfbWFwICk7CisgICAgICBGVF9CaXRtYXBfSW5pdCggJm5ld19tYXAgKTsKIAogICAgICAgLyogQ29udmVydCB0byA4Yml0IGdyYXlzY2FsZS4gKi8KICAgICAgIGVycm9yID0gRlRfQml0bWFwX0NvbnZlcnQoIGxpYnJhcnksIG1hcCwgJm5ld19tYXAsIDEgKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zZm50L3R0c2JpdC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRzYml0LmgKaW5kZXggNjk1ZDBkOC4uZDRlMTNhZSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRzYml0LmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3NmbnQvdHRzYml0LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGVtYmVkZGVkIGJpdG1hcCBzdXBwb3J0IChzcGVjaWZpY2F0aW9uKS4gICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwOCwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zbW9vdGgvSmFtZmlsZSBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zbW9vdGgvSmFtZmlsZQppbmRleCBhODQ5NmFhLi5iMTg4N2MyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc21vb3RoL0phbWZpbGUKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy9zbW9vdGggSmFtZmlsZQogIwotIyBDb3B5cmlnaHQgMjAwMSBieQorIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTE2LDcgKzE2LDEwIEBACiAKICAgaWYgJChGVDJfTVVMVEkpCiAgIHsKLSAgICBfc291cmNlcyA9IGZ0Z3JheXMgZnRzbW9vdGggZnRzcGljIDsKKyAgICBfc291cmNlcyA9IGZ0Z3JheXMKKyAgICAgICAgICAgICAgIGZ0c21vb3RoCisgICAgICAgICAgICAgICBmdHNwaWMKKyAgICAgICAgICAgICAgIDsKICAgfQogICBlbHNlCiAgIHsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zbW9vdGgvZnRncmF5cy5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9mdGdyYXlzLmMKaW5kZXggOWQzN2Q2NC4uYmEyOTQ0NSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9mdGdyYXlzLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9mdGdyYXlzLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQSBuZXcgYHBlcmZlY3QnIGFudGktYWxpYXNpbmcgcmVuZGVyZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAwMywgMjAwNS0yMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI0LDggKzI0LDggQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIC0gY29weSBgc3JjL3Ntb290aC9mdGdyYXlzLmMnICh0aGlzIGZpbGUpIHRvIHlvdXIgY3VycmVudCBkaXJlY3RvcnkgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLSBjb3B5IGBpbmNsdWRlL2Z0aW1hZ2UuaCcgYW5kIGBzcmMvc21vb3RoL2Z0Z3JheXMuaCcgdG8gdGhlIHNhbWUgICAgICovCi0gIC8qICAgZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAtIGNvcHkgYGluY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oJyBhbmQgYHNyYy9zbW9vdGgvZnRncmF5cy5oJyB0byB0aGUgKi8KKyAgLyogICBzYW1lIGRpcmVjdG9yeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAtIGNvbXBpbGUgYGZ0Z3JheXMnIHdpdGggdGhlIF9TVEFOREFMT05FXyBtYWNybyBkZWZpbmVkLCBhcyBpbiAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC05NCw2ICs5NCwxMSBAQAogI2lmZGVmIF9TVEFOREFMT05FXwogCiAKKyAgLyogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHJlbmRlciBwb29sIHVzZWQgYnkgdGhlIHNjYW4tbGluZSBjb252ZXJ0ZXIgICovCisgIC8qIHRvIGRvIGFsbCBvZiBpdHMgd29yay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9SRU5ERVJfUE9PTF9TSVpFICAxNjM4NEwKKworCiAgIC8qIEF1eGlsaWFyeSBtYWNyb3MgZm9yIHRva2VuIGNvbmNhdGVuYXRpb24uICovCiAjZGVmaW5lIEZUX0VSUl9YQ0FUKCB4LCB5ICkgIHggIyMgeQogI2RlZmluZSBGVF9FUlJfQ0FUKCB4LCB5ICkgICBGVF9FUlJfWENBVCggeCwgeSApCkBAIC0xMDEsNiArMTA2LDIxIEBACiAjZGVmaW5lIEZUX0JFR0lOX1NUTU5UICBkbyB7CiAjZGVmaW5lIEZUX0VORF9TVE1OVCAgICB9IHdoaWxlICggMCApCiAKKyNkZWZpbmUgRlRfTUFYKCBhLCBiICkgICggKGEpID4gKGIpID8gKGEpIDogKGIpICkKKyNkZWZpbmUgRlRfQUJTKCBhICkgICAgICggKGEpIDwgMCA/IC0oYSkgOiAoYSkgKQorCisKKyAgLyoKKyAgICogIEFwcHJveGltYXRlIHNxcnQoeCp4K3kqeSkgdXNpbmcgdGhlIGBhbHBoYSBtYXggcGx1cyBiZXRhIG1pbicKKyAgICogIGFsZ29yaXRobS4gIFdlIHVzZSBhbHBoYSA9IDEsIGJldGEgPSAzLzgsIGdpdmluZyB1cyByZXN1bHRzIHdpdGggYQorICAgKiAgbGFyZ2VzdCBlcnJvciBsZXNzIHRoYW4gNyUgY29tcGFyZWQgdG8gdGhlIGV4YWN0IHZhbHVlLgorICAgKi8KKyNkZWZpbmUgRlRfSFlQT1QoIHgsIHkgKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggeCA9IEZUX0FCUyggeCApLCAgICAgICAgICAgICBcCisgICAgICAgICAgICB5ID0gRlRfQUJTKCB5ICksICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHggPiB5ID8geCArICggMyAqIHkgPj4gMyApICAgXAorICAgICAgICAgICAgICAgICAgOiB5ICsgKCAzICogeCA+PiAzICkgKQorCiAKICAgLyogZGVmaW5lIHRoaXMgdG8gZHVtcCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gKi8KIC8qICNkZWZpbmUgRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KQEAgLTI5Nyw3ICszMTcsNiBAQAogI3VuZGVmIFNDQUxFRAogCiAjZGVmaW5lIE9ORV9QSVhFTCAgICAgICAoIDFMIDw8IFBJWEVMX0JJVFMgKQotI2RlZmluZSBQSVhFTF9NQVNLICAgICAgKCAtMUwgPDwgUElYRUxfQklUUyApCiAjZGVmaW5lIFRSVU5DKCB4ICkgICAgICAoIChUQ29vcmQpKCAoeCkgPj4gUElYRUxfQklUUyApICkKICNkZWZpbmUgU1VCUElYRUxTKCB4ICkgICggKFRQb3MpKHgpIDw8IFBJWEVMX0JJVFMgKQogI2RlZmluZSBGTE9PUiggeCApICAgICAgKCAoeCkgJiAtT05FX1BJWEVMICkKQEAgLTQwNSw2ICs0MjQsOCBAQAogCiAgIHR5cGVkZWYgc3RydWN0ICBncmF5X1RXb3JrZXJfCiAgIHsKKyAgICBmdF9qbXBfYnVmICBqdW1wX2J1ZmZlcjsKKwogICAgIFRDb29yZCAgZXgsIGV5OwogICAgIFRQb3MgICAgbWluX2V4LCBtYXhfZXg7CiAgICAgVFBvcyAgICBtaW5fZXksIG1heF9leTsKQEAgLTQxOCwxMSArNDM5LDggQEAKICAgICBGVF9QdHJEaXN0ICBtYXhfY2VsbHM7CiAgICAgRlRfUHRyRGlzdCAgbnVtX2NlbGxzOwogCi0gICAgVENvb3JkICBjeCwgY3k7CiAgICAgVFBvcyAgICB4LCAgeTsKIAotICAgIFRQb3MgICAgbGFzdF9leTsKLQogICAgIEZUX1ZlY3RvciAgIGJlel9zdGFja1szMiAqIDMgKyAxXTsKICAgICBpbnQgICAgICAgICBsZXZfc3RhY2tbMzJdOwogCkBAIC00NDAsOCArNDU4LDYgQEAKICAgICBpbnQgIGJhbmRfc2l6ZTsKICAgICBpbnQgIGJhbmRfc2hvb3Q7CiAKLSAgICBmdF9qbXBfYnVmICBqdW1wX2J1ZmZlcjsKLQogICAgIHZvaWQqICAgICAgIGJ1ZmZlcjsKICAgICBsb25nICAgICAgICBidWZmZXJfc2l6ZTsKIApAQCAtNDY0LDExICs0ODAsNyBAQAogCiAgIHR5cGVkZWYgc3RydWN0IGdyYXlfVFJhc3Rlcl8KICAgewotICAgIHZvaWQqICAgICAgICAgYnVmZmVyOwotICAgIGxvbmcgICAgICAgICAgYnVmZmVyX3NpemU7Ci0gICAgaW50ICAgICAgICAgICBiYW5kX3NpemU7CiAgICAgdm9pZCogICAgICAgICBtZW1vcnk7Ci0gICAgZ3JheV9QV29ya2VyICB3b3JrZXI7CiAKICAgfSBncmF5X1RSYXN0ZXIsICpncmF5X1BSYXN0ZXI7CiAKQEAgLTQ4MCw3ICs0OTIsNyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKICAgZ3JheV9pbml0X2NlbGxzKCBSQVNfQVJHXyB2b2lkKiAgYnVmZmVyLAotICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICAgICAgICBieXRlX3NpemUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgICBieXRlX3NpemUgKQogICB7CiAgICAgcmFzLmJ1ZmZlciAgICAgID0gYnVmZmVyOwogICAgIHJhcy5idWZmZXJfc2l6ZSA9IGJ5dGVfc2l6ZTsKQEAgLTYzOCw4ICs2NTAsOCBAQAogICAgICAgcmFzLmV5ICAgID0gZXk7CiAgICAgfQogCi0gICAgcmFzLmludmFsaWQgPSAoICh1bnNpZ25lZClleSA+PSAodW5zaWduZWQpcmFzLmNvdW50X2V5IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleCA+PSByYXMuY291bnRfZXggICAgICAgICAgICk7CisgICAgcmFzLmludmFsaWQgPSAoICh1bnNpZ25lZCBpbnQpZXkgPj0gKHVuc2lnbmVkIGludClyYXMuY291bnRfZXkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleCA+PSByYXMuY291bnRfZXggICAgICAgICAgICAgICApOwogICB9CiAKIApAQCAtNjYxLDcgKzY3Myw2IEBACiAgICAgcmFzLmNvdmVyICAgPSAwOwogICAgIHJhcy5leCAgICAgID0gZXggLSByYXMubWluX2V4OwogICAgIHJhcy5leSAgICAgID0gZXkgLSByYXMubWluX2V5OwotICAgIHJhcy5sYXN0X2V5ID0gU1VCUElYRUxTKCBleSApOwogICAgIHJhcy5pbnZhbGlkID0gMDsKIAogICAgIGdyYXlfc2V0X2NlbGwoIFJBU19WQVJfIGV4LCBleSApOwpAQCAtNzQyLDcgKzc1Myw3IEBACiAKICAgICAgIG1vZCAtPSAoaW50KWR4OwogCi0gICAgICB3aGlsZSAoIGV4MSAhPSBleDIgKQorICAgICAgZG8KICAgICAgIHsKICAgICAgICAgZGVsdGEgPSBsaWZ0OwogICAgICAgICBtb2QgICs9IHJlbTsKQEAgLTc1Nyw3ICs3NjgsNyBAQAogICAgICAgICB5MSAgICAgICAgKz0gZGVsdGE7CiAgICAgICAgIGV4MSAgICAgICArPSBpbmNyOwogICAgICAgICBncmF5X3NldF9jZWxsKCBSQVNfVkFSXyBleDEsIGV5ICk7Ci0gICAgICB9CisgICAgICB9IHdoaWxlICggZXgxICE9IGV4MiApOwogICAgIH0KIAogICAgIGRlbHRhICAgICAgPSB5MiAtIHkxOwpAQCAtNzgwLDI5ICs3OTEsMTggQEAKICAgICBpbnQgICAgIGRlbHRhLCByZW0sIGxpZnQsIGluY3I7CiAKIAotICAgIGV5MSA9IFRSVU5DKCByYXMubGFzdF9leSApOworICAgIGV5MSA9IFRSVU5DKCByYXMueSApOwogICAgIGV5MiA9IFRSVU5DKCB0b195ICk7ICAgICAvKiBpZiAoZXkyID49IHJhcy5tYXhfZXkpIGV5MiA9IHJhcy5tYXhfZXktMTsgKi8KLSAgICBmeTEgPSAoVENvb3JkKSggcmFzLnkgLSByYXMubGFzdF9leSApOworICAgIGZ5MSA9IChUQ29vcmQpKCByYXMueSAtIFNVQlBJWEVMUyggZXkxICkgKTsKICAgICBmeTIgPSAoVENvb3JkKSggdG9feSAtIFNVQlBJWEVMUyggZXkyICkgKTsKIAogICAgIGR4ID0gdG9feCAtIHJhcy54OwogICAgIGR5ID0gdG9feSAtIHJhcy55OwogCiAgICAgLyogcGVyZm9ybSB2ZXJ0aWNhbCBjbGlwcGluZyAqLwotICAgIHsKLSAgICAgIFRDb29yZCAgbWluLCBtYXg7Ci0KLQotICAgICAgbWluID0gZXkxOwotICAgICAgbWF4ID0gZXkyOwotICAgICAgaWYgKCBleTEgPiBleTIgKQotICAgICAgewotICAgICAgICBtaW4gPSBleTI7Ci0gICAgICAgIG1heCA9IGV5MTsKLSAgICAgIH0KLSAgICAgIGlmICggbWluID49IHJhcy5tYXhfZXkgfHwgbWF4IDwgcmFzLm1pbl9leSApCi0gICAgICAgIGdvdG8gRW5kOwotICAgIH0KKyAgICBpZiAoICggZXkxID49IHJhcy5tYXhfZXkgJiYgZXkyID49IHJhcy5tYXhfZXkgKSB8fAorICAgICAgICAgKCBleTEgPCAgcmFzLm1pbl9leSAmJiBleTIgPCAgcmFzLm1pbl9leSApICkKKyAgICAgIGdvdG8gRW5kOwogCiAgICAgLyogZXZlcnl0aGluZyBpcyBvbiBhIHNpbmdsZSBzY2FubGluZSAqLwogICAgIGlmICggZXkxID09IGV5MiApCkBAIC04ODAsNyArODgwLDcgQEAKICAgICAgIEZUX0RJVl9NT0QoIGludCwgcCwgZHksIGxpZnQsIHJlbSApOwogICAgICAgbW9kIC09IChpbnQpZHk7CiAKLSAgICAgIHdoaWxlICggZXkxICE9IGV5MiApCisgICAgICBkbwogICAgICAgewogICAgICAgICBkZWx0YSA9IGxpZnQ7CiAgICAgICAgIG1vZCAgKz0gcmVtOwpAQCAtODk4LDcgKzg5OCw3IEBACiAKICAgICAgICAgZXkxICs9IGluY3I7CiAgICAgICAgIGdyYXlfc2V0X2NlbGwoIFJBU19WQVJfIFRSVU5DKCB4ICksIGV5MSApOwotICAgICAgfQorICAgICAgfSB3aGlsZSAoIGV5MSAhPSBleTIgKTsKICAgICB9CiAKICAgICBncmF5X3JlbmRlcl9zY2FubGluZSggUkFTX1ZBUl8gZXkxLCB4LApAQCAtOTA4LDcgKzkwOCw2IEBACiAgIEVuZDoKICAgICByYXMueCAgICAgICA9IHRvX3g7CiAgICAgcmFzLnkgICAgICAgPSB0b195OwotICAgIHJhcy5sYXN0X2V5ID0gU1VCUElYRUxTKCBleTIgKTsKICAgfQogCiAKQEAgLTEyMTIsNyArMTIxMSw3IEBACiAgICAgLyogZmlyc3Qgb2YgYWxsLCBjb21wdXRlIHRoZSBzY2FubGluZSBvZmZzZXQgKi8KICAgICBwID0gKHVuc2lnbmVkIGNoYXIqKW1hcC0+YnVmZmVyIC0geSAqIG1hcC0+cGl0Y2g7CiAgICAgaWYgKCBtYXAtPnBpdGNoID49IDAgKQotICAgICAgcCArPSAodW5zaWduZWQpKCAoIG1hcC0+cm93cyAtIDEgKSAqIG1hcC0+cGl0Y2ggKTsKKyAgICAgIHAgKz0gKCBtYXAtPnJvd3MgLSAxICkgKiAodW5zaWduZWQgaW50KW1hcC0+cGl0Y2g7CiAKICAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSwgc3BhbnMrKyApCiAgICAgewpAQCAtMTc0NCwxNCArMTc0MywxNyBAQAogCiAgIH0gZ3JheV9UQmFuZDsKIAotICAgIEZUX0RFRklORV9PVVRMSU5FX0ZVTkNTKGZ1bmNfaW50ZXJmYWNlLAotICAgICAgKEZUX091dGxpbmVfTW92ZVRvX0Z1bmMpIGdyYXlfbW92ZV90bywKLSAgICAgIChGVF9PdXRsaW5lX0xpbmVUb19GdW5jKSBncmF5X2xpbmVfdG8sCi0gICAgICAoRlRfT3V0bGluZV9Db25pY1RvX0Z1bmMpZ3JheV9jb25pY190bywKLSAgICAgIChGVF9PdXRsaW5lX0N1YmljVG9fRnVuYylncmF5X2N1YmljX3RvLAotICAgICAgMCwKLSAgICAgIDAKLSAgICApCisKKyAgRlRfREVGSU5FX09VVExJTkVfRlVOQ1MoCisgICAgZnVuY19pbnRlcmZhY2UsCisKKyAgICAoRlRfT3V0bGluZV9Nb3ZlVG9fRnVuYykgZ3JheV9tb3ZlX3RvLAorICAgIChGVF9PdXRsaW5lX0xpbmVUb19GdW5jKSBncmF5X2xpbmVfdG8sCisgICAgKEZUX091dGxpbmVfQ29uaWNUb19GdW5jKWdyYXlfY29uaWNfdG8sCisgICAgKEZUX091dGxpbmVfQ3ViaWNUb19GdW5jKWdyYXlfY3ViaWNfdG8sCisgICAgMCwKKyAgICAwICkKKwogCiAgIHN0YXRpYyBpbnQKICAgZ3JheV9jb252ZXJ0X2dseXBoX2lubmVyKCBSQVNfQVJHICkKQEAgLTE4MjgsNyArMTgzMCw3IEBACiAgICAgICBiYW5kc1swXS5tYXggPSBtYXg7CiAgICAgICBiYW5kICAgICAgICAgPSBiYW5kczsKIAotICAgICAgd2hpbGUgKCBiYW5kID49IGJhbmRzICkKKyAgICAgIGRvCiAgICAgICB7CiAgICAgICAgIFRQb3MgIGJvdHRvbSwgdG9wLCBtaWRkbGU7CiAgICAgICAgIGludCAgIGVycm9yOwpAQCAtMTg0MiwxMyArMTg0NCwxMyBAQAogICAgICAgICAgIHJhcy55Y2VsbHMgPSAoUENlbGwqKXJhcy5idWZmZXI7CiAgICAgICAgICAgcmFzLnljb3VudCA9IGJhbmQtPm1heCAtIGJhbmQtPm1pbjsKIAotICAgICAgICAgIGNlbGxfc3RhcnQgPSBzaXplb2YgKCBQQ2VsbCApICogcmFzLnljb3VudDsKLSAgICAgICAgICBjZWxsX21vZCAgID0gY2VsbF9zdGFydCAlIHNpemVvZiAoIFRDZWxsICk7CisgICAgICAgICAgY2VsbF9zdGFydCA9IChsb25nKXNpemVvZiAoIFBDZWxsICkgKiByYXMueWNvdW50OworICAgICAgICAgIGNlbGxfbW9kICAgPSBjZWxsX3N0YXJ0ICUgKGxvbmcpc2l6ZW9mICggVENlbGwgKTsKICAgICAgICAgICBpZiAoIGNlbGxfbW9kID4gMCApCi0gICAgICAgICAgICBjZWxsX3N0YXJ0ICs9IHNpemVvZiAoIFRDZWxsICkgLSBjZWxsX21vZDsKKyAgICAgICAgICAgIGNlbGxfc3RhcnQgKz0gKGxvbmcpc2l6ZW9mICggVENlbGwgKSAtIGNlbGxfbW9kOwogCiAgICAgICAgICAgY2VsbF9lbmQgID0gcmFzLmJ1ZmZlcl9zaXplOwotICAgICAgICAgIGNlbGxfZW5kIC09IGNlbGxfZW5kICUgc2l6ZW9mICggVENlbGwgKTsKKyAgICAgICAgICBjZWxsX2VuZCAtPSBjZWxsX2VuZCAlIChsb25nKXNpemVvZiAoIFRDZWxsICk7CiAKICAgICAgICAgICBjZWxsc19tYXggPSAoUENlbGwpKCAoY2hhciopcmFzLmJ1ZmZlciArIGNlbGxfZW5kICk7CiAgICAgICAgICAgcmFzLmNlbGxzID0gKFBDZWxsKSggKGNoYXIqKXJhcy5idWZmZXIgKyBjZWxsX3N0YXJ0ICk7CkBAIC0xOTA0LDcgKzE5MDYsNyBAQAogICAgICAgICBiYW5kWzBdLm1pbiA9IG1pZGRsZTsKICAgICAgICAgYmFuZFswXS5tYXggPSB0b3A7CiAgICAgICAgIGJhbmQrKzsKLSAgICAgIH0KKyAgICAgIH0gd2hpbGUgKCBiYW5kID49IGJhbmRzICk7CiAgICAgfQogCiAgICAgaWYgKCByYXMuYmFuZF9zaG9vdCA+IDggJiYgcmFzLmJhbmRfc2l6ZSA+IDE2ICkKQEAgLTE5MTgsMTIgKzE5MjAsMTggQEAKICAgZ3JheV9yYXN0ZXJfcmVuZGVyKCBncmF5X1BSYXN0ZXIgICAgICAgICAgICAgcmFzdGVyLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1Jhc3Rlcl9QYXJhbXMqICBwYXJhbXMgKQogICB7Ci0gICAgY29uc3QgRlRfT3V0bGluZSogIG91dGxpbmUgICAgPSAoY29uc3QgRlRfT3V0bGluZSopcGFyYW1zLT5zb3VyY2U7Ci0gICAgY29uc3QgRlRfQml0bWFwKiAgIHRhcmdldF9tYXAgPSBwYXJhbXMtPnRhcmdldDsKLSAgICBncmF5X1BXb3JrZXIgICAgICAgd29ya2VyOworICAgIGNvbnN0IEZUX091dGxpbmUqICBvdXRsaW5lICAgICA9IChjb25zdCBGVF9PdXRsaW5lKilwYXJhbXMtPnNvdXJjZTsKKyAgICBjb25zdCBGVF9CaXRtYXAqICAgdGFyZ2V0X21hcCAgPSBwYXJhbXMtPnRhcmdldDsKKworICAgIGdyYXlfVFdvcmtlciAgd29ya2VyWzFdOworCisgICAgVENlbGwgIGJ1ZmZlcltGVF9NQVgoIEZUX1JFTkRFUl9QT09MX1NJWkUsIDIwNDggKSAvIHNpemVvZiAoIFRDZWxsICldOworICAgIGxvbmcgICBidWZmZXJfc2l6ZSA9IHNpemVvZiAoIGJ1ZmZlciApOworICAgIGludCAgICBiYW5kX3NpemUgICA9IChpbnQpKCBidWZmZXJfc2l6ZSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSggc2l6ZW9mICggVENlbGwgKSAqIDggKSApOwogCiAKLSAgICBpZiAoICFyYXN0ZXIgfHwgIXJhc3Rlci0+YnVmZmVyIHx8ICFyYXN0ZXItPmJ1ZmZlcl9zaXplICkKKyAgICBpZiAoICFyYXN0ZXIgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CiAKICAgICBpZiAoICFvdXRsaW5lICkKQEAgLTE5NDAsOCArMTk0OCw2IEBACiAgICAgICAgICAgIG91dGxpbmUtPmNvbnRvdXJzW291dGxpbmUtPm5fY29udG91cnMgLSAxXSArIDEgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX091dGxpbmUgKTsKIAotICAgIHdvcmtlciA9IHJhc3Rlci0+d29ya2VyOwotCiAgICAgLyogaWYgZGlyZWN0IG1vZGUgaXMgbm90IHNldCwgd2UgbXVzdCBoYXZlIGEgdGFyZ2V0IGJpdG1hcCAqLwogICAgIGlmICggISggcGFyYW1zLT5mbGFncyAmIEZUX1JBU1RFUl9GTEFHX0RJUkVDVCApICkKICAgICB7CkBAIC0xOTY2LDggKzE5NzIsOCBAQAogICAgICAgLyogY29tcHV0ZSBjbGlwIGJveCBmcm9tIHRhcmdldCBwaXhtYXAgKi8KICAgICAgIHJhcy5jbGlwX2JveC54TWluID0gMDsKICAgICAgIHJhcy5jbGlwX2JveC55TWluID0gMDsKLSAgICAgIHJhcy5jbGlwX2JveC54TWF4ID0gdGFyZ2V0X21hcC0+d2lkdGg7Ci0gICAgICByYXMuY2xpcF9ib3gueU1heCA9IHRhcmdldF9tYXAtPnJvd3M7CisgICAgICByYXMuY2xpcF9ib3gueE1heCA9IChGVF9Qb3MpdGFyZ2V0X21hcC0+d2lkdGg7CisgICAgICByYXMuY2xpcF9ib3gueU1heCA9IChGVF9Qb3MpdGFyZ2V0X21hcC0+cm93czsKICAgICB9CiAgICAgZWxzZSBpZiAoIHBhcmFtcy0+ZmxhZ3MgJiBGVF9SQVNURVJfRkxBR19DTElQICkKICAgICAgIHJhcy5jbGlwX2JveCA9IHBhcmFtcy0+Y2xpcF9ib3g7CkBAIC0xOTc5LDEzICsxOTg1LDE0IEBACiAgICAgICByYXMuY2xpcF9ib3gueU1heCA9ICAzMjc2N0w7CiAgICAgfQogCi0gICAgZ3JheV9pbml0X2NlbGxzKCBSQVNfVkFSXyByYXN0ZXItPmJ1ZmZlciwgcmFzdGVyLT5idWZmZXJfc2l6ZSApOworICAgIGdyYXlfaW5pdF9jZWxscyggUkFTX1ZBUl8gYnVmZmVyLCBidWZmZXJfc2l6ZSApOwogCiAgICAgcmFzLm91dGxpbmUgICAgICAgID0gKm91dGxpbmU7CiAgICAgcmFzLm51bV9jZWxscyAgICAgID0gMDsKICAgICByYXMuaW52YWxpZCAgICAgICAgPSAxOwotICAgIHJhcy5iYW5kX3NpemUgICAgICA9IHJhc3Rlci0+YmFuZF9zaXplOworICAgIHJhcy5iYW5kX3NpemUgICAgICA9IGJhbmRfc2l6ZTsKICAgICByYXMubnVtX2dyYXlfc3BhbnMgPSAwOworICAgIHJhcy5zcGFuX3kgICAgICAgICA9IDA7CiAKICAgICBpZiAoIHBhcmFtcy0+ZmxhZ3MgJiBGVF9SQVNURVJfRkxBR19ESVJFQ1QgKQogICAgIHsKQEAgLTIwNjksMzQgKzIwNzYsOSBAQAogICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICBwb29sX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgIHBvb2xfc2l6ZSApCiAgIHsKLSAgICBncmF5X1BSYXN0ZXIgIHJhc3QgPSAoZ3JheV9QUmFzdGVyKXJhc3RlcjsKLQotCi0gICAgaWYgKCByYXN0ZXIgKQotICAgIHsKLSAgICAgIGlmICggcG9vbF9iYXNlICYmIHBvb2xfc2l6ZSA+PSAobG9uZylzaXplb2YgKCBncmF5X1RXb3JrZXIgKSArIDIwNDggKQotICAgICAgewotICAgICAgICBncmF5X1BXb3JrZXIgIHdvcmtlciA9IChncmF5X1BXb3JrZXIpcG9vbF9iYXNlOwotCi0KLSAgICAgICAgcmFzdC0+d29ya2VyICAgICAgPSB3b3JrZXI7Ci0gICAgICAgIHJhc3QtPmJ1ZmZlciAgICAgID0gcG9vbF9iYXNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCBzaXplb2YgKCBncmF5X1RXb3JrZXIgKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggVENlbGwgKSAtIDEgKSAgJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+KCBzaXplb2YgKCBUQ2VsbCApIC0gMSApICk7Ci0gICAgICAgIHJhc3QtPmJ1ZmZlcl9zaXplID0gKGxvbmcpKCAoIHBvb2xfYmFzZSArIHBvb2xfc2l6ZSApIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKilyYXN0LT5idWZmZXIgKSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4oIHNpemVvZiAoIFRDZWxsICkgLSAxICk7Ci0gICAgICAgIHJhc3QtPmJhbmRfc2l6ZSAgID0gKGludCkoIHJhc3QtPmJ1ZmZlcl9zaXplIC8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHNpemVvZiAoIFRDZWxsICkgKiA4ICkgKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgcmFzdC0+YnVmZmVyICAgICAgPSBOVUxMOwotICAgICAgICByYXN0LT5idWZmZXJfc2l6ZSA9IDA7Ci0gICAgICAgIHJhc3QtPndvcmtlciAgICAgID0gTlVMTDsKLSAgICAgIH0KLSAgICB9CisgICAgRlRfVU5VU0VEKCByYXN0ZXIgKTsKKyAgICBGVF9VTlVTRUQoIHBvb2xfYmFzZSApOworICAgIEZUX1VOVVNFRCggcG9vbF9zaXplICk7CiAgIH0KIAogCkBAIC0yMTE0LDE1ICsyMDk2LDE2IEBACiAgIH0KIAogCi0gIEZUX0RFRklORV9SQVNURVJfRlVOQ1MoZnRfZ3JheXNfcmFzdGVyLAorICBGVF9ERUZJTkVfUkFTVEVSX0ZVTkNTKAorICAgIGZ0X2dyYXlzX3Jhc3RlciwKKwogICAgIEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FLAogCiAgICAgKEZUX1Jhc3Rlcl9OZXdfRnVuYykgICAgIGdyYXlfcmFzdGVyX25ldywKICAgICAoRlRfUmFzdGVyX1Jlc2V0X0Z1bmMpICAgZ3JheV9yYXN0ZXJfcmVzZXQsCiAgICAgKEZUX1Jhc3Rlcl9TZXRfTW9kZV9GdW5jKWdyYXlfcmFzdGVyX3NldF9tb2RlLAogICAgIChGVF9SYXN0ZXJfUmVuZGVyX0Z1bmMpICBncmF5X3Jhc3Rlcl9yZW5kZXIsCi0gICAgKEZUX1Jhc3Rlcl9Eb25lX0Z1bmMpICAgIGdyYXlfcmFzdGVyX2RvbmUKLSAgKQorICAgIChGVF9SYXN0ZXJfRG9uZV9GdW5jKSAgICBncmF5X3Jhc3Rlcl9kb25lICkKIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zbW9vdGgvZnRncmF5cy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9mdGdyYXlzLmgKaW5kZXggZjIwZjU1Zi4uMWI1NzYwMyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9mdGdyYXlzLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9mdGdyYXlzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgc21vb3RoIHJlbmRlcmVyIGRlY2xhcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zbW9vdGgvZnRzbWVycnMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zbW9vdGgvZnRzbWVycnMuaAppbmRleCA0MTNkMmYxLi5jYzM4YWExIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc21vb3RoL2Z0c21lcnJzLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9mdHNtZXJycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIHNtb290aCByZW5kZXJlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLCAyMDEyIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc21vb3RoL2Z0c21vb3RoLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc21vb3RoL2Z0c21vb3RoLmMKaW5kZXggNGUyZGVlNS4uMzYyMDU1MCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9mdHNtb290aC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zbW9vdGgvZnRzbW9vdGguYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBbnRpLWFsaWFzaW5nIHJlbmRlcmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDA2LCAyMDA5LTIwMTMgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjMwLDcgKzIzMCw3IEBACiAgICAgfQogCiAgICAgLyogYWxsb2NhdGUgbmV3IG9uZSAqLwotICAgIGlmICggRlRfQUxMT0MoIGJpdG1hcC0+YnVmZmVyLCAoRlRfVUxvbmcpcGl0Y2ggKiBoZWlnaHQgKSApCisgICAgaWYgKCBGVF9BTExPQyggYml0bWFwLT5idWZmZXIsIChGVF9VTG9uZykoIHBpdGNoICogaGVpZ2h0ICkgKSApCiAgICAgICBnb3RvIEV4aXQ7CiAgICAgZWxzZQogICAgICAgaGF2ZV9idWZmZXIgPSBUUlVFOwpAQCAtMjQzLDggKzI0Myw4IEBACiAKICAgICBiaXRtYXAtPnBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX0dSQVk7CiAgICAgYml0bWFwLT5udW1fZ3JheXMgID0gMjU2OwotICAgIGJpdG1hcC0+d2lkdGggICAgICA9IHdpZHRoOwotICAgIGJpdG1hcC0+cm93cyAgICAgICA9IGhlaWdodDsKKyAgICBiaXRtYXAtPndpZHRoICAgICAgPSAodW5zaWduZWQgaW50KXdpZHRoOworICAgIGJpdG1hcC0+cm93cyAgICAgICA9ICh1bnNpZ25lZCBpbnQpaGVpZ2h0OwogICAgIGJpdG1hcC0+cGl0Y2ggICAgICA9IHBpdGNoOwogCiAgICAgLyogdHJhbnNsYXRlIG91dGxpbmUgdG8gcmVuZGVyIGl0IGludG8gdGhlIGJpdG1hcCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9mdHNtb290aC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9mdHNtb290aC5oCmluZGV4IDM3MDg3OTAuLjc2NTAxOGMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zbW9vdGgvZnRzbW9vdGguaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc21vb3RoL2Z0c21vb3RoLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQW50aS1hbGlhc2luZyByZW5kZXJlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zbW9vdGgvZnRzcGljLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc21vb3RoL2Z0c3BpYy5jCmluZGV4IDY3YTJiODMuLjhlNmVkNTcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zbW9vdGgvZnRzcGljLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9mdHNwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3Igc21vb3RoIG1vZHVsZS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9mdHNwaWMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zbW9vdGgvZnRzcGljLmgKaW5kZXggMzM0YjUxYy4uMDcxYWZjZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9mdHNwaWMuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc21vb3RoL2Z0c3BpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBzbW9vdGggbW9kdWxlLiAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMCwxMCArMjAsMTEgQEAKICNkZWZpbmUgX19GVFNQSUNfSF9fCiAKIAotRlRfQkVHSU5fSEVBREVSCi0KICNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICiAKKworRlRfQkVHSU5fSEVBREVSCisKICNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKIAogI2RlZmluZSBGVF9HUkFZU19SQVNURVJfR0VUICBmdF9ncmF5c19yYXN0ZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zbW9vdGgvc21vb3RoLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvc21vb3RoL3Ntb290aC5jCmluZGV4IGE4YWM1MWYuLjRjYTQzNDQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy9zbW9vdGgvc21vb3RoLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3Ntb290aC9zbW9vdGguYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBhbnRpLWFsaWFzaW5nIHJhc3RlcmVyIG1vZHVsZSBjb21wb25lbnQgKGJvZHkgb25seSkuICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL0phbWZpbGUgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvSmFtZmlsZQppbmRleCBhOGNjY2ZlLi44OGNjMjZmIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvSmFtZmlsZQorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvSmFtZmlsZQpAQCAtMSw2ICsxLDYgQEAKICMgRnJlZVR5cGUgMiBzcmMvdHJ1ZXR5cGUgSmFtZmlsZQogIwotIyBDb3B5cmlnaHQgMjAwMSwgMjAwNCBieQorIyBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTE2LDcgKzE2LDE1IEBACiAKICAgaWYgJChGVDJfTVVMVEkpCiAgIHsKLSAgICBfc291cmNlcyA9IHR0ZHJpdmVyIHR0b2JqcyB0dHBsb2FkIHR0Z2xvYWQgdHRpbnRlcnAgdHRneHZhciB0dHBpYyA7CisgICAgX3NvdXJjZXMgPSB0dGRyaXZlcgorICAgICAgICAgICAgICAgdHRnbG9hZAorICAgICAgICAgICAgICAgdHRneHZhcgorICAgICAgICAgICAgICAgdHRpbnRlcnAKKyAgICAgICAgICAgICAgIHR0b2JqcworICAgICAgICAgICAgICAgdHRwaWMKKyAgICAgICAgICAgICAgIHR0cGxvYWQKKyAgICAgICAgICAgICAgIHR0c3VicGl4CisgICAgICAgICAgICAgICA7CiAgIH0KICAgZWxzZQogICB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHJ1ZXR5cGUuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90cnVldHlwZS5jCmluZGV4IDU3NjkxMmIuLmY5Mjk0MzcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90cnVldHlwZS5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90cnVldHlwZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIFRydWVUeXBlIGRyaXZlciBjb21wb25lbnQgKGJvZHkgb25seSkuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDEsIDIwMDQsIDIwMDYsIDIwMTIgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dGRyaXZlci5jCmluZGV4IDY0ZTQzM2QuLjA4YjMwYzk1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBmb250IGRyaXZlciBpbXBsZW1lbnRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9YRlJFRTg2X05BTUVfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9ICiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCiAjaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKQEAgLTEzNCwxMSArMTM0LDYgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI3VuZGVmICBQQUlSX1RBRwotI2RlZmluZSBQQUlSX1RBRyggbGVmdCwgcmlnaHQgKSAgKCAoIChGVF9VTG9uZylsZWZ0IDw8IDE2ICkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKXJpZ2h0ICAgICAgICApCi0KLQogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTkxLDkgKzE4Niw2IEBACiAgIH0KIAogCi0jdW5kZWYgUEFJUl9UQUcKLQotCiAgIHN0YXRpYyBGVF9FcnJvcgogICB0dF9nZXRfYWR2YW5jZXMoIEZUX0ZhY2UgICAgdHRmYWNlLAogICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgc3RhcnQsCkBAIC00NTYsNyArNDQ4LDcgQEAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCiAgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzUoCiAgICAgdHRfc2VydmljZXMsCi0gICAgRlRfU0VSVklDRV9JRF9YRjg2X05BTUUsICAgICAgIEZUX1hGODZfRk9STUFUX1RSVUVUWVBFLAorICAgIEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQsICAgICBGVF9GT05UX0ZPUk1BVF9UUlVFVFlQRSwKICAgICBGVF9TRVJWSUNFX0lEX01VTFRJX01BU1RFUlMsICAgJlRUX1NFUlZJQ0VfR1hfTVVMVElfTUFTVEVSU19HRVQsCiAgICAgRlRfU0VSVklDRV9JRF9UUlVFVFlQRV9FTkdJTkUsICZ0dF9zZXJ2aWNlX3RydWV0eXBlX2VuZ2luZSwKICAgICBGVF9TRVJWSUNFX0lEX1RUX0dMWUYsICAgICAgICAgJlRUX1NFUlZJQ0VfVFJVRVRZUEVfR0xZRl9HRVQsCkBAIC00NjQsNyArNDU2LDcgQEAKICNlbHNlCiAgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzQoCiAgICAgdHRfc2VydmljZXMsCi0gICAgRlRfU0VSVklDRV9JRF9YRjg2X05BTUUsICAgICAgIEZUX1hGODZfRk9STUFUX1RSVUVUWVBFLAorICAgIEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQsICAgICBGVF9GT05UX0ZPUk1BVF9UUlVFVFlQRSwKICAgICBGVF9TRVJWSUNFX0lEX1RSVUVUWVBFX0VOR0lORSwgJnR0X3NlcnZpY2VfdHJ1ZXR5cGVfZW5naW5lLAogICAgIEZUX1NFUlZJQ0VfSURfVFRfR0xZRiwgICAgICAgICAmVFRfU0VSVklDRV9UUlVFVFlQRV9HTFlGX0dFVCwKICAgICBGVF9TRVJWSUNFX0lEX1BST1BFUlRJRVMsICAgICAgJlRUX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQgKQpAQCAtNDgxLDcgKzQ3Myw3IEBACiAgICAgU0ZOVF9TZXJ2aWNlICAgICAgICAgc2ZudDsKIAogCi0gICAgLyogVFRfU0VSVklDRVNfR0VUIGRlcmVmZXJzIGBsaWJyYXJ5JyBpbiBQSUMgbW9kZSAqLworICAgIC8qIFRUX1NFUlZJQ0VTX0dFVCBkZXJlZmVyZW5jZXMgYGxpYnJhcnknIGluIFBJQyBtb2RlICovCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKICAgICBpZiAoICFkcml2ZXIgKQogICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dGRyaXZlci5oCmluZGV4IGFhZTAwZjIuLjZjYWNkNjAgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dGRyaXZlci5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dGRyaXZlci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgVHJ1ZVR5cGUgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDEsIDIwMDIgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRlcnJvcnMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dGVycm9ycy5oCmluZGV4IDc4ZDEzOGYuLmJhMzJjZjcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dGVycm9ycy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dGVycm9ycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLCAyMDEyIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0Z2xvYWQuYwppbmRleCBjNTg0MWMzLi5hNzkyYWQ0IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dGdsb2FkLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgR2x5cGggTG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEwMCwxMyArMTAwLDE1IEBACiAgICAgZWxzZSBpZiAoIGZhY2UtPm9zMi52ZXJzaW9uICE9IDB4RkZGRlUgKQogICAgIHsKICAgICAgICp0c2IgPSAoRlRfU2hvcnQpKCBmYWNlLT5vczIuc1R5cG9Bc2NlbmRlciAtIHlNYXggKTsKLSAgICAgICphaCAgPSBmYWNlLT5vczIuc1R5cG9Bc2NlbmRlciAtIGZhY2UtPm9zMi5zVHlwb0Rlc2NlbmRlcjsKKyAgICAgICphaCAgPSAoRlRfVVNob3J0KUZUX0FCUyggZmFjZS0+b3MyLnNUeXBvQXNjZW5kZXIgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5vczIuc1R5cG9EZXNjZW5kZXIgKTsKICAgICB9CiAKICAgICBlbHNlCiAgICAgewogICAgICAgKnRzYiA9IChGVF9TaG9ydCkoIGZhY2UtPmhvcml6b250YWwuQXNjZW5kZXIgLSB5TWF4ICk7Ci0gICAgICAqYWggID0gZmFjZS0+aG9yaXpvbnRhbC5Bc2NlbmRlciAtIGZhY2UtPmhvcml6b250YWwuRGVzY2VuZGVyOworICAgICAgKmFoICA9IChGVF9VU2hvcnQpRlRfQUJTKCBmYWNlLT5ob3Jpem9udGFsLkFzY2VuZGVyIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+aG9yaXpvbnRhbC5EZXNjZW5kZXIgKTsKICAgICB9CiAKICAgICBGVF9UUkFDRTUoKCAiICBhZHZhbmNlIGhlaWdodCAoZm9udCB1bml0cyk6ICVkXG4iLCAqYWggKSk7CkBAIC0xMTgsNyArMTIwLDcgQEAKICAgdHRfZ2V0X21ldHJpY3MoIFRUX0xvYWRlciAgbG9hZGVyLAogICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnbHlwaF9pbmRleCApCiAgIHsKLSAgICBUVF9GYWNlICAgIGZhY2UgICA9IChUVF9GYWNlKWxvYWRlci0+ZmFjZTsKKyAgICBUVF9GYWNlICAgIGZhY2UgICA9IGxvYWRlci0+ZmFjZTsKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKICAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGZhY2UgKTsKICNlbmRpZgpAQCAtMTUxLDE0ICsxNTMsMTYgQEAKICAgICBsb2FkZXItPnZhZHZhbmNlICAgICA9IGFkdmFuY2VfaGVpZ2h0OwogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCApCisgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCAmJgorICAgICAgICAgbG9hZGVyLT5leGVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgIHsKLSAgICAgIGlmICggbG9hZGVyLT5leGVjICkKLSAgICAgICAgbG9hZGVyLT5leGVjLT5zcGhfdHdlYWtfZmxhZ3MgPSAwOworICAgICAgbG9hZGVyLT5leGVjLT5zcGhfdHdlYWtfZmxhZ3MgPSAwOwogCi0gICAgICAvKiB0aGlzIG1heSBub3QgYmUgdGhlIHJpZ2h0IHBsYWNlIGZvciB0aGlzLCBidXQgaXQgd29ya3MgKi8KLSAgICAgIGlmICggbG9hZGVyLT5leGVjICYmIGxvYWRlci0+ZXhlYy0+aWdub3JlX3hfbW9kZSApCi0gICAgICAgIHNwaF9zZXRfdHdlYWtzKCBsb2FkZXIsIGdseXBoX2luZGV4ICk7CisgICAgICAvKiBUaGlzIG1heSBub3QgYmUgdGhlIHJpZ2h0IHBsYWNlIGZvciB0aGlzLCBidXQgaXQgd29ya3MuLi4gICovCisgICAgICAvKiBOb3RlIHRoYXQgd2UgaGF2ZSB0byB1bmNvbmRpdGlvbmFsbHkgbG9hZCB0aGUgdHdlYWtzIHNpbmNlICovCisgICAgICAvKiBpdCBpcyBwb3NzaWJsZSB0aGF0IGdseXBocyBpbmRpdmlkdWFsbHkgc3dpdGNoIENsZWFyVHlwZSdzICovCisgICAgICAvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlIG9uIGFuZCBvZmYuICAgICAgICAgICAgICAgICAgICovCisgICAgICBzcGhfc2V0X3R3ZWFrcyggbG9hZGVyLCBnbHlwaF9pbmRleCApOwogICAgIH0KICNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KIApAQCAtMTc4LDcgKzE4Miw3IEBACiAgIHR0X2dldF9tZXRyaWNzX2luY3Jfb3ZlcnJpZGVzKCBUVF9Mb2FkZXIgIGxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZ2x5cGhfaW5kZXggKQogICB7Ci0gICAgVFRfRmFjZSAgZmFjZSA9IChUVF9GYWNlKWxvYWRlci0+ZmFjZTsKKyAgICBUVF9GYWNlICBmYWNlID0gbG9hZGVyLT5mYWNlOwogCiAgICAgRlRfU2hvcnQgICBsZWZ0X2JlYXJpbmcgPSAwLCB0b3BfYmVhcmluZyA9IDA7CiAgICAgRlRfVVNob3J0ICBhZHZhbmNlX3dpZHRoID0gMCwgYWR2YW5jZV9oZWlnaHQgPSAwOwpAQCAtMjQ2LDI5ICsyNTAsNiBAQAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVHJhbnNsYXRlcyBhbiBhcnJheSBvZiBjb29yZGluYXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICB0cmFuc2xhdGVfYXJyYXkoIEZUX1VJbnQgICAgIG4sCi0gICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgY29vcmRzLAotICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgIGRlbHRhX3gsCi0gICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgZGVsdGFfeSApCi0gIHsKLSAgICBGVF9VSW50ICBrOwotCi0KLSAgICBpZiAoIGRlbHRhX3ggKQotICAgICAgZm9yICggayA9IDA7IGsgPCBuOyBrKysgKQotICAgICAgICBjb29yZHNba10ueCArPSBkZWx0YV94OwotCi0gICAgaWYgKCBkZWx0YV95ICkKLSAgICAgIGZvciAoIGsgPSAwOyBrIDwgbjsgaysrICkKLSAgICAgICAgY29vcmRzW2tdLnkgKz0gZGVsdGFfeTsKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdXNlZCBieSBkZWZhdWx0IHdpdGggVHJ1ZVR5cGUgZm9udHMuICAgICAgKi8KICAgLyogSG93ZXZlciwgdGhleSBjYW4gYmUgcmVwbGFjZWQgYnkgYWx0ZXJuYXRpdmVzIGlmIHdlIG5lZWQgdG8gc3VwcG9ydCAgICovCiAgIC8qIFRydWVUeXBlLWNvbXByZXNzZWQgZm9ybWF0cyAobGlrZSBNaWNyb1R5cGUpIGluIHRoZSBmdXR1cmUuICAgICAgICAgICAqLwpAQCAtNDA3LDcgKzM4OCw3IEBACiAKICAgICAvKiByZWFkaW5nIHRoZSBieXRlY29kZSBpbnN0cnVjdGlvbnMgKi8KICAgICBsb2FkLT5nbHlwaC0+Y29udHJvbF9sZW4gID0gMDsKLSAgICBsb2FkLT5nbHlwaC0+Y29udHJvbF9kYXRhID0gMDsKKyAgICBsb2FkLT5nbHlwaC0+Y29udHJvbF9kYXRhID0gTlVMTDsKIAogICAgIGlmICggcCArIDIgPiBsaW1pdCApCiAgICAgICBnb3RvIEludmFsaWRfT3V0bGluZTsKQEAgLTU1NSw4ICs1MzYsOCBAQAogICAgICAgKmZsYWcgID0gKEZUX0J5dGUpKCBmICYgRlRfQ1VSVkVfVEFHX09OICk7CiAgICAgfQogCi0gICAgb3V0bGluZS0+bl9wb2ludHMgICA9IChGVF9VU2hvcnQpbl9wb2ludHM7Ci0gICAgb3V0bGluZS0+bl9jb250b3VycyA9IChGVF9TaG9ydCkgbl9jb250b3VyczsKKyAgICBvdXRsaW5lLT5uX3BvaW50cyAgID0gKEZUX1Nob3J0KW5fcG9pbnRzOworICAgIG91dGxpbmUtPm5fY29udG91cnMgPSAoRlRfU2hvcnQpbl9jb250b3VyczsKIAogICAgIGxvYWQtPmN1cnNvciA9IHA7CiAKQEAgLTYxOSwxNSArNjAwLDMxIEBACiAgICAgICAgIGdvdG8gSW52YWxpZF9Db21wb3NpdGU7CiAKICAgICAgIC8qIHJlYWQgYXJndW1lbnRzICovCi0gICAgICBpZiAoIHN1YmdseXBoLT5mbGFncyAmIEFSR1NfQVJFX1dPUkRTICkKKyAgICAgIGlmICggc3ViZ2x5cGgtPmZsYWdzICYgQVJHU19BUkVfWFlfVkFMVUVTICkKICAgICAgIHsKLSAgICAgICAgc3ViZ2x5cGgtPmFyZzEgPSBGVF9ORVhUX1NIT1JUKCBwICk7Ci0gICAgICAgIHN1YmdseXBoLT5hcmcyID0gRlRfTkVYVF9TSE9SVCggcCApOworICAgICAgICBpZiAoIHN1YmdseXBoLT5mbGFncyAmIEFSR1NfQVJFX1dPUkRTICkKKyAgICAgICAgeworICAgICAgICAgIHN1YmdseXBoLT5hcmcxID0gRlRfTkVYVF9TSE9SVCggcCApOworICAgICAgICAgIHN1YmdseXBoLT5hcmcyID0gRlRfTkVYVF9TSE9SVCggcCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHN1YmdseXBoLT5hcmcxID0gRlRfTkVYVF9DSEFSKCBwICk7CisgICAgICAgICAgc3ViZ2x5cGgtPmFyZzIgPSBGVF9ORVhUX0NIQVIoIHAgKTsKKyAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBzdWJnbHlwaC0+YXJnMSA9IEZUX05FWFRfQ0hBUiggcCApOwotICAgICAgICBzdWJnbHlwaC0+YXJnMiA9IEZUX05FWFRfQ0hBUiggcCApOworICAgICAgICBpZiAoIHN1YmdseXBoLT5mbGFncyAmIEFSR1NfQVJFX1dPUkRTICkKKyAgICAgICAgeworICAgICAgICAgIHN1YmdseXBoLT5hcmcxID0gKEZUX0ludClGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICAgIHN1YmdseXBoLT5hcmcyID0gKEZUX0ludClGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHN1YmdseXBoLT5hcmcxID0gKEZUX0ludClGVF9ORVhUX0JZVEUoIHAgKTsKKyAgICAgICAgICBzdWJnbHlwaC0+YXJnMiA9IChGVF9JbnQpRlRfTkVYVF9CWVRFKCBwICk7CisgICAgICAgIH0KICAgICAgIH0KIAogICAgICAgLyogcmVhZCB0cmFuc2Zvcm0gKi8KQEAgLTYzNiwyMCArNjMzLDIwIEBACiAKICAgICAgIGlmICggc3ViZ2x5cGgtPmZsYWdzICYgV0VfSEFWRV9BX1NDQUxFICkKICAgICAgIHsKLSAgICAgICAgeHggPSAoRlRfRml4ZWQpRlRfTkVYVF9TSE9SVCggcCApIDw8IDI7CisgICAgICAgIHh4ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSAqIDQ7CiAgICAgICAgIHl5ID0geHg7CiAgICAgICB9CiAgICAgICBlbHNlIGlmICggc3ViZ2x5cGgtPmZsYWdzICYgV0VfSEFWRV9BTl9YWV9TQ0FMRSApCiAgICAgICB7Ci0gICAgICAgIHh4ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSA8PCAyOwotICAgICAgICB5eSA9IChGVF9GaXhlZClGVF9ORVhUX1NIT1JUKCBwICkgPDwgMjsKKyAgICAgICAgeHggPSAoRlRfRml4ZWQpRlRfTkVYVF9TSE9SVCggcCApICogNDsKKyAgICAgICAgeXkgPSAoRlRfRml4ZWQpRlRfTkVYVF9TSE9SVCggcCApICogNDsKICAgICAgIH0KICAgICAgIGVsc2UgaWYgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBXRV9IQVZFX0FfMlgyICkKICAgICAgIHsKLSAgICAgICAgeHggPSAoRlRfRml4ZWQpRlRfTkVYVF9TSE9SVCggcCApIDw8IDI7Ci0gICAgICAgIHl4ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSA8PCAyOwotICAgICAgICB4eSA9IChGVF9GaXhlZClGVF9ORVhUX1NIT1JUKCBwICkgPDwgMjsKLSAgICAgICAgeXkgPSAoRlRfRml4ZWQpRlRfTkVYVF9TSE9SVCggcCApIDw8IDI7CisgICAgICAgIHh4ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSAqIDQ7CisgICAgICAgIHl4ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSAqIDQ7CisgICAgICAgIHh5ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSAqIDQ7CisgICAgICAgIHl5ID0gKEZUX0ZpeGVkKUZUX05FWFRfU0hPUlQoIHAgKSAqIDQ7CiAgICAgICB9CiAKICAgICAgIHN1YmdseXBoLT50cmFuc2Zvcm0ueHggPSB4eDsKQEAgLTcwNyw5ICs3MDQsMTAgQEAKICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIHN0YXJ0X3BvaW50LAogICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgc3RhcnRfY29udG91ciApCiAgIHsKLSAgICB6b25lLT5uX3BvaW50cyAgICA9IChGVF9VU2hvcnQpKCBsb2FkLT5vdXRsaW5lLm5fcG9pbnRzIC0gc3RhcnRfcG9pbnQgKTsKLSAgICB6b25lLT5uX2NvbnRvdXJzICA9IChGVF9TaG9ydCkgKCBsb2FkLT5vdXRsaW5lLm5fY29udG91cnMgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfY29udG91ciApOworICAgIHpvbmUtPm5fcG9pbnRzICAgID0gKEZUX1VTaG9ydClsb2FkLT5vdXRsaW5lLm5fcG9pbnRzIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VTaG9ydClzdGFydF9wb2ludDsKKyAgICB6b25lLT5uX2NvbnRvdXJzICA9IGxvYWQtPm91dGxpbmUubl9jb250b3VycyAtCisgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9TaG9ydClzdGFydF9jb250b3VyOwogICAgIHpvbmUtPm9yZyAgICAgICAgID0gbG9hZC0+ZXh0cmFfcG9pbnRzICsgc3RhcnRfcG9pbnQ7CiAgICAgem9uZS0+Y3VyICAgICAgICAgPSBsb2FkLT5vdXRsaW5lLnBvaW50cyArIHN0YXJ0X3BvaW50OwogICAgIHpvbmUtPm9ydXMgICAgICAgID0gbG9hZC0+ZXh0cmFfcG9pbnRzMiArIHN0YXJ0X3BvaW50OwpAQCAtNzMzLDE0ICs3MzEsMTQgQEAKICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICBpc19jb21wb3NpdGUgKQogICB7CiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgVFRfRmFjZSAgICBmYWNlICAgPSAoVFRfRmFjZSlsb2FkZXItPmZhY2U7CisgICAgVFRfRmFjZSAgICBmYWNlICAgPSBsb2FkZXItPmZhY2U7CiAgICAgVFRfRHJpdmVyICBkcml2ZXIgPSAoVFRfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBmYWNlICk7CiAjZW5kaWYKIAogICAgIFRUX0dseXBoWm9uZSAgem9uZSA9ICZsb2FkZXItPnpvbmU7CiAKICNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKLSAgICBGVF9VSW50ICAgICAgIG5faW5zOworICAgIEZUX0xvbmcgICAgICAgbl9pbnM7CiAjZWxzZQogICAgIEZUX1VOVVNFRCggaXNfY29tcG9zaXRlICk7CiAjZW5kaWYKQEAgLTc1MywxNCArNzUxLDE0IEBACiAgICAgICBGVF9UUkFDRTEoKCAiICgweCVseCBieXRlKSBpcyB0cnVuY2F0ZWRcbiIsCiAgICAgICAgICAgICAgICAgIGxvYWRlci0+Z2x5cGgtPmNvbnRyb2xfbGVuICkpOwogICAgIH0KLSAgICBuX2lucyA9IChGVF9VSW50KSggbG9hZGVyLT5nbHlwaC0+Y29udHJvbF9sZW4gKTsKKyAgICBuX2lucyA9IGxvYWRlci0+Z2x5cGgtPmNvbnRyb2xfbGVuOwogCiAgICAgLyogc2F2ZSBvcmlnaW5hbCBwb2ludCBwb3NpdGlvbiBpbiBvcmcgKi8KICAgICBpZiAoIG5faW5zID4gMCApCiAgICAgICBGVF9BUlJBWV9DT1BZKCB6b25lLT5vcmcsIHpvbmUtPmN1ciwgem9uZS0+bl9wb2ludHMgKTsKIAogICAgIC8qIFJlc2V0IGdyYXBoaWNzIHN0YXRlLiAqLwotICAgIGxvYWRlci0+ZXhlYy0+R1MgPSAoKFRUX1NpemUpbG9hZGVyLT5zaXplKS0+R1M7CisgICAgbG9hZGVyLT5leGVjLT5HUyA9IGxvYWRlci0+c2l6ZS0+R1M7CiAKICAgICAvKiBYWFg6IFVORE9DVU1FTlRFRCEgSGludGluZyBpbnN0cnVjdGlvbnMgb2YgYSBjb21wb3NpdGUgZ2x5cGggKi8KICAgICAvKiAgICAgIGNvbXBsZXRlbHkgcmVmZXIgdG8gdGhlIChhbHJlYWR5KSBoaW50ZWQgc3ViZ2x5cGhzLiAgICAgKi8KQEAgLTc3MywxMCArNzcxLDggQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGxvYWRlci0+ZXhlYy0+bWV0cmljcy54X3NjYWxlID0KLSAgICAgICAgKChUVF9TaXplKWxvYWRlci0+c2l6ZSktPm1ldHJpY3MueF9zY2FsZTsKLSAgICAgIGxvYWRlci0+ZXhlYy0+bWV0cmljcy55X3NjYWxlID0KLSAgICAgICAgKChUVF9TaXplKWxvYWRlci0+c2l6ZSktPm1ldHJpY3MueV9zY2FsZTsKKyAgICAgIGxvYWRlci0+ZXhlYy0+bWV0cmljcy54X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnhfc2NhbGU7CisgICAgICBsb2FkZXItPmV4ZWMtPm1ldHJpY3MueV9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy55X3NjYWxlOwogICAgIH0KICNlbmRpZgogCkBAIC03OTQsNyArNzkwLDYgQEAKIAogICAgIGlmICggbl9pbnMgPiAwICkKICAgICB7Ci0gICAgICBGVF9Cb29sICAgZGVidWc7CiAgICAgICBGVF9FcnJvciAgZXJyb3I7CiAKICAgICAgIEZUX0dseXBoTG9hZGVyICBnbG9hZGVyICAgICAgICAgPSBsb2FkZXItPmdsb2FkZXI7CkBAIC04MDcsMTAgKzgwMiw3IEBACiAgICAgICBsb2FkZXItPmV4ZWMtPmlzX2NvbXBvc2l0ZSA9IGlzX2NvbXBvc2l0ZTsKICAgICAgIGxvYWRlci0+ZXhlYy0+cHRzICAgICAgICAgID0gKnpvbmU7CiAKLSAgICAgIGRlYnVnID0gRlRfQk9PTCggISggbG9hZGVyLT5sb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICgoVFRfU2l6ZSlsb2FkZXItPnNpemUpLT5kZWJ1ZyAgICAgICAgICAgICApOwotCi0gICAgICBlcnJvciA9IFRUX1J1bl9Db250ZXh0KCBsb2FkZXItPmV4ZWMsIGRlYnVnICk7CisgICAgICBlcnJvciA9IFRUX1J1bl9Db250ZXh0KCBsb2FkZXItPmV4ZWMgKTsKICAgICAgIGlmICggZXJyb3IgJiYgbG9hZGVyLT5leGVjLT5wZWRhbnRpY19oaW50aW5nICkKICAgICAgICAgcmV0dXJuIGVycm9yOwogCkBAIC04ODAsMjggKzg3MiwxNSBAQAogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogCi0gICAgaWYgKCAoKFRUX0ZhY2UpbG9hZGVyLT5mYWNlKS0+ZG9ibGVuZCApCisgICAgaWYgKCBsb2FkZXItPmZhY2UtPmRvYmxlbmQgKQogICAgIHsKICAgICAgIC8qIERlbHRhcyBhcHBseSB0byB0aGUgdW5zY2FsZWQgZGF0YS4gKi8KLSAgICAgIEZUX1ZlY3RvciogIGRlbHRhczsKLSAgICAgIEZUX01lbW9yeSAgIG1lbW9yeSA9IGxvYWRlci0+ZmFjZS0+bWVtb3J5OwotICAgICAgRlRfSW50ICAgICAgaTsKLQotCi0gICAgICBlcnJvciA9IFRUX1ZhcnlfR2V0X0dseXBoX0RlbHRhcyggKFRUX0ZhY2UpKGxvYWRlci0+ZmFjZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLT5nbHlwaF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVsdGFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fcG9pbnRzICk7CisgICAgICBlcnJvciA9IFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzKCBsb2FkZXItPmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXItPmdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KW5fcG9pbnRzICk7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgcmV0dXJuIGVycm9yOwotCi0gICAgICBmb3IgKCBpID0gMDsgaSA8IG5fcG9pbnRzOyArK2kgKQotICAgICAgewotICAgICAgICBvdXRsaW5lLT5wb2ludHNbaV0ueCArPSBkZWx0YXNbaV0ueDsKLSAgICAgICAgb3V0bGluZS0+cG9pbnRzW2ldLnkgKz0gZGVsdGFzW2ldLnk7Ci0gICAgICB9Ci0KLSAgICAgIEZUX0ZSRUUoIGRlbHRhcyApOwogICAgIH0KIAogI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQgKi8KQEAgLTkxNiwxMyArODk1LDEzIEBACiAKICAgICB7CiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgICBUVF9GYWNlICAgIGZhY2UgICA9IChUVF9GYWNlKWxvYWRlci0+ZmFjZTsKKyAgICAgIFRUX0ZhY2UgICAgZmFjZSAgID0gbG9hZGVyLT5mYWNlOwogICAgICAgVFRfRHJpdmVyICBkcml2ZXIgPSAoVFRfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBmYWNlICk7CiAKICAgICAgIEZUX1N0cmluZyogIGZhbWlseSAgICAgICAgID0gZmFjZS0+cm9vdC5mYW1pbHlfbmFtZTsKLSAgICAgIEZUX0ludCAgICAgIHBwZW0gICAgICAgICAgID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnhfcHBlbTsKKyAgICAgIEZUX1VJbnQgICAgIHBwZW0gICAgICAgICAgID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnhfcHBlbTsKICAgICAgIEZUX1N0cmluZyogIHN0eWxlICAgICAgICAgID0gZmFjZS0+cm9vdC5zdHlsZV9uYW1lOwotICAgICAgRlRfSW50ICAgICAgeF9zY2FsZV9mYWN0b3IgPSAxMDAwOworICAgICAgRlRfVUludCAgICAgeF9zY2FsZV9mYWN0b3IgPSAxMDAwOwogI2VuZGlmCiAKICAgICAgIEZUX1ZlY3RvciogIHZlYyAgID0gb3V0bGluZS0+cG9pbnRzOwpAQCAtOTQ5LDkgKzkyOCw5IEBACiAgICAgICAgIGlmICggKCBsb2FkZXItPmxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkgPT0gMCB8fAogICAgICAgICAgICAgIHhfc2NhbGVfZmFjdG9yICE9IDEwMDAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICB7Ci0gICAgICAgICAgeF9zY2FsZSA9IEZUX011bERpdiggKChUVF9TaXplKWxvYWRlci0+c2l6ZSktPm1ldHJpY3MueF9zY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4X3NjYWxlX2ZhY3RvciwgMTAwMCApOwotICAgICAgICAgIHlfc2NhbGUgPSAoKFRUX1NpemUpbG9hZGVyLT5zaXplKS0+bWV0cmljcy55X3NjYWxlOworICAgICAgICAgIHhfc2NhbGUgPSBGVF9NdWxEaXYoIGxvYWRlci0+c2l6ZS0+bWV0cmljcy54X3NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKXhfc2NhbGVfZmFjdG9yLCAxMDAwICk7CisgICAgICAgICAgeV9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy55X3NjYWxlOwogCiAgICAgICAgICAgLyogY29tcGVuc2F0ZSBmb3IgYW55IHNjYWxpbmcgYnkgZGUvZW1ib2xkZW5pbmc7ICovCiAgICAgICAgICAgLyogdGhlIGFtb3VudCB3YXMgZGV0ZXJtaW5lZCB2aWEgZXhwZXJpbWVudGF0aW9uICovCkBAIC05NzEsOCArOTUwLDggQEAKICAgICAgICAgLyogc2NhbGUgdGhlIGdseXBoICovCiAgICAgICAgIGlmICggKCBsb2FkZXItPmxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkgPT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICB4X3NjYWxlID0gKChUVF9TaXplKWxvYWRlci0+c2l6ZSktPm1ldHJpY3MueF9zY2FsZTsKLSAgICAgICAgICB5X3NjYWxlID0gKChUVF9TaXplKWxvYWRlci0+c2l6ZSktPm1ldHJpY3MueV9zY2FsZTsKKyAgICAgICAgICB4X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnhfc2NhbGU7CisgICAgICAgICAgeV9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy55X3NjYWxlOwogCiAgICAgICAgICAgZG9fc2NhbGUgPSBUUlVFOwogICAgICAgICB9CkBAIC0xMDE5LDMyICs5OTgsMzEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgc3RhcnRfcG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIG51bV9iYXNlX3BvaW50cyApCiAgIHsKLSAgICBGVF9HbHlwaExvYWRlciAgZ2xvYWRlciAgICA9IGxvYWRlci0+Z2xvYWRlcjsKLSAgICBGVF9WZWN0b3IqICAgICAgYmFzZV92ZWMgICA9IGdsb2FkZXItPmJhc2Uub3V0bGluZS5wb2ludHM7Ci0gICAgRlRfVUludCAgICAgICAgIG51bV9wb2ludHMgPSBnbG9hZGVyLT5iYXNlLm91dGxpbmUubl9wb2ludHM7CisgICAgRlRfR2x5cGhMb2FkZXIgIGdsb2FkZXIgPSBsb2FkZXItPmdsb2FkZXI7CisgICAgRlRfT3V0bGluZSAgICAgIGN1cnJlbnQ7CiAgICAgRlRfQm9vbCAgICAgICAgIGhhdmVfc2NhbGU7CiAgICAgRlRfUG9zICAgICAgICAgIHgsIHk7CiAKIAorICAgIGN1cnJlbnQucG9pbnRzICAgPSBnbG9hZGVyLT5iYXNlLm91dGxpbmUucG9pbnRzICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBudW1fYmFzZV9wb2ludHM7CisgICAgY3VycmVudC5uX3BvaW50cyA9IGdsb2FkZXItPmJhc2Uub3V0bGluZS5uX3BvaW50cyAtCisgICAgICAgICAgICAgICAgICAgICAgICAgKHNob3J0KW51bV9iYXNlX3BvaW50czsKKwogICAgIGhhdmVfc2NhbGUgPSBGVF9CT09MKCBzdWJnbHlwaC0+ZmxhZ3MgJiAoIFdFX0hBVkVfQV9TQ0FMRSAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFX0hBVkVfQU5fWFlfU0NBTEUgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFX0hBVkVfQV8yWDIgICAgICAgKSApOwogCiAgICAgLyogcGVyZm9ybSB0aGUgdHJhbnNmb3JtIHJlcXVpcmVkIGZvciB0aGlzIHN1YmdseXBoICovCiAgICAgaWYgKCBoYXZlX3NjYWxlICkKLSAgICB7Ci0gICAgICBGVF9VSW50ICBpOwotCi0KLSAgICAgIGZvciAoIGkgPSBudW1fYmFzZV9wb2ludHM7IGkgPCBudW1fcG9pbnRzOyBpKysgKQotICAgICAgICBGVF9WZWN0b3JfVHJhbnNmb3JtKCBiYXNlX3ZlYyArIGksICZzdWJnbHlwaC0+dHJhbnNmb3JtICk7Ci0gICAgfQorICAgICAgRlRfT3V0bGluZV9UcmFuc2Zvcm0oICZjdXJyZW50LCAmc3ViZ2x5cGgtPnRyYW5zZm9ybSApOwogCiAgICAgLyogZ2V0IG9mZnNldCAqLwogICAgIGlmICggISggc3ViZ2x5cGgtPmZsYWdzICYgQVJHU19BUkVfWFlfVkFMVUVTICkgKQogICAgIHsKLSAgICAgIEZUX1VJbnQgICAgIGsgPSBzdWJnbHlwaC0+YXJnMTsKLSAgICAgIEZUX1VJbnQgICAgIGwgPSBzdWJnbHlwaC0+YXJnMjsKKyAgICAgIEZUX1VJbnQgICAgIG51bV9wb2ludHMgPSAoRlRfVUludClnbG9hZGVyLT5iYXNlLm91dGxpbmUubl9wb2ludHM7CisgICAgICBGVF9VSW50ICAgICBrID0gKEZUX1VJbnQpc3ViZ2x5cGgtPmFyZzE7CisgICAgICBGVF9VSW50ICAgICBsID0gKEZUX1VJbnQpc3ViZ2x5cGgtPmFyZzI7CiAgICAgICBGVF9WZWN0b3IqICBwMTsKICAgICAgIEZUX1ZlY3RvciogIHAyOwogCkBAIC0xMTMxLDggKzExMDksOCBAQAogCiAgICAgICBpZiAoICEoIGxvYWRlci0+bG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSApCiAgICAgICB7Ci0gICAgICAgIEZUX0ZpeGVkICB4X3NjYWxlID0gKChUVF9TaXplKWxvYWRlci0+c2l6ZSktPm1ldHJpY3MueF9zY2FsZTsKLSAgICAgICAgRlRfRml4ZWQgIHlfc2NhbGUgPSAoKFRUX1NpemUpbG9hZGVyLT5zaXplKS0+bWV0cmljcy55X3NjYWxlOworICAgICAgICBGVF9GaXhlZCAgeF9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy54X3NjYWxlOworICAgICAgICBGVF9GaXhlZCAgeV9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy55X3NjYWxlOwogCiAKICAgICAgICAgeCA9IEZUX011bEZpeCggeCwgeF9zY2FsZSApOwpAQCAtMTE0Nyw5ICsxMTI1LDcgQEAKICAgICB9CiAKICAgICBpZiAoIHggfHwgeSApCi0gICAgICB0cmFuc2xhdGVfYXJyYXkoIG51bV9wb2ludHMgLSBudW1fYmFzZV9wb2ludHMsCi0gICAgICAgICAgICAgICAgICAgICAgIGJhc2VfdmVjICsgbnVtX2Jhc2VfcG9pbnRzLAotICAgICAgICAgICAgICAgICAgICAgICB4LCB5ICk7CisgICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggJmN1cnJlbnQsIHgsIHkgKTsKIAogICAgIHJldHVybiBGVF9FcnJfT2s7CiAgIH0KQEAgLTEyMTEsNyArMTE4Nyw3IEBACiAgICAgICBGVF9UUkFDRTUoKCAiICBJbnN0cnVjdGlvbnMgc2l6ZSA9ICVkXG4iLCBuX2lucyApKTsKIAogICAgICAgLyogY2hlY2sgaXQgKi8KLSAgICAgIG1heF9pbnMgPSAoKFRUX0ZhY2UpbG9hZGVyLT5mYWNlKS0+bWF4X3Byb2ZpbGUubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zOworICAgICAgbWF4X2lucyA9IGxvYWRlci0+ZmFjZS0+bWF4X3Byb2ZpbGUubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zOwogICAgICAgaWYgKCBuX2lucyA+IG1heF9pbnMgKQogICAgICAgewogICAgICAgICAvKiBkb24ndCB0cnVzdCBgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zJzsgKi8KQEAgLTEzNTAsMTEgKzEzMjYsMTQgQEAKICNkZWZpbmUgVFRfTE9BREVSX1NFVF9QUCggbG9hZGVyICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZUX0Jvb2wgIHN1YnBpeGVsXyAgPSBsb2FkZXItPmV4ZWMgPyBsb2FkZXItPmV4ZWMtPnN1YnBpeGVsICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRlRfQm9vbCAgZ3JheXNjYWxlXyA9IGxvYWRlci0+ZXhlYyA/IGxvYWRlci0+ZXhlYy0+Z3JheXNjYWxlICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGVF9Cb29sICB1c2VfYXdfMl8gID0gKEZUX0Jvb2wpKCBzdWJwaXhlbF8gJiYgZ3JheXNjYWxlXyApOyAgICAgXAorICAgICAgICAgICAgRlRfQm9vbCAgc3VicGl4ZWxfaGludGluZ18gPSBsb2FkZXItPmV4ZWMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGxvYWRlci0+ZXhlYy0+c3VicGl4ZWxfaGludGluZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRlRfQm9vbCAgZ3JheXNjYWxlXyAgICAgICAgPSBsb2FkZXItPmV4ZWMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGxvYWRlci0+ZXhlYy0+Z3JheXNjYWxlICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRlRfQm9vbCAgdXNlX2F3XzJfICAgICAgICAgPSAoRlRfQm9vbCkoIHN1YnBpeGVsX2hpbnRpbmdfICYmICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmF5c2NhbGVfICAgICAgICApOyAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIChsb2FkZXIpLT5wcDEueCA9IChsb2FkZXIpLT5iYm94LnhNaW4gLSAobG9hZGVyKS0+bGVmdF9iZWFyaW5nOyBcCkBAIC0xNDA1LDE0ICsxMzg0LDEwIEBACiAgICAgRlRfRXJyb3IgICAgICAgIGVycm9yICAgICAgICA9IEZUX0Vycl9PazsKICAgICBGVF9GaXhlZCAgICAgICAgeF9zY2FsZSwgeV9zY2FsZTsKICAgICBGVF9VTG9uZyAgICAgICAgb2Zmc2V0OwotICAgIFRUX0ZhY2UgICAgICAgICBmYWNlICAgICAgICAgPSAoVFRfRmFjZSlsb2FkZXItPmZhY2U7CisgICAgVFRfRmFjZSAgICAgICAgIGZhY2UgICAgICAgICA9IGxvYWRlci0+ZmFjZTsKICAgICBGVF9HbHlwaExvYWRlciAgZ2xvYWRlciAgICAgID0gbG9hZGVyLT5nbG9hZGVyOwogICAgIEZUX0Jvb2wgICAgICAgICBvcGVuZWRfZnJhbWUgPSAwOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAotICAgIEZUX1ZlY3RvciogICAgICBkZWx0YXMgICAgICAgPSBOVUxMOwotI2VuZGlmCi0KICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCiAgICAgRlRfU3RyZWFtUmVjICAgIGluY19zdHJlYW07CiAgICAgRlRfRGF0YSAgICAgICAgIGdseXBoX2RhdGE7CkBAIC0xNDI5LDE5ICsxNDA0LDIxIEBACiAgICAgICBnb3RvIEV4aXQ7CiAgICAgfQogCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKICAgICAvKiBjaGVjayBnbHlwaCBpbmRleCAqLwogICAgIGlmICggZ2x5cGhfaW5kZXggPj0gKEZUX1VJbnQpZmFjZS0+cm9vdC5udW1fZ2x5cGhzICkKICAgICB7CiAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0luZGV4ICk7CiAgICAgICBnb3RvIEV4aXQ7CiAgICAgfQorI2VuZGlmCiAKICAgICBsb2FkZXItPmdseXBoX2luZGV4ID0gZ2x5cGhfaW5kZXg7CiAKICAgICBpZiAoICggbG9hZGVyLT5sb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApID09IDAgKQogICAgIHsKLSAgICAgIHhfc2NhbGUgPSAoKFRUX1NpemUpbG9hZGVyLT5zaXplKS0+bWV0cmljcy54X3NjYWxlOwotICAgICAgeV9zY2FsZSA9ICgoVFRfU2l6ZSlsb2FkZXItPnNpemUpLT5tZXRyaWNzLnlfc2NhbGU7CisgICAgICB4X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnhfc2NhbGU7CisgICAgICB5X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnlfc2NhbGU7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0xNDcyLDcgKzE0NDksOCBAQAogCiAgICAgICBGVF9NRU1fWkVSTyggJmluY19zdHJlYW0sIHNpemVvZiAoIGluY19zdHJlYW0gKSApOwogICAgICAgRlRfU3RyZWFtX09wZW5NZW1vcnkoICZpbmNfc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2RhdGEucG9pbnRlciwgZ2x5cGhfZGF0YS5sZW5ndGggKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9kYXRhLnBvaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKWdseXBoX2RhdGEubGVuZ3RoICk7CiAKICAgICAgIGxvYWRlci0+c3RyZWFtID0gJmluY19zdHJlYW07CiAgICAgfQpAQCAtMTUwMCw3ICsxNDc4LDcgQEAKIAogICAgICAgZXJyb3IgPSBmYWNlLT5hY2Nlc3NfZ2x5cGhfZnJhbWUoIGxvYWRlciwgZ2x5cGhfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLT5nbHlmX29mZnNldCArIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXItPmJ5dGVfbGVuICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpbG9hZGVyLT5ieXRlX2xlbiApOwogICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgIGdvdG8gRXhpdDsKIApAQCAtMTU0NiwyOCArMTUyNCw0OSBAQAogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogCi0gICAgICBpZiAoICgoVFRfRmFjZSkobG9hZGVyLT5mYWNlKSktPmRvYmxlbmQgKQorICAgICAgaWYgKCBsb2FkZXItPmZhY2UtPmRvYmxlbmQgKQogICAgICAgeworICAgICAgICAvKiBhIHNtYWxsIG91dGxpbmUgc3RydWN0dXJlIHdpdGggZm91ciBlbGVtZW50cyBmb3IgKi8KKyAgICAgICAgLyogY29tbXVuaWNhdGlvbiB3aXRoIGBUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcycgICovCisgICAgICAgIEZUX1ZlY3RvciAgIHBvaW50c1s0XTsKKyAgICAgICAgY2hhciAgICAgICAgdGFnc1s0XSAgICAgPSB7IDEsIDEsIDEsIDEgfTsKKyAgICAgICAgc2hvcnQgICAgICAgY29udG91cnNbNF0gPSB7IDAsIDEsIDIsIDMgfTsKKyAgICAgICAgRlRfT3V0bGluZSAgb3V0bGluZTsKKworCisgICAgICAgIHBvaW50c1swXS54ID0gbG9hZGVyLT5wcDEueDsKKyAgICAgICAgcG9pbnRzWzBdLnkgPSBsb2FkZXItPnBwMS55OworICAgICAgICBwb2ludHNbMV0ueCA9IGxvYWRlci0+cHAyLng7CisgICAgICAgIHBvaW50c1sxXS55ID0gbG9hZGVyLT5wcDIueTsKKworICAgICAgICBwb2ludHNbMl0ueCA9IGxvYWRlci0+cHAzLng7CisgICAgICAgIHBvaW50c1syXS55ID0gbG9hZGVyLT5wcDMueTsKKyAgICAgICAgcG9pbnRzWzNdLnggPSBsb2FkZXItPnBwNC54OworICAgICAgICBwb2ludHNbM10ueSA9IGxvYWRlci0+cHA0Lnk7CisKKyAgICAgICAgb3V0bGluZS5uX3BvaW50cyAgID0gNDsKKyAgICAgICAgb3V0bGluZS5uX2NvbnRvdXJzID0gNDsKKyAgICAgICAgb3V0bGluZS5wb2ludHMgICAgID0gcG9pbnRzOworICAgICAgICBvdXRsaW5lLnRhZ3MgICAgICAgPSB0YWdzOworICAgICAgICBvdXRsaW5lLmNvbnRvdXJzICAgPSBjb250b3VyczsKKwogICAgICAgICAvKiB0aGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgc2NhbGluZyAqLwotICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxvYWRlci0+ZmFjZS0+bWVtb3J5OwotCi0KLSAgICAgICAgZXJyb3IgPSBUVF9WYXJ5X0dldF9HbHlwaF9EZWx0YXMoIChUVF9GYWNlKShsb2FkZXItPmZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsICZkZWx0YXMsIDQgKTsKKyAgICAgICAgZXJyb3IgPSBUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyggbG9hZGVyLT5mYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KW91dGxpbmUubl9wb2ludHMgKTsKICAgICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgICAgZ290byBFeGl0OwogCi0gICAgICAgIGxvYWRlci0+cHAxLnggKz0gZGVsdGFzWzBdLng7Ci0gICAgICAgIGxvYWRlci0+cHAxLnkgKz0gZGVsdGFzWzBdLnk7Ci0gICAgICAgIGxvYWRlci0+cHAyLnggKz0gZGVsdGFzWzFdLng7Ci0gICAgICAgIGxvYWRlci0+cHAyLnkgKz0gZGVsdGFzWzFdLnk7CisgICAgICAgIGxvYWRlci0+cHAxLnggPSBwb2ludHNbMF0ueDsKKyAgICAgICAgbG9hZGVyLT5wcDEueSA9IHBvaW50c1swXS55OworICAgICAgICBsb2FkZXItPnBwMi54ID0gcG9pbnRzWzFdLng7CisgICAgICAgIGxvYWRlci0+cHAyLnkgPSBwb2ludHNbMV0ueTsKIAotICAgICAgICBsb2FkZXItPnBwMy54ICs9IGRlbHRhc1syXS54OwotICAgICAgICBsb2FkZXItPnBwMy55ICs9IGRlbHRhc1syXS55OwotICAgICAgICBsb2FkZXItPnBwNC54ICs9IGRlbHRhc1szXS54OwotICAgICAgICBsb2FkZXItPnBwNC55ICs9IGRlbHRhc1szXS55OwotCi0gICAgICAgIEZUX0ZSRUUoIGRlbHRhcyApOworICAgICAgICBsb2FkZXItPnBwMy54ID0gcG9pbnRzWzJdLng7CisgICAgICAgIGxvYWRlci0+cHAzLnkgPSBwb2ludHNbMl0ueTsKKyAgICAgICAgbG9hZGVyLT5wcDQueCA9IHBvaW50c1szXS54OworICAgICAgICBsb2FkZXItPnBwNC55ID0gcG9pbnRzWzNdLnk7CiAgICAgICB9CiAKICNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUICovCkBAIC0xNjMzLDggKzE2MzIsOCBAQAogICAgICAgRlRfVUxvbmcgIGluc19wb3M7ICAvKiBwb3NpdGlvbiBvZiBjb21wb3NpdGUgaW5zdHJ1Y3Rpb25zLCBpZiBhbnkgKi8KIAogCi0gICAgICBzdGFydF9wb2ludCAgID0gZ2xvYWRlci0+YmFzZS5vdXRsaW5lLm5fcG9pbnRzOwotICAgICAgc3RhcnRfY29udG91ciA9IGdsb2FkZXItPmJhc2Uub3V0bGluZS5uX2NvbnRvdXJzOworICAgICAgc3RhcnRfcG9pbnQgICA9IChGVF9VSW50KWdsb2FkZXItPmJhc2Uub3V0bGluZS5uX3BvaW50czsKKyAgICAgIHN0YXJ0X2NvbnRvdXIgPSAoRlRfVUludClnbG9hZGVyLT5iYXNlLm91dGxpbmUubl9jb250b3VyczsKIAogICAgICAgLyogZm9yIGVhY2ggc3ViZ2x5cGgsIHJlYWQgY29tcG9zaXRlIGhlYWRlciAqLwogICAgICAgZXJyb3IgPSBmYWNlLT5yZWFkX2NvbXBvc2l0ZV9nbHlwaCggbG9hZGVyICk7CkBAIC0xNjUyLDQ3ICsxNjUxLDEwNiBAQAogCiAgICAgICBpZiAoIGZhY2UtPmRvYmxlbmQgKQogICAgICAgewotICAgICAgICBGVF9JbnQgICAgICAgaSwgbGltaXQ7CisgICAgICAgIHNob3J0ICAgICAgICBpLCBsaW1pdDsKICAgICAgICAgRlRfU3ViR2x5cGggIHN1YmdseXBoOwotICAgICAgICBGVF9NZW1vcnkgICAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CisKKyAgICAgICAgRlRfT3V0bGluZSAgb3V0bGluZTsKKyAgICAgICAgRlRfVmVjdG9yKiAgcG9pbnRzICAgPSBOVUxMOworICAgICAgICBjaGFyKiAgICAgICB0YWdzICAgICA9IE5VTEw7CisgICAgICAgIHNob3J0KiAgICAgIGNvbnRvdXJzID0gTlVMTDsKKworICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OwogCiAKLSAgICAgICAgLyogdGhpcyBwcm92aWRlcyBhZGRpdGlvbmFsIG9mZnNldHMgKi8KLSAgICAgICAgLyogZm9yIGVhY2ggY29tcG9uZW50J3MgdHJhbnNsYXRpb24gKi8KKyAgICAgICAgbGltaXQgPSAoc2hvcnQpZ2xvYWRlci0+Y3VycmVudC5udW1fc3ViZ2x5cGhzOwogCi0gICAgICAgIGlmICggKCBlcnJvciA9IFRUX1ZhcnlfR2V0X0dseXBoX0RlbHRhcygKLSAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICZkZWx0YXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYWRlci0+Y3VycmVudC5udW1fc3ViZ2x5cGhzICsgNCApICkgIT0gMCApCi0gICAgICAgICAgZ290byBFeGl0OworICAgICAgICAvKiBjb25zdHJ1Y3QgYW4gb3V0bGluZSBzdHJ1Y3R1cmUgZm9yICAgICAgICAgICAgICAqLworICAgICAgICAvKiBjb21tdW5pY2F0aW9uIHdpdGggYFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzJyAqLworICAgICAgICBvdXRsaW5lLm5fcG9pbnRzICAgPSAoc2hvcnQpKCBnbG9hZGVyLT5jdXJyZW50Lm51bV9zdWJnbHlwaHMgKyA0ICk7CisgICAgICAgIG91dGxpbmUubl9jb250b3VycyA9IG91dGxpbmUubl9wb2ludHM7CiAKLSAgICAgICAgc3ViZ2x5cGggPSBnbG9hZGVyLT5jdXJyZW50LnN1YmdseXBocyArIGdsb2FkZXItPmJhc2UubnVtX3N1YmdseXBoczsKLSAgICAgICAgbGltaXQgICAgPSBnbG9hZGVyLT5jdXJyZW50Lm51bV9zdWJnbHlwaHM7CisgICAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBwb2ludHMsIG91dGxpbmUubl9wb2ludHMgKSAgIHx8CisgICAgICAgICAgICAgRlRfTkVXX0FSUkFZKCB0YWdzLCBvdXRsaW5lLm5fcG9pbnRzICkgICAgIHx8CisgICAgICAgICAgICAgRlRfTkVXX0FSUkFZKCBjb250b3Vycywgb3V0bGluZS5uX3BvaW50cyApICkKKyAgICAgICAgICBnb3RvIEV4aXQxOwogCi0gICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbGltaXQ7ICsraSwgKytzdWJnbHlwaCApCisgICAgICAgIHN1YmdseXBoID0gZ2xvYWRlci0+Y3VycmVudC5zdWJnbHlwaHM7CisKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBsaW1pdDsgaSsrLCBzdWJnbHlwaCsrICkKICAgICAgICAgewotICAgICAgICAgIGlmICggc3ViZ2x5cGgtPmZsYWdzICYgQVJHU19BUkVfWFlfVkFMVUVTICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBYWFg6IG92ZXJmbG93IGNoZWNrIGZvciBzdWJnbHlwaC0+e2FyZzEsYXJnMn0uICAgKi8KLSAgICAgICAgICAgIC8qIGRlbHRhc1tpXS57eCx5fSBtdXN0IGJlIHdpdGhpbiBzaWduZWQgMTYtYml0LCAgICAqLwotICAgICAgICAgICAgLyogYnV0IHRoZSByZXN0cmljdGlvbiBvZiBzdW1tZWQgZGVsdGEgaXMgbm90IGNsZWFyICovCi0gICAgICAgICAgICBzdWJnbHlwaC0+YXJnMSArPSAoRlRfSW50MTYpZGVsdGFzW2ldLng7Ci0gICAgICAgICAgICBzdWJnbHlwaC0+YXJnMiArPSAoRlRfSW50MTYpZGVsdGFzW2ldLnk7Ci0gICAgICAgICAgfQorICAgICAgICAgIC8qIGFwcGx5aW5nIGRlbHRhcyBmb3IgYW5jaG9yIHBvaW50cyBkb2Vzbid0IG1ha2Ugc2Vuc2UsICovCisgICAgICAgICAgLyogYnV0IHdlIGRvbid0IGhhdmUgdG8gc3BlY2lhbGx5IGNoZWNrIHRoaXMgc2luY2UgICAgICAgKi8KKyAgICAgICAgICAvKiB1bnVzZWQgZGVsdGEgdmFsdWVzIGFyZSB6ZXJvIGFueXdheXMgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIHBvaW50c1tpXS54ID0gc3ViZ2x5cGgtPmFyZzE7CisgICAgICAgICAgcG9pbnRzW2ldLnkgPSBzdWJnbHlwaC0+YXJnMjsKKyAgICAgICAgICB0YWdzW2ldICAgICA9IDE7CisgICAgICAgICAgY29udG91cnNbaV0gPSBpOwogICAgICAgICB9CiAKLSAgICAgICAgbG9hZGVyLT5wcDEueCArPSBkZWx0YXNbaSArIDBdLng7Ci0gICAgICAgIGxvYWRlci0+cHAxLnkgKz0gZGVsdGFzW2kgKyAwXS55OwotICAgICAgICBsb2FkZXItPnBwMi54ICs9IGRlbHRhc1tpICsgMV0ueDsKLSAgICAgICAgbG9hZGVyLT5wcDIueSArPSBkZWx0YXNbaSArIDFdLnk7CisgICAgICAgIHBvaW50c1tpXS54ID0gbG9hZGVyLT5wcDEueDsKKyAgICAgICAgcG9pbnRzW2ldLnkgPSBsb2FkZXItPnBwMS55OworICAgICAgICB0YWdzW2ldICAgICA9IDE7CisgICAgICAgIGNvbnRvdXJzW2ldID0gaTsKIAotICAgICAgICBsb2FkZXItPnBwMy54ICs9IGRlbHRhc1tpICsgMl0ueDsKLSAgICAgICAgbG9hZGVyLT5wcDMueSArPSBkZWx0YXNbaSArIDJdLnk7Ci0gICAgICAgIGxvYWRlci0+cHA0LnggKz0gZGVsdGFzW2kgKyAzXS54OwotICAgICAgICBsb2FkZXItPnBwNC55ICs9IGRlbHRhc1tpICsgM10ueTsKKyAgICAgICAgaSsrOworICAgICAgICBwb2ludHNbaV0ueCA9IGxvYWRlci0+cHAyLng7CisgICAgICAgIHBvaW50c1tpXS55ID0gbG9hZGVyLT5wcDIueTsKKyAgICAgICAgdGFnc1tpXSAgICAgPSAxOworICAgICAgICBjb250b3Vyc1tpXSA9IGk7CiAKLSAgICAgICAgRlRfRlJFRSggZGVsdGFzICk7CisgICAgICAgIGkrKzsKKyAgICAgICAgcG9pbnRzW2ldLnggPSBsb2FkZXItPnBwMy54OworICAgICAgICBwb2ludHNbaV0ueSA9IGxvYWRlci0+cHAzLnk7CisgICAgICAgIHRhZ3NbaV0gICAgID0gMTsKKyAgICAgICAgY29udG91cnNbaV0gPSBpOworCisgICAgICAgIGkrKzsKKyAgICAgICAgcG9pbnRzW2ldLnggPSBsb2FkZXItPnBwNC54OworICAgICAgICBwb2ludHNbaV0ueSA9IGxvYWRlci0+cHA0Lnk7CisgICAgICAgIHRhZ3NbaV0gICAgID0gMTsKKyAgICAgICAgY29udG91cnNbaV0gPSBpOworCisgICAgICAgIG91dGxpbmUucG9pbnRzICAgPSBwb2ludHM7CisgICAgICAgIG91dGxpbmUudGFncyAgICAgPSB0YWdzOworICAgICAgICBvdXRsaW5lLmNvbnRvdXJzID0gY29udG91cnM7CisKKyAgICAgICAgLyogdGhpcyBjYWxsIHByb3ZpZGVzIGFkZGl0aW9uYWwgb2Zmc2V0cyAqLworICAgICAgICAvKiBmb3IgZWFjaCBjb21wb25lbnQncyB0cmFuc2xhdGlvbiAgICAgICovCisgICAgICAgIGlmICggKCBlcnJvciA9IFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzKAorICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgJm91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpb3V0bGluZS5uX3BvaW50cyApICkgIT0gMCApCisgICAgICAgICAgZ290byBFeGl0MTsKKworICAgICAgICBzdWJnbHlwaCA9IGdsb2FkZXItPmN1cnJlbnQuc3ViZ2x5cGhzOworCisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbGltaXQ7IGkrKywgc3ViZ2x5cGgrKyApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBYWFg6IG92ZXJmbG93IGNoZWNrIGZvciBzdWJnbHlwaC0+e2FyZzEsYXJnMn0uICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgIERlbHRhcyBtdXN0IGJlIHdpdGhpbiBzaWduZWQgMTYtYml0LCAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgIGJ1dCB0aGUgcmVzdHJpY3Rpb24gb2Ygc3VtbWVkIGRlbHRhcyBpcyBub3QgY2xlYXIgKi8KKyAgICAgICAgICBzdWJnbHlwaC0+YXJnMSA9IChGVF9JbnQxNilwb2ludHNbaV0ueDsKKyAgICAgICAgICBzdWJnbHlwaC0+YXJnMiA9IChGVF9JbnQxNilwb2ludHNbaV0ueTsKKyAgICAgICAgfQorCisgICAgICAgIGxvYWRlci0+cHAxLnggPSBwb2ludHNbaSArIDBdLng7CisgICAgICAgIGxvYWRlci0+cHAxLnkgPSBwb2ludHNbaSArIDBdLnk7CisgICAgICAgIGxvYWRlci0+cHAyLnggPSBwb2ludHNbaSArIDFdLng7CisgICAgICAgIGxvYWRlci0+cHAyLnkgPSBwb2ludHNbaSArIDFdLnk7CisKKyAgICAgICAgbG9hZGVyLT5wcDMueCA9IHBvaW50c1tpICsgMl0ueDsKKyAgICAgICAgbG9hZGVyLT5wcDMueSA9IHBvaW50c1tpICsgMl0ueTsKKyAgICAgICAgbG9hZGVyLT5wcDQueCA9IHBvaW50c1tpICsgM10ueDsKKyAgICAgICAgbG9hZGVyLT5wcDQueSA9IHBvaW50c1tpICsgM10ueTsKKworICAgICAgRXhpdDE6CisgICAgICAgIEZUX0ZSRUUoIG91dGxpbmUucG9pbnRzICk7CisgICAgICAgIEZUX0ZSRUUoIG91dGxpbmUudGFncyApOworICAgICAgICBGVF9GUkVFKCBvdXRsaW5lLmNvbnRvdXJzICk7CisKKyAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQogCiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVCAqLwpAQCAtMTcyOCw3ICsxNzg2LDcgQEAKIAogICAgICAgewogICAgICAgICBGVF9VSW50ICAgICAgbiwgbnVtX2Jhc2VfcG9pbnRzOwotICAgICAgICBGVF9TdWJHbHlwaCAgc3ViZ2x5cGggICAgICAgPSAwOworICAgICAgICBGVF9TdWJHbHlwaCAgc3ViZ2x5cGggICAgICAgPSBOVUxMOwogCiAgICAgICAgIEZUX1VJbnQgICAgICBudW1fcG9pbnRzICAgICA9IHN0YXJ0X3BvaW50OwogICAgICAgICBGVF9VSW50ICAgICAgbnVtX3N1YmdseXBocyAgPSBnbG9hZGVyLT5jdXJyZW50Lm51bV9zdWJnbHlwaHM7CkBAIC0xNzU3LDEwICsxODE1LDEyIEBACiAgICAgICAgICAgcHBbMl0gPSBsb2FkZXItPnBwMzsKICAgICAgICAgICBwcFszXSA9IGxvYWRlci0+cHA0OwogCi0gICAgICAgICAgbnVtX2Jhc2VfcG9pbnRzID0gZ2xvYWRlci0+YmFzZS5vdXRsaW5lLm5fcG9pbnRzOworICAgICAgICAgIG51bV9iYXNlX3BvaW50cyA9IChGVF9VSW50KWdsb2FkZXItPmJhc2Uub3V0bGluZS5uX3BvaW50czsKIAotICAgICAgICAgIGVycm9yID0gbG9hZF90cnVldHlwZV9nbHlwaCggbG9hZGVyLCBzdWJnbHlwaC0+aW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNlX2NvdW50ICsgMSwgRkFMU0UgKTsKKyAgICAgICAgICBlcnJvciA9IGxvYWRfdHJ1ZXR5cGVfZ2x5cGgoIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KXN1YmdseXBoLT5pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2VfY291bnQgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgKTsKICAgICAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgICAgIGdvdG8gRXhpdDsKIApAQCAtMTc3Niw3ICsxODM2LDcgQEAKICAgICAgICAgICAgIGxvYWRlci0+cHA0ID0gcHBbM107CiAgICAgICAgICAgfQogCi0gICAgICAgICAgbnVtX3BvaW50cyA9IGdsb2FkZXItPmJhc2Uub3V0bGluZS5uX3BvaW50czsKKyAgICAgICAgICBudW1fcG9pbnRzID0gKEZUX1VJbnQpZ2xvYWRlci0+YmFzZS5vdXRsaW5lLm5fcG9pbnRzOwogCiAgICAgICAgICAgaWYgKCBudW1fcG9pbnRzID09IG51bV9iYXNlX3BvaW50cyApCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE4NDcsNyArMTkwNyw3IEBACiAgIGNvbXB1dGVfZ2x5cGhfbWV0cmljcyggVFRfTG9hZGVyICBsb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnbHlwaF9pbmRleCApCiAgIHsKLSAgICBUVF9GYWNlICAgIGZhY2UgICA9IChUVF9GYWNlKWxvYWRlci0+ZmFjZTsKKyAgICBUVF9GYWNlICAgIGZhY2UgICA9IGxvYWRlci0+ZmFjZTsKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKICAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGZhY2UgKTsKICNlbmRpZgpAQCAtMTg1NSw3ICsxOTE1LDcgQEAKICAgICBGVF9CQm94ICAgICAgIGJib3g7CiAgICAgRlRfRml4ZWQgICAgICB5X3NjYWxlOwogICAgIFRUX0dseXBoU2xvdCAgZ2x5cGggPSBsb2FkZXItPmdseXBoOwotICAgIFRUX1NpemUgICAgICAgc2l6ZSAgPSAoVFRfU2l6ZSlsb2FkZXItPnNpemU7CisgICAgVFRfU2l6ZSAgICAgICBzaXplICA9IGxvYWRlci0+c2l6ZTsKIAogCiAgICAgeV9zY2FsZSA9IDB4MTAwMDBMOwpAQCAtMTg3Niw4ICsxOTM2LDEwIEBACiAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgID0gbG9hZGVyLT5wcDIueCAtIGxvYWRlci0+cHAxLng7CiAKICAgICAvKiBhZGp1c3QgYWR2YW5jZSB3aWR0aCB0byB0aGUgdmFsdWUgY29udGFpbmVkIGluIHRoZSBoZG14IHRhYmxlICovCi0gICAgaWYgKCAhZmFjZS0+cG9zdHNjcmlwdC5pc0ZpeGVkUGl0Y2ggICYmCi0gICAgICAgICBJU19ISU5URUQoIGxvYWRlci0+bG9hZF9mbGFncyApICkKKyAgICAvKiB1bmxlc3MgRlRfTE9BRF9DT01QVVRFX01FVFJJQ1MgaXMgc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCAhZmFjZS0+cG9zdHNjcmlwdC5pc0ZpeGVkUGl0Y2ggICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBJU19ISU5URUQoIGxvYWRlci0+bG9hZF9mbGFncyApICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAhKCBsb2FkZXItPmxvYWRfZmxhZ3MgJiBGVF9MT0FEX0NPTVBVVEVfTUVUUklDUyApICkKICAgICB7CiAgICAgICBGVF9CeXRlKiAgd2lkdGhwOwogCkBAIC0xOTAwLDcgKzE5NjIsNyBAQAogICAgICAgICAgICAgICggKCBpZ25vcmVfeF9tb2RlICYmIGxvYWRlci0+ZXhlYy0+Y29tcGF0aWJsZV93aWR0aHMgKSB8fAogICAgICAgICAgICAgICAgICFpZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgIFNQSF9PUFRJT05fQklUTUFQX1dJRFRIUyAgICAgICAgICAgICAgICAgICAgICAgICAgICApICkKLSAgICAgICAgICBnbHlwaC0+bWV0cmljcy5ob3JpQWR2YW5jZSA9ICp3aWR0aHAgPDwgNjsKKyAgICAgICAgICBnbHlwaC0+bWV0cmljcy5ob3JpQWR2YW5jZSA9ICp3aWR0aHAgKiA2NDsKICAgICAgIH0KICAgICAgIGVsc2UKIApAQCAtMTkwOCw3ICsxOTcwLDcgQEAKIAogICAgICAgewogICAgICAgICBpZiAoIHdpZHRocCApCi0gICAgICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgPSAqd2lkdGhwIDw8IDY7CisgICAgICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgPSAqd2lkdGhwICogNjQ7CiAgICAgICB9CiAgICAgfQogCkBAIC0yMDM5LDcgKzIxMDEsNyBAQAogICAgIGVycm9yID0gc2ZudC0+bG9hZF9zYml0X2ltYWdlKCBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLT5zdHJpa2VfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KWxvYWRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWxvYWRfZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoLT5iaXRtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZXRyaWNzICk7CkBAIC0yMDQ4LDE2ICsyMTEwLDE2IEBACiAgICAgICBnbHlwaC0+b3V0bGluZS5uX3BvaW50cyAgID0gMDsKICAgICAgIGdseXBoLT5vdXRsaW5lLm5fY29udG91cnMgPSAwOwogCi0gICAgICBnbHlwaC0+bWV0cmljcy53aWR0aCAgPSAoRlRfUG9zKW1ldHJpY3Mud2lkdGggIDw8IDY7Ci0gICAgICBnbHlwaC0+bWV0cmljcy5oZWlnaHQgPSAoRlRfUG9zKW1ldHJpY3MuaGVpZ2h0IDw8IDY7CisgICAgICBnbHlwaC0+bWV0cmljcy53aWR0aCAgPSAoRlRfUG9zKW1ldHJpY3Mud2lkdGggICogNjQ7CisgICAgICBnbHlwaC0+bWV0cmljcy5oZWlnaHQgPSAoRlRfUG9zKW1ldHJpY3MuaGVpZ2h0ICogNjQ7CiAKLSAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWCA9IChGVF9Qb3MpbWV0cmljcy5ob3JpQmVhcmluZ1ggPDwgNjsKLSAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWSA9IChGVF9Qb3MpbWV0cmljcy5ob3JpQmVhcmluZ1kgPDwgNjsKLSAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlBZHZhbmNlICA9IChGVF9Qb3MpbWV0cmljcy5ob3JpQWR2YW5jZSAgPDwgNjsKKyAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWCA9IChGVF9Qb3MpbWV0cmljcy5ob3JpQmVhcmluZ1ggKiA2NDsKKyAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWSA9IChGVF9Qb3MpbWV0cmljcy5ob3JpQmVhcmluZ1kgKiA2NDsKKyAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlBZHZhbmNlICA9IChGVF9Qb3MpbWV0cmljcy5ob3JpQWR2YW5jZSAgKiA2NDsKIAotICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEJlYXJpbmdYID0gKEZUX1BvcyltZXRyaWNzLnZlcnRCZWFyaW5nWCA8PCA2OwotICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEJlYXJpbmdZID0gKEZUX1BvcyltZXRyaWNzLnZlcnRCZWFyaW5nWSA8PCA2OwotICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEFkdmFuY2UgID0gKEZUX1BvcyltZXRyaWNzLnZlcnRBZHZhbmNlICA8PCA2OworICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEJlYXJpbmdYID0gKEZUX1BvcyltZXRyaWNzLnZlcnRCZWFyaW5nWCAqIDY0OworICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEJlYXJpbmdZID0gKEZUX1BvcyltZXRyaWNzLnZlcnRCZWFyaW5nWSAqIDY0OworICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEFkdmFuY2UgID0gKEZUX1BvcyltZXRyaWNzLnZlcnRBZHZhbmNlICAqIDY0OwogCiAgICAgICBnbHlwaC0+Zm9ybWF0ID0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUDsKIApAQCAtMjExMSwxNCArMjE3MywxNiBAQAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwogICAgICAgVFRfRHJpdmVyICBkcml2ZXIgPSAoVFRfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBmYWNlICk7CiAKLSAgICAgIEZUX0Jvb2wgIHN1YnBpeGVsID0gRkFMU0U7CisgICAgICBGVF9Cb29sICBzdWJwaXhlbF9oaW50aW5nID0gRkFMU0U7CiAKICNpZiAwCiAgICAgICAvKiBub3QgdXNlZCB5ZXQgKi8KICAgICAgIEZUX0Jvb2wgIGNvbXBhdGlibGVfd2lkdGhzOwogICAgICAgRlRfQm9vbCAgc3ltbWV0cmljYWxfc21vb3RoaW5nOwogICAgICAgRlRfQm9vbCAgYmdyOworICAgICAgRlRfQm9vbCAgdmVydGljYWxfbGNkOwogICAgICAgRlRfQm9vbCAgc3VicGl4ZWxfcG9zaXRpb25lZDsKKyAgICAgIEZUX0Jvb2wgIGdyYXlfY2xlYXJ0eXBlOwogI2VuZGlmCiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCiAKQEAgLTIxMzcsOCArMjIwMSw3IEBACiAgICAgICAgIHJldHVybiBzaXplLT5jdnRfcmVhZHk7CiAKICAgICAgIC8qIHF1ZXJ5IG5ldyBleGVjdXRpb24gY29udGV4dCAqLwotICAgICAgZXhlYyA9IHNpemUtPmRlYnVnID8gc2l6ZS0+Y29udGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgIDogKCAoVFRfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBmYWNlICkgKS0+Y29udGV4dDsKKyAgICAgIGV4ZWMgPSBzaXplLT5jb250ZXh0OwogICAgICAgaWYgKCAhZXhlYyApCiAgICAgICAgIHJldHVybiBGVF9USFJPVyggQ291bGRfTm90X0ZpbmRfQ29udGV4dCApOwogCkBAIC0yMTQ2LDMzICsyMjA5LDM1IEBACiAKICAgICAgIGlmICggZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggKQogICAgICAgewotICAgICAgICBzdWJwaXhlbCA9IEZUX0JPT0woICggRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9SRU5ERVJfTU9ERV9NT05PICAgICAgICAgICAgICAgKSAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUEhfT1BUSU9OX1NFVF9TVUJQSVhFTCAgICAgICAgICAgICAgICApOworICAgICAgICBzdWJwaXhlbF9oaW50aW5nID0gRlRfQk9PTCggKCBGVF9MT0FEX1RBUkdFVF9NT0RFKCBsb2FkX2ZsYWdzICkgIT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUkVOREVSX01PREVfTU9OTyAgICAgICAgICAgICAgICkgICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUEhfT1BUSU9OX1NFVF9TVUJQSVhFTCAgICAgICAgICAgICAgICApOwogCi0gICAgICAgIGlmICggc3VicGl4ZWwgKQorICAgICAgICBpZiAoIHN1YnBpeGVsX2hpbnRpbmcgKQogICAgICAgICAgIGdyYXlzY2FsZSA9IEZBTFNFOwogICAgICAgICBlbHNlIGlmICggU1BIX09QVElPTl9TRVRfR1JBWVNDQUxFICkKICAgICAgICAgewotICAgICAgICAgIGdyYXlzY2FsZSA9IFRSVUU7Ci0gICAgICAgICAgc3VicGl4ZWwgID0gRkFMU0U7CisgICAgICAgICAgZ3JheXNjYWxlICAgICAgICA9IFRSVUU7CisgICAgICAgICAgc3VicGl4ZWxfaGludGluZyA9IEZBTFNFOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICBncmF5c2NhbGUgPSBGQUxTRTsKIAogICAgICAgICBpZiAoIEZUX0lTX1RSSUNLWSggZ2x5cGgtPmZhY2UgKSApCi0gICAgICAgICAgc3VicGl4ZWwgPSBGQUxTRTsKKyAgICAgICAgICBzdWJwaXhlbF9oaW50aW5nID0gRkFMU0U7CiAKLSAgICAgICAgZXhlYy0+aWdub3JlX3hfbW9kZSAgICAgID0gc3VicGl4ZWwgfHwgZ3JheXNjYWxlOworICAgICAgICBleGVjLT5pZ25vcmVfeF9tb2RlICAgICAgPSBzdWJwaXhlbF9oaW50aW5nIHx8IGdyYXlzY2FsZTsKICAgICAgICAgZXhlYy0+cmFzdGVyaXplcl92ZXJzaW9uID0gU1BIX09QVElPTl9TRVRfUkFTVEVSSVpFUl9WRVJTSU9OOwogICAgICAgICBpZiAoIGV4ZWMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19SQVNURVJJWkVSXzM1ICkKICAgICAgICAgICBleGVjLT5yYXN0ZXJpemVyX3ZlcnNpb24gPSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1OwogCiAjaWYgMQogICAgICAgICBleGVjLT5jb21wYXRpYmxlX3dpZHRocyAgICAgPSBTUEhfT1BUSU9OX1NFVF9DT01QQVRJQkxFX1dJRFRIUzsKLSAgICAgICAgZXhlYy0+c3ltbWV0cmljYWxfc21vb3RoaW5nID0gRkFMU0U7CisgICAgICAgIGV4ZWMtPnN5bW1ldHJpY2FsX3Ntb290aGluZyA9IFRSVUU7CiAgICAgICAgIGV4ZWMtPmJnciAgICAgICAgICAgICAgICAgICA9IEZBTFNFOworICAgICAgICBleGVjLT52ZXJ0aWNhbF9sY2QgICAgICAgICAgPSBGQUxTRTsKICAgICAgICAgZXhlYy0+c3VicGl4ZWxfcG9zaXRpb25lZCAgID0gVFJVRTsKKyAgICAgICAgZXhlYy0+Z3JheV9jbGVhcnR5cGUgICAgICAgID0gRkFMU0U7CiAjZWxzZSAvKiAwICovCiAgICAgICAgIGV4ZWMtPmNvbXBhdGlibGVfd2lkdGhzID0KICAgICAgICAgICBGVF9CT09MKCBGVF9MT0FEX1RBUkdFVF9NT0RFKCBsb2FkX2ZsYWdzICkgIT0KQEAgLTIxODMsOSArMjI0OCwxNSBAQAogICAgICAgICBleGVjLT5iZ3IgPQogICAgICAgICAgIEZUX0JPT0woIEZUX0xPQURfVEFSR0VUX01PREUoIGxvYWRfZmxhZ3MgKSAhPQogICAgICAgICAgICAgICAgICAgIFRUX0xPQURfQkdSICk7CisgICAgICAgIGV4ZWMtPnZlcnRpY2FsX2xjZCA9CisgICAgICAgICAgRlRfQk9PTCggRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApICE9CisgICAgICAgICAgICAgICAgICAgVFRfTE9BRF9WRVJUSUNBTF9MQ0QgKTsKICAgICAgICAgZXhlYy0+c3VicGl4ZWxfcG9zaXRpb25lZCA9CiAgICAgICAgICAgRlRfQk9PTCggRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApICE9CiAgICAgICAgICAgICAgICAgICAgVFRfTE9BRF9TVUJQSVhFTF9QT1NJVElPTkVEICk7CisgICAgICAgIGV4ZWMtPmdyYXlfY2xlYXJ0eXBlID0KKyAgICAgICAgICBGVF9CT09MKCBGVF9MT0FEX1RBUkdFVF9NT0RFKCBsb2FkX2ZsYWdzICkgIT0KKyAgICAgICAgICAgICAgICAgICBUVF9MT0FEX0dSQVlfQ0xFQVJUWVBFICk7CiAjZW5kaWYgLyogMCAqLwogCiAgICAgICB9CkBAIC0yMjA4LDEzICsyMjc5LDEzIEBACiAgICAgICB7CiAgICAgICAgIC8qIGEgY2hhbmdlIGZyb20gbW9ubyB0byBzdWJwaXhlbCByZW5kZXJpbmcgKGFuZCB2aWNlIHZlcnNhKSAqLwogICAgICAgICAvKiByZXF1aXJlcyBhIHJlLWV4ZWN1dGlvbiBvZiB0aGUgQ1ZUIHByb2dyYW0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgaWYgKCBzdWJwaXhlbCAhPSBleGVjLT5zdWJwaXhlbCApCisgICAgICAgIGlmICggc3VicGl4ZWxfaGludGluZyAhPSBleGVjLT5zdWJwaXhlbF9oaW50aW5nICkKICAgICAgICAgewogICAgICAgICAgIEZUX1RSQUNFNCgoICJ0dF9sb2FkZXJfaW5pdDogc3VicGl4ZWwgaGludGluZyBjaGFuZ2UsIgogICAgICAgICAgICAgICAgICAgICAgICIgcmUtZXhlY3V0aW5nIGBwcmVwJyB0YWJsZVxuIiApKTsKIAotICAgICAgICAgIGV4ZWMtPnN1YnBpeGVsID0gc3VicGl4ZWw7Ci0gICAgICAgICAgcmVleGVjdXRlICAgICAgPSBUUlVFOworICAgICAgICAgIGV4ZWMtPnN1YnBpeGVsX2hpbnRpbmcgPSBzdWJwaXhlbF9oaW50aW5nOworICAgICAgICAgIHJlZXhlY3V0ZSAgICAgICAgICAgICAgPSBUUlVFOwogICAgICAgICB9CiAKICAgICAgICAgLyogYSBjaGFuZ2UgZnJvbSBtb25vIHRvIGdyYXlzY2FsZSByZW5kZXJpbmcgKGFuZCB2aWNlIHZlcnNhKSAqLwpAQCAtMjIzNyw3ICsyMzA4LDcgQEAKICAgICAgICAgLyogcmVxdWlyZXMgYSByZS1leGVjdXRpb24gb2YgdGhlIENWVCBwcm9ncmFtICAgICAgICAgICAgICAgICAqLwogICAgICAgICBpZiAoIGdyYXlzY2FsZSAhPSBleGVjLT5ncmF5c2NhbGUgKQogICAgICAgICB7Ci0gICAgICAgICAgRlRfVFJBQ0U0KCggInR0X2xvYWRlcl9pbml0OiBncmF5c2NhbGUgY2hhbmdlLCIKKyAgICAgICAgICBGVF9UUkFDRTQoKCAidHRfbG9hZGVyX2luaXQ6IGdyYXlzY2FsZSBoaW50aW5nIGNoYW5nZSwiCiAgICAgICAgICAgICAgICAgICAgICAgIiByZS1leGVjdXRpbmcgYHByZXAnIHRhYmxlXG4iICkpOwogCiAgICAgICAgICAgZXhlYy0+Z3JheXNjYWxlID0gZ3JheXNjYWxlOwpAQCAtMjI1Nyw3ICsyMzI4LDcgQEAKICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICB9CiAKLSAgICAgIC8qIHNlZSB3aGV0aGVyIHRoZSBjdnQgcHJvZ3JhbSBoYXMgZGlzYWJsZWQgaGludGluZyAqLworICAgICAgLyogY2hlY2sgd2hldGhlciB0aGUgY3Z0IHByb2dyYW0gaGFzIGRpc2FibGVkIGhpbnRpbmcgKi8KICAgICAgIGlmICggZXhlYy0+R1MuaW5zdHJ1Y3RfY29udHJvbCAmIDEgKQogICAgICAgICBsb2FkX2ZsYWdzIHw9IEZUX0xPQURfTk9fSElOVElORzsKIApAQCAtMjI2NSw2ICsyMzM2LDEzIEBACiAgICAgICBpZiAoIGV4ZWMtPkdTLmluc3RydWN0X2NvbnRyb2wgJiAyICkKICAgICAgICAgZXhlYy0+R1MgPSB0dF9kZWZhdWx0X2dyYXBoaWNzX3N0YXRlOwogCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisgICAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGhhdmUgYSBmb250IGhpbnRlZCBmb3IgQ2xlYXJUeXBlIC0tICAgICAgICAgICAqLworICAgICAgLyogbm90ZSB0aGF0IHRoaXMgZmxhZyBjYW4gYWxzbyBiZSBtb2RpZmllZCBpbiBhIGdseXBoJ3MgYnl0ZWNvZGUgKi8KKyAgICAgIGlmICggZXhlYy0+R1MuaW5zdHJ1Y3RfY29udHJvbCAmIDQgKQorICAgICAgICBleGVjLT5pZ25vcmVfeF9tb2RlID0gMDsKKyNlbmRpZgorCiAgICAgICBleGVjLT5wZWRhbnRpY19oaW50aW5nID0gRlRfQk9PTCggbG9hZF9mbGFncyAmIEZUX0xPQURfUEVEQU5USUMgKTsKICAgICAgIGxvYWRlci0+ZXhlYyA9IGV4ZWM7CiAgICAgICBsb2FkZXItPmluc3RydWN0aW9ucyA9IGV4ZWMtPmdseXBoSW5zOwpAQCAtMjMwOCwxMCArMjM4NiwxMCBAQAogICAgICAgbG9hZGVyLT5nbG9hZGVyID0gZ2xvYWRlcjsKICAgICB9CiAKLSAgICBsb2FkZXItPmxvYWRfZmxhZ3MgPSBsb2FkX2ZsYWdzOworICAgIGxvYWRlci0+bG9hZF9mbGFncyA9IChGVF9VTG9uZylsb2FkX2ZsYWdzOwogCi0gICAgbG9hZGVyLT5mYWNlICAgPSAoRlRfRmFjZSlmYWNlOwotICAgIGxvYWRlci0+c2l6ZSAgID0gKEZUX1NpemUpc2l6ZTsKKyAgICBsb2FkZXItPmZhY2UgICA9IGZhY2U7CisgICAgbG9hZGVyLT5zaXplICAgPSBzaXplOwogICAgIGxvYWRlci0+Z2x5cGggID0gKEZUX0dseXBoU2xvdClnbHlwaDsKICAgICBsb2FkZXItPnN0cmVhbSA9IHN0cmVhbTsKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0Z2xvYWQuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dGdsb2FkLmgKaW5kZXggM2YxNjk5ZS4uOGUzMjU1ZSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0Z2xvYWQuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIEdseXBoIExvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDYsIDIwMDgsIDIwMTEgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRneHZhci5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0Z3h2YXIuYwppbmRleCAxYjM1NTM5Li5kZDllMjUwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRneHZhci5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dGd4dmFyLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgR1ggRm9udCBWYXJpYXRpb24gbG9hZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBXZXJuZXIgTGVtYmVyZywgYW5kIEdlb3JnZSBXaWxsaWFtcy4gICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIwLDcgKzIwLDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIEFwcGxlIGRvY3VtZW50cyB0aGUgYGZ2YXInLCBgZ3ZhcicsIGBjdmFyJywgYW5kIGBhdmFyJyB0YWJsZXMgYXQgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UVFJlZk1hbi9STTA2L0NoYXA2W2ZnY2FddmFyLmh0bWwgICovCisgIC8qICAgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ZvbnRzL1RydWVUeXBlLVJlZmVyZW5jZS1NYW51YWwvUk0wNi9DaGFwNltmZ2NhXXZhci5odG1sICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgYGZ2YXInIGlzIGluY29uc2lzdGVudC4gIEF0IG9uZSBwb2ludCBpdCBzYXlzICAgKi8KICAgLyogdGhhdCBgY291bnRTaXplUGFpcnMnIHNob3VsZCBiZSAzLCBhdCBhbm90aGVyIHBvaW50IDIuICBJdCBzaG91bGQgICAgICovCkBAIC02MCw5ICs2MCw5IEBACiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogCiAKLSNkZWZpbmUgRlRfU3RyZWFtX0ZUZWxsKCBzdHJlYW0gKSAgXAorI2RlZmluZSBGVF9TdHJlYW1fRlRlbGwoIHN0cmVhbSApICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoRlRfVUxvbmcpKCAoc3RyZWFtKS0+Y3Vyc29yIC0gKHN0cmVhbSktPmJhc2UgKQotI2RlZmluZSBGVF9TdHJlYW1fU2Vla1NldCggc3RyZWFtLCBvZmYgKSBcCisjZGVmaW5lIEZUX1N0cmVhbV9TZWVrU2V0KCBzdHJlYW0sIG9mZiApICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggKHN0cmVhbSktPmN1cnNvciA9IChzdHJlYW0pLT5iYXNlICsgKG9mZikgKQogCiAKQEAgLTk2LDggKzk2LDggQEAKICNkZWZpbmUgQUxMX1BPSU5UUyAgKEZUX1VTaG9ydCopfihGVF9QdHJEaXN0KTAKIAogCi0jZGVmaW5lIEdYX1BUX1BPSU5UU19BUkVfV09SRFMgICAgICAweDgwCi0jZGVmaW5lIEdYX1BUX1BPSU5UX1JVTl9DT1VOVF9NQVNLICAweDdGCisjZGVmaW5lIEdYX1BUX1BPSU5UU19BUkVfV09SRFMgICAgICAweDgwVQorI2RlZmluZSBHWF9QVF9QT0lOVF9SVU5fQ09VTlRfTUFTSyAgMHg3RlUKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTI2LDUyICsxMjYsNjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAqcG9pbnRfY250ICkKICAgewogICAgIEZUX1VTaG9ydCAqcG9pbnRzID0gTlVMTDsKLSAgICBGVF9JbnQgICAgIG47Ci0gICAgRlRfSW50ICAgICBydW5jbnQ7Ci0gICAgRlRfSW50ICAgICBpOwotICAgIEZUX0ludCAgICAgajsKLSAgICBGVF9JbnQgICAgIGZpcnN0OworICAgIEZUX1VJbnQgICAgbjsKKyAgICBGVF9VSW50ICAgIHJ1bmNudDsKKyAgICBGVF9VSW50ICAgIGksIGo7CisgICAgRlRfVVNob3J0ICBmaXJzdDsKICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OwogICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOwogCiAgICAgRlRfVU5VU0VEKCBlcnJvciApOwogCiAKLSAgICAqcG9pbnRfY250ID0gbiA9IEZUX0dFVF9CWVRFKCk7CisgICAgKnBvaW50X2NudCA9IDA7CisKKyAgICBuID0gRlRfR0VUX0JZVEUoKTsKICAgICBpZiAoIG4gPT0gMCApCiAgICAgICByZXR1cm4gQUxMX1BPSU5UUzsKIAogICAgIGlmICggbiAmIEdYX1BUX1BPSU5UU19BUkVfV09SRFMgKQotICAgICAgbiA9IEZUX0dFVF9CWVRFKCkgfCAoICggbiAmIEdYX1BUX1BPSU5UX1JVTl9DT1VOVF9NQVNLICkgPDwgOCApOworICAgIHsKKyAgICAgIG4gICY9IEdYX1BUX1BPSU5UX1JVTl9DT1VOVF9NQVNLOworICAgICAgbiA8PD0gODsKKyAgICAgIG4gIHw9IEZUX0dFVF9CWVRFKCk7CisgICAgfQogCiAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHBvaW50cywgbiApICkKICAgICAgIHJldHVybiBOVUxMOwogCisgICAgKnBvaW50X2NudCA9IG47CisKICAgICBpID0gMDsKICAgICB3aGlsZSAoIGkgPCBuICkKICAgICB7CiAgICAgICBydW5jbnQgPSBGVF9HRVRfQllURSgpOwogICAgICAgaWYgKCBydW5jbnQgJiBHWF9QVF9QT0lOVFNfQVJFX1dPUkRTICkKICAgICAgIHsKLSAgICAgICAgcnVuY250ID0gcnVuY250ICYgR1hfUFRfUE9JTlRfUlVOX0NPVU5UX01BU0s7Ci0gICAgICAgIGZpcnN0ICA9IHBvaW50c1tpKytdID0gRlRfR0VUX1VTSE9SVCgpOworICAgICAgICBydW5jbnQgICAgICY9IEdYX1BUX1BPSU5UX1JVTl9DT1VOVF9NQVNLOworICAgICAgICBmaXJzdCAgICAgICA9IEZUX0dFVF9VU0hPUlQoKTsKKyAgICAgICAgcG9pbnRzW2krK10gPSBmaXJzdDsKIAotICAgICAgICBpZiAoIHJ1bmNudCA8IDEgfHwgaSArIHJ1bmNudCA+PSBuICkKKyAgICAgICAgaWYgKCBydW5jbnQgPCAxIHx8IGkgKyBydW5jbnQgPiBuICkKICAgICAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAgICAgLyogZmlyc3QgcG9pbnQgbm90IGluY2x1ZGVkIGluIHJ1bmNvdW50ICovCi0gICAgICAgIGZvciAoIGogPSAwOyBqIDwgcnVuY250OyArK2ogKQotICAgICAgICAgIHBvaW50c1tpKytdID0gKEZUX1VTaG9ydCkoIGZpcnN0ICs9IEZUX0dFVF9VU0hPUlQoKSApOworICAgICAgICAvKiBmaXJzdCBwb2ludCBub3QgaW5jbHVkZWQgaW4gcnVuIGNvdW50ICovCisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgcnVuY250OyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgZmlyc3QgICAgICArPSBGVF9HRVRfVVNIT1JUKCk7CisgICAgICAgICAgcG9pbnRzW2krK10gPSBmaXJzdDsKKyAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBmaXJzdCA9IHBvaW50c1tpKytdID0gRlRfR0VUX0JZVEUoKTsKKyAgICAgICAgZmlyc3QgICAgICAgPSBGVF9HRVRfQllURSgpOworICAgICAgICBwb2ludHNbaSsrXSA9IGZpcnN0OwogCi0gICAgICAgIGlmICggcnVuY250IDwgMSB8fCBpICsgcnVuY250ID49IG4gKQorICAgICAgICBpZiAoIHJ1bmNudCA8IDEgfHwgaSArIHJ1bmNudCA+IG4gKQogICAgICAgICAgIGdvdG8gRXhpdDsKIAotICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHJ1bmNudDsgKytqICkKLSAgICAgICAgICBwb2ludHNbaSsrXSA9IChGVF9VU2hvcnQpKCBmaXJzdCArPSBGVF9HRVRfQllURSgpICk7CisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgcnVuY250OyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgZmlyc3QgICAgICArPSBGVF9HRVRfQllURSgpOworICAgICAgICAgIHBvaW50c1tpKytdID0gZmlyc3Q7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAKQEAgLTE4MCwxMiArMTk1LDkgQEAKICAgfQogCiAKLSAgZW51bQotICB7Ci0gICAgR1hfRFRfREVMVEFTX0FSRV9aRVJPICAgICAgPSAweDgwLAotICAgIEdYX0RUX0RFTFRBU19BUkVfV09SRFMgICAgID0gMHg0MCwKLSAgICBHWF9EVF9ERUxUQV9SVU5fQ09VTlRfTUFTSyA9IDB4M0YKLSAgfTsKKyNkZWZpbmUgR1hfRFRfREVMVEFTX0FSRV9aRVJPICAgICAgIDB4ODBVCisjZGVmaW5lIEdYX0RUX0RFTFRBU19BUkVfV09SRFMgICAgICAweDQwVQorI2RlZmluZSBHWF9EVF9ERUxUQV9SVU5fQ09VTlRfTUFTSyAgMHgzRlUKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjAwLDcgKzIxMiw3IEBACiAgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBzdHJlYW0gICAgOjogVGhlIGRhdGEgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRlbHRhX2NudCA6OiBUaGUgbnVtYmVyIG9mIHRvIGJlIHJlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkZWx0YV9jbnQgOjogVGhlIG51bWJlciBvZiBkZWx0YXMgdG8gYmUgcmVhZC4gICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBBbiBhcnJheSBvZiBGVF9TaG9ydCBjb250YWluaW5nIHRoZSBkZWx0YXMgZm9yIHRoZSBhZmZlY3RlZCAgICAgICAgKi8KQEAgLTIxMCwxMiArMjIyLDExIEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgRlRfU2hvcnQqCiAgIGZ0X3Zhcl9yZWFkcGFja2VkZGVsdGFzKCBGVF9TdHJlYW0gIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX09mZnNldCAgZGVsdGFfY250ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZGVsdGFfY250ICkKICAgewogICAgIEZUX1Nob3J0ICAqZGVsdGFzID0gTlVMTDsKLSAgICBGVF9VSW50ICAgIHJ1bmNudDsKLSAgICBGVF9PZmZzZXQgIGk7Ci0gICAgRlRfVUludCAgICBqOworICAgIEZUX1VJbnQgICAgcnVuY250LCBjbnQ7CisgICAgRlRfVUludCAgICBpLCBqOwogICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gc3RyZWFtLT5tZW1vcnk7CiAgICAgRlRfRXJyb3IgICBlcnJvciAgPSBGVF9FcnJfT2s7CiAKQEAgLTIyOSwzNCArMjQwLDMwIEBACiAgICAgd2hpbGUgKCBpIDwgZGVsdGFfY250ICkKICAgICB7CiAgICAgICBydW5jbnQgPSBGVF9HRVRfQllURSgpOworICAgICAgY250ICAgID0gcnVuY250ICYgR1hfRFRfREVMVEFfUlVOX0NPVU5UX01BU0s7CisKICAgICAgIGlmICggcnVuY250ICYgR1hfRFRfREVMVEFTX0FSRV9aRVJPICkKICAgICAgIHsKLSAgICAgICAgLyogcnVuY250IHplcm9lcyBnZXQgYWRkZWQgKi8KLSAgICAgICAgZm9yICggaiA9IDA7Ci0gICAgICAgICAgICAgIGogPD0gKCBydW5jbnQgJiBHWF9EVF9ERUxUQV9SVU5fQ09VTlRfTUFTSyApICYmIGkgPCBkZWx0YV9jbnQ7Ci0gICAgICAgICAgICAgICsraiApCisgICAgICAgIC8qIGBydW5jbnQnIHplcm9lcyBnZXQgYWRkZWQgKi8KKyAgICAgICAgZm9yICggaiA9IDA7IGogPD0gY250ICYmIGkgPCBkZWx0YV9jbnQ7IGorKyApCiAgICAgICAgICAgZGVsdGFzW2krK10gPSAwOwogICAgICAgfQogICAgICAgZWxzZSBpZiAoIHJ1bmNudCAmIEdYX0RUX0RFTFRBU19BUkVfV09SRFMgKQogICAgICAgewotICAgICAgICAvKiBydW5jbnQgc2hvcnRzIGZyb20gdGhlIHN0YWNrICovCi0gICAgICAgIGZvciAoIGogPSAwOwotICAgICAgICAgICAgICBqIDw9ICggcnVuY250ICYgR1hfRFRfREVMVEFfUlVOX0NPVU5UX01BU0sgKSAmJiBpIDwgZGVsdGFfY250OwotICAgICAgICAgICAgICArK2ogKQorICAgICAgICAvKiBgcnVuY250JyBzaG9ydHMgZnJvbSB0aGUgc3RhY2sgKi8KKyAgICAgICAgZm9yICggaiA9IDA7IGogPD0gY250ICYmIGkgPCBkZWx0YV9jbnQ7IGorKyApCiAgICAgICAgICAgZGVsdGFzW2krK10gPSBGVF9HRVRfU0hPUlQoKTsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgLyogcnVuY250IHNpZ25lZCBieXRlcyBmcm9tIHRoZSBzdGFjayAqLwotICAgICAgICBmb3IgKCBqID0gMDsKLSAgICAgICAgICAgICAgaiA8PSAoIHJ1bmNudCAmIEdYX0RUX0RFTFRBX1JVTl9DT1VOVF9NQVNLICkgJiYgaSA8IGRlbHRhX2NudDsKLSAgICAgICAgICAgICAgKytqICkKKyAgICAgICAgLyogYHJ1bmNudCcgc2lnbmVkIGJ5dGVzIGZyb20gdGhlIHN0YWNrICovCisgICAgICAgIGZvciAoIGogPSAwOyBqIDw9IGNudCAmJiBpIDwgZGVsdGFfY250OyBqKysgKQogICAgICAgICAgIGRlbHRhc1tpKytdID0gRlRfR0VUX0NIQVIoKTsKICAgICAgIH0KIAotICAgICAgaWYgKCBqIDw9ICggcnVuY250ICYgR1hfRFRfREVMVEFfUlVOX0NPVU5UX01BU0sgKSApCisgICAgICBpZiAoIGogPD0gY250ICkKICAgICAgIHsKLSAgICAgICAgLyogQmFkIGZvcm1hdCAqLworICAgICAgICAvKiBiYWQgZm9ybWF0ICovCiAgICAgICAgIEZUX0ZSRUUoIGRlbHRhcyApOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgIH0KQEAgLTI4MSwxMiArMjg4LDEyIEBACiAgIHN0YXRpYyB2b2lkCiAgIGZ0X3Zhcl9sb2FkX2F2YXIoIFRUX0ZhY2UgIGZhY2UgKQogICB7Ci0gICAgRlRfU3RyZWFtICAgICAgIHN0cmVhbSA9IEZUX0ZBQ0VfU1RSRUFNKGZhY2UpOworICAgIEZUX1N0cmVhbSAgICAgICBzdHJlYW0gPSBGVF9GQUNFX1NUUkVBTSggZmFjZSApOwogICAgIEZUX01lbW9yeSAgICAgICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKICAgICBHWF9CbGVuZCAgICAgICAgYmxlbmQgID0gZmFjZS0+YmxlbmQ7CiAgICAgR1hfQVZhclNlZ21lbnQgIHNlZ21lbnQ7CiAgICAgRlRfRXJyb3IgICAgICAgIGVycm9yID0gRlRfRXJyX09rOwotICAgIEZUX1VMb25nICAgICAgICB2ZXJzaW9uOworICAgIEZUX0xvbmcgICAgICAgICB2ZXJzaW9uOwogICAgIEZUX0xvbmcgICAgICAgICBheGlzQ291bnQ7CiAgICAgRlRfSW50ICAgICAgICAgIGksIGo7CiAgICAgRlRfVUxvbmcgICAgICAgIHRhYmxlX2xlbjsKQEAgLTI5NCw5ICszMDEsMTUgQEAKICAgICBGVF9VTlVTRUQoIGVycm9yICk7CiAKIAorICAgIEZUX1RSQUNFMigoICJBVkFSICIgKSk7CisKICAgICBibGVuZC0+YXZhcl9jaGVja2VkID0gVFJVRTsKLSAgICBpZiAoIChlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfYXZhciwgc3RyZWFtLCAmdGFibGVfbGVuICkpICE9IDAgKQorICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19hdmFyLCBzdHJlYW0sICZ0YWJsZV9sZW4gKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiaXMgbWlzc2luZ1xuIiApKTsKICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoIEZUX0ZSQU1FX0VOVEVSKCB0YWJsZV9sZW4gKSApCiAgICAgICByZXR1cm47CkBAIC0zMDQsMjMgKzMxNywzNiBAQAogICAgIHZlcnNpb24gICA9IEZUX0dFVF9MT05HKCk7CiAgICAgYXhpc0NvdW50ID0gRlRfR0VUX0xPTkcoKTsKIAotICAgIGlmICggdmVyc2lvbiAhPSAweDAwMDEwMDAwTCAgICAgICAgICAgICAgICAgICAgICAgfHwKLSAgICAgICAgIGF4aXNDb3VudCAhPSAoRlRfTG9uZylibGVuZC0+bW12YXItPm51bV9heGlzICkKKyAgICBpZiAoIHZlcnNpb24gIT0gMHgwMDAxMDAwMEwgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMigoICJiYWQgdGFibGUgdmVyc2lvblxuIiApKTsKICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBGVF9UUkFDRTIoKCAibG9hZGVkXG4iICkpOworCisgICAgaWYgKCBheGlzQ291bnQgIT0gKEZUX0xvbmcpYmxlbmQtPm1tdmFyLT5udW1fYXhpcyApCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggImZ0X3Zhcl9sb2FkX2F2YXI6IG51bWJlciBvZiBheGVzIGluIGBhdmFyJyBhbmQgYGN2YXInXG4iCisgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgdGFibGUgYXJlIGRpZmZlcmVudFxuIiApKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CiAKICAgICBpZiAoIEZUX05FV19BUlJBWSggYmxlbmQtPmF2YXJfc2VnbWVudCwgYXhpc0NvdW50ICkgKQogICAgICAgZ290byBFeGl0OwogCiAgICAgc2VnbWVudCA9ICZibGVuZC0+YXZhcl9zZWdtZW50WzBdOwotICAgIGZvciAoIGkgPSAwOyBpIDwgYXhpc0NvdW50OyArK2ksICsrc2VnbWVudCApCisgICAgZm9yICggaSA9IDA7IGkgPCBheGlzQ291bnQ7IGkrKywgc2VnbWVudCsrICkKICAgICB7CisgICAgICBGVF9UUkFDRTUoKCAiICBheGlzICVkOlxuIiwgaSApKTsKKwogICAgICAgc2VnbWVudC0+cGFpckNvdW50ID0gRlRfR0VUX1VTSE9SVCgpOwogICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHNlZ21lbnQtPmNvcnJlc3BvbmRlbmNlLCBzZWdtZW50LT5wYWlyQ291bnQgKSApCiAgICAgICB7CiAgICAgICAgIC8qIEZhaWx1cmUuICBGcmVlIGV2ZXJ5dGhpbmcgd2UgaGF2ZSBkb25lIHNvIGZhci4gIFdlIG11c3QgZG8gKi8KICAgICAgICAgLyogaXQgcmlnaHQgbm93IHNpbmNlIGxvYWRpbmcgdGhlIGBhdmFyJyB0YWJsZSBpcyBvcHRpb25hbC4gICAqLwogCi0gICAgICAgIGZvciAoIGogPSBpIC0gMTsgaiA+PSAwOyAtLWogKQorICAgICAgICBmb3IgKCBqID0gaSAtIDE7IGogPj0gMDsgai0tICkKICAgICAgICAgICBGVF9GUkVFKCBibGVuZC0+YXZhcl9zZWdtZW50W2pdLmNvcnJlc3BvbmRlbmNlICk7CiAKICAgICAgICAgRlRfRlJFRSggYmxlbmQtPmF2YXJfc2VnbWVudCApOwpAQCAtMzI4LDEzICszNTQsMTggQEAKICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQogCi0gICAgICBmb3IgKCBqID0gMDsgaiA8IHNlZ21lbnQtPnBhaXJDb3VudDsgKytqICkKKyAgICAgIGZvciAoIGogPSAwOyBqIDwgc2VnbWVudC0+cGFpckNvdW50OyBqKysgKQogICAgICAgewotICAgICAgICBzZWdtZW50LT5jb3JyZXNwb25kZW5jZVtqXS5mcm9tQ29vcmQgPQotICAgICAgICAgIEZUX0dFVF9TSE9SVCgpIDw8IDI7ICAgIC8qIGNvbnZlcnQgdG8gRml4ZWQgKi8KLSAgICAgICAgc2VnbWVudC0+Y29ycmVzcG9uZGVuY2Vbal0udG9Db29yZCA9Ci0gICAgICAgICAgRlRfR0VUX1NIT1JUKCk8PDI7ICAgIC8qIGNvbnZlcnQgdG8gRml4ZWQgKi8KKyAgICAgICAgLyogY29udmVydCB0byBGaXhlZCAqLworICAgICAgICBzZWdtZW50LT5jb3JyZXNwb25kZW5jZVtqXS5mcm9tQ29vcmQgPSBGVF9HRVRfU0hPUlQoKSAqIDQ7CisgICAgICAgIHNlZ21lbnQtPmNvcnJlc3BvbmRlbmNlW2pdLnRvQ29vcmQgICA9IEZUX0dFVF9TSE9SVCgpICogNDsKKworICAgICAgICBGVF9UUkFDRTUoKCAiICAgIG1hcHBpbmcgJS40ZiB0byAlLjRmXG4iLAorICAgICAgICAgICAgICAgICAgICBzZWdtZW50LT5jb3JyZXNwb25kZW5jZVtqXS5mcm9tQ29vcmQgLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICBzZWdtZW50LT5jb3JyZXNwb25kZW5jZVtqXS50b0Nvb3JkIC8gNjU1MzYuMCApKTsKICAgICAgIH0KKworICAgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKICAgICB9CiAKICAgRXhpdDoKQEAgLTM2MSw4ICszOTIsOCBAQAogICAvKiAgICBmdF92YXJfbG9hZF9ndmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQYXJzZXMgdGhlIGBndmFyJyB0YWJsZSBpZiBwcmVzZW50LiAgSWYgYGZ2YXInIGlzIHRoZXJlLCBgZ3ZhcicgICAgKi8KLSAgLyogICAgaGFkIGJldHRlciBiZSB0aGVyZSB0b28uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBhcnNlIHRoZSBgZ3ZhcicgdGFibGUgaWYgcHJlc2VudC4gIElmIGBmdmFyJyBpcyB0aGVyZSwgYGd2YXInIGhhZCAqLworICAvKiAgICBiZXR0ZXIgYmUgdGhlcmUgdG9vLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBmYWNlIDo6IFRoZSBmb250IGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM3Myw3ICs0MDQsNyBAQAogICBzdGF0aWMgRlRfRXJyb3IKICAgZnRfdmFyX2xvYWRfZ3ZhciggVFRfRmFjZSAgZmFjZSApCiAgIHsKLSAgICBGVF9TdHJlYW0gICAgIHN0cmVhbSA9IEZUX0ZBQ0VfU1RSRUFNKGZhY2UpOworICAgIEZUX1N0cmVhbSAgICAgc3RyZWFtID0gRlRfRkFDRV9TVFJFQU0oIGZhY2UgKTsKICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OwogICAgIEdYX0JsZW5kICAgICAgYmxlbmQgID0gZmFjZS0+YmxlbmQ7CiAgICAgRlRfRXJyb3IgICAgICBlcnJvcjsKQEAgLTQwMCw4ICs0MzEsMTcgQEAKICAgICAgIEZUX0ZSQU1FX0VORAogICAgIH07CiAKLSAgICBpZiAoIChlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfZ3Zhciwgc3RyZWFtLCAmdGFibGVfbGVuICkpICE9IDAgKQorCisgICAgRlRfVFJBQ0UyKCggIkdWQVIgIiApKTsKKworICAgIGlmICggKCBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRBR19ndmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFibGVfbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiaXMgbWlzc2luZ1xuIiApKTsKICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CiAKICAgICBndmFyX3N0YXJ0ID0gRlRfU1RSRUFNX1BPUyggKTsKICAgICBpZiAoIEZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggZ3Zhcl9maWVsZHMsICZndmFyX2hlYWQgKSApCkBAIC00MTEsMTMgKzQ1MSwyNiBAQAogICAgIGJsZW5kLT5ndl9nbHlwaGNudCA9IGd2YXJfaGVhZC5nbHlwaENvdW50OwogICAgIG9mZnNldFRvRGF0YSAgICAgICA9IGd2YXJfc3RhcnQgKyBndmFyX2hlYWQub2Zmc2V0VG9EYXRhOwogCi0gICAgaWYgKCBndmFyX2hlYWQudmVyc2lvbiAgICE9IChGVF9Mb25nKTB4MDAwMTAwMDBMICAgICAgICAgICAgICB8fAotICAgICAgICAgZ3Zhcl9oZWFkLmF4aXNDb3VudCAhPSAoRlRfVVNob3J0KWJsZW5kLT5tbXZhci0+bnVtX2F4aXMgKQorICAgIGlmICggZ3Zhcl9oZWFkLnZlcnNpb24gIT0gMHgwMDAxMDAwMEwgKQogICAgIHsKKyAgICAgIEZUX1RSQUNFMSgoICJiYWQgdGFibGUgdmVyc2lvblxuIiApKTsKICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKICAgICAgIGdvdG8gRXhpdDsKICAgICB9CiAKKyAgICBGVF9UUkFDRTIoKCAibG9hZGVkXG4iICkpOworCisgICAgaWYgKCBndmFyX2hlYWQuYXhpc0NvdW50ICE9IChGVF9VU2hvcnQpYmxlbmQtPm1tdmFyLT5udW1fYXhpcyApCisgICAgeworICAgICAgRlRfVFJBQ0UxKCggImZ0X3Zhcl9sb2FkX2d2YXI6IG51bWJlciBvZiBheGVzIGluIGBndmFyJyBhbmQgYGN2YXInXG4iCisgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgdGFibGUgYXJlIGRpZmZlcmVudFxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBGVF9UUkFDRTUoKCAiZ3ZhcjogdGhlcmUgYXJlICVkIHNoYXJlZCBjb29yZGluYXRlczpcbiIsCisgICAgICAgICAgICAgICAgYmxlbmQtPnR1cGxlY291bnQgKSk7CisKICAgICBpZiAoIEZUX05FV19BUlJBWSggYmxlbmQtPmdseXBob2Zmc2V0cywgYmxlbmQtPmd2X2dseXBoY250ICsgMSApICkKICAgICAgIGdvdG8gRXhpdDsKIApAQCAtNDI3LDggKzQ4MCw4IEBACiAgICAgICBpZiAoIEZUX0ZSQU1FX0VOVEVSKCAoIGJsZW5kLT5ndl9nbHlwaGNudCArIDEgKSAqIDRMICkgKQogICAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAgIGZvciAoIGkgPSAwOyBpIDw9IGJsZW5kLT5ndl9nbHlwaGNudDsgKytpICkKLSAgICAgICAgYmxlbmQtPmdseXBob2Zmc2V0c1tpXSA9IG9mZnNldFRvRGF0YSArIEZUX0dFVF9MT05HKCk7CisgICAgICBmb3IgKCBpID0gMDsgaSA8PSBibGVuZC0+Z3ZfZ2x5cGhjbnQ7IGkrKyApCisgICAgICAgIGJsZW5kLT5nbHlwaG9mZnNldHNbaV0gPSBvZmZzZXRUb0RhdGEgKyBGVF9HRVRfVUxPTkcoKTsKIAogICAgICAgRlRfRlJBTUVfRVhJVCgpOwogICAgIH0KQEAgLTQzOCw5ICs0OTEsOSBAQAogICAgICAgaWYgKCBGVF9GUkFNRV9FTlRFUiggKCBibGVuZC0+Z3ZfZ2x5cGhjbnQgKyAxICkgKiAyTCApICkKICAgICAgICAgZ290byBFeGl0OwogCi0gICAgICBmb3IgKCBpID0gMDsgaSA8PSBibGVuZC0+Z3ZfZ2x5cGhjbnQ7ICsraSApCisgICAgICBmb3IgKCBpID0gMDsgaSA8PSBibGVuZC0+Z3ZfZ2x5cGhjbnQ7IGkrKyApCiAgICAgICAgIGJsZW5kLT5nbHlwaG9mZnNldHNbaV0gPSBvZmZzZXRUb0RhdGEgKyBGVF9HRVRfVVNIT1JUKCkgKiAyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWDogVW5kb2N1bWVudGVkOiBgKjInISAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IFVuZG9jdW1lbnRlZDogYCoyJyEgKi8KIAogICAgICAgRlRfRlJBTUVfRVhJVCgpOwogICAgIH0KQEAgLTQ1MSwxNCArNTA0LDI0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Zhcl9oZWFkLmF4aXNDb3VudCAqIGJsZW5kLT50dXBsZWNvdW50ICkgKQogICAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGd2YXJfc3RhcnQgKyBndmFyX2hlYWQub2Zmc2V0VG9Db29yZCApICAgICAgIHx8Ci0gICAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCBibGVuZC0+dHVwbGVjb3VudCAqIGd2YXJfaGVhZC5heGlzQ291bnQgKiAyTCApICAgICAgICAgICAgICAgICAgICkKKyAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGd2YXJfc3RhcnQgKyBndmFyX2hlYWQub2Zmc2V0VG9Db29yZCApICAgICAgICAgfHwKKyAgICAgICAgICAgRlRfRlJBTUVfRU5URVIoIGJsZW5kLT50dXBsZWNvdW50ICogZ3Zhcl9oZWFkLmF4aXNDb3VudCAqIDJMICkgKQogICAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAgIGZvciAoIGkgPSAwOyBpIDwgYmxlbmQtPnR1cGxlY291bnQ7ICsraSApCi0gICAgICAgIGZvciAoIGogPSAwIDsgaiA8IChGVF9VSW50KWd2YXJfaGVhZC5heGlzQ291bnQ7ICsraiApCisgICAgICBmb3IgKCBpID0gMDsgaSA8IGJsZW5kLT50dXBsZWNvdW50OyBpKysgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTUoKCAiICBbICIgKSk7CisgICAgICAgIGZvciAoIGogPSAwIDsgaiA8IChGVF9VSW50KWd2YXJfaGVhZC5heGlzQ291bnQ7IGorKyApCisgICAgICAgIHsKICAgICAgICAgICBibGVuZC0+dHVwbGVjb29yZHNbaSAqIGd2YXJfaGVhZC5heGlzQ291bnQgKyBqXSA9Ci0gICAgICAgICAgICBGVF9HRVRfU0hPUlQoKSA8PCAyOyAgICAgICAgICAgICAgICAvKiBjb252ZXJ0IHRvIEZUX0ZpeGVkICovCisgICAgICAgICAgICBGVF9HRVRfU0hPUlQoKSAqIDQ7ICAgICAgICAgICAgICAgICAvKiBjb252ZXJ0IHRvIEZUX0ZpeGVkICovCisgICAgICAgICAgRlRfVFJBQ0U1KCggIiUuNGYgIiwKKyAgICAgICAgICAgIGJsZW5kLT50dXBsZWNvb3Jkc1tpICogZ3Zhcl9oZWFkLmF4aXNDb3VudCArIGpdIC8gNjU1MzYuMCApKTsKKyAgICAgICAgfQorICAgICAgICBGVF9UUkFDRTUoKCAiXVxuIiApKTsKKyAgICAgIH0KKworICAgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKIAogICAgICAgRlRfRlJBTUVfRVhJVCgpOwogICAgIH0KQEAgLTUwNiw0OCArNTY5LDgzIEBACiAgICAgRlRfRml4ZWQgIGFwcGx5ID0gMHgxMDAwMEw7CiAKIAotICAgIGZvciAoIGkgPSAwOyBpIDwgYmxlbmQtPm51bV9heGlzOyArK2kgKQorICAgIGZvciAoIGkgPSAwOyBpIDwgYmxlbmQtPm51bV9heGlzOyBpKysgKQogICAgIHsKLSAgICAgIGlmICggdHVwbGVfY29vcmRzW2ldID09IDAgKQotICAgICAgICAvKiBJdCdzIG5vdCBjbGVhciB3aHkgKGZvciBpbnRlcm1lZGlhdGUgdHVwbGVzKSB3ZSBkb24ndCBuZWVkICAgICAqLwotICAgICAgICAvKiB0byBjaGVjayBhZ2FpbnN0IHN0YXJ0L2VuZCAtLSB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIHdlIGRvbid0LiAqLwotICAgICAgICAvKiBTaW1pbGFybHksIGl0J3MgdW5jbGVhciB3aHkgd2UgZG9uJ3QgbmVlZCB0byBzY2FsZSBhbG9uZyB0aGUgICAqLwotICAgICAgICAvKiBheGlzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBjb250aW51ZTsKKyAgICAgIEZUX1RSQUNFNigoICIgICAgYXhpcyBjb29yZGluYXRlICVkICglLjRmKTpcbiIsCisgICAgICAgICAgICAgICAgICBpLCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7CiAKLSAgICAgIGVsc2UgaWYgKCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKLSAgICAgICAgICAgICAgICAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIDwgMCAmJiB0dXBsZV9jb29yZHNbaV0gPiAwICkgfHwKKyAgICAgIC8qIEl0J3Mgbm90IGNsZWFyIHdoeSAoZm9yIGludGVybWVkaWF0ZSB0dXBsZXMpIHdlIGRvbid0IG5lZWQgICAgICovCisgICAgICAvKiB0byBjaGVjayBhZ2FpbnN0IHN0YXJ0L2VuZCAtLSB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIHdlIGRvbid0LiAqLworICAgICAgLyogU2ltaWxhcmx5LCBpdCdzIHVuY2xlYXIgd2h5IHdlIGRvbid0IG5lZWQgdG8gc2NhbGUgYWxvbmcgdGhlICAgKi8KKyAgICAgIC8qIGF4aXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIGlmICggdHVwbGVfY29vcmRzW2ldID09IDAgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgdHVwbGUgY29vcmRpbmF0ZSBpcyB6ZXJvLCBpZ25vcmVkXG4iLCBpICkpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgZWxzZSBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID09IDAgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgYXhpcyBjb29yZGluYXRlIGlzIHplcm8sIHN0b3BcbiIgKSk7CisgICAgICAgIGFwcGx5ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKCAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIDwgMCAmJiB0dXBsZV9jb29yZHNbaV0gPiAwICkgfHwKICAgICAgICAgICAgICAgICAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID4gMCAmJiB0dXBsZV9jb29yZHNbaV0gPCAwICkgKQogICAgICAgeworICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgdHVwbGUgY29vcmRpbmF0ZSB2YWx1ZSAlLjRmIGlzIGV4Y2VlZGVkLCBzdG9wXG4iLAorICAgICAgICAgICAgICAgICAgICB0dXBsZV9jb29yZHNbaV0gLyA2NTUzNi4wICkpOwogICAgICAgICBhcHBseSA9IDA7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogCiAgICAgICBlbHNlIGlmICggISggdHVwbGVJbmRleCAmIEdYX1RJX0lOVEVSTUVESUFURV9UVVBMRSApICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0U2KCggIiAgICAgIHR1cGxlIGNvb3JkaW5hdGUgdmFsdWUgJS40ZiBmaXRzXG4iLAorICAgICAgICAgICAgICAgICAgICB0dXBsZV9jb29yZHNbaV0gLyA2NTUzNi4wICkpOwogICAgICAgICAvKiBub3QgYW4gaW50ZXJtZWRpYXRlIHR1cGxlICovCiAgICAgICAgIGFwcGx5ID0gRlRfTXVsRml4KCBhcHBseSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID4gMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLWJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldICk7CisgICAgICB9CiAKLSAgICAgIGVsc2UgaWYgKCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSA8PSBpbV9zdGFydF9jb29yZHNbaV0gfHwKLSAgICAgICAgICAgICAgICBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSA+PSBpbV9lbmRfY29vcmRzW2ldICAgKQorICAgICAgZWxzZSBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIDwgaW1fc3RhcnRfY29vcmRzW2ldIHx8CisgICAgICAgICAgICAgICAgYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gPiBpbV9lbmRfY29vcmRzW2ldICAgKQogICAgICAgeworICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgaW50ZXJtZWRpYXRlIHR1cGxlIHJhbmdlIFslLjRmOyUuNGZdIGlzIGV4Y2VlZGVkLCIKKyAgICAgICAgICAgICAgICAgICAgIiBzdG9wXG4iLAorICAgICAgICAgICAgICAgICAgICBpbV9zdGFydF9jb29yZHNbaV0gLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICBpbV9lbmRfY29vcmRzW2ldIC8gNjU1MzYuMCApKTsKICAgICAgICAgYXBwbHkgPSAwOwogICAgICAgICBicmVhazsKICAgICAgIH0KIAogICAgICAgZWxzZSBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIDwgdHVwbGVfY29vcmRzW2ldICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0U2KCggIiAgICAgIGludGVybWVkaWF0ZSB0dXBsZSByYW5nZSBbJS40ZjslLjRmXSBmaXRzXG4iLAorICAgICAgICAgICAgICAgICAgICBpbV9zdGFydF9jb29yZHNbaV0gLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICBpbV9lbmRfY29vcmRzW2ldIC8gNjU1MzYuMCApKTsKICAgICAgICAgYXBwbHkgPSBGVF9NdWxEaXYoIGFwcGx5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gLSBpbV9zdGFydF9jb29yZHNbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dXBsZV9jb29yZHNbaV0gLSBpbV9zdGFydF9jb29yZHNbaV0gKTsKKyAgICAgIH0KIAogICAgICAgZWxzZQorICAgICAgeworICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgaW50ZXJtZWRpYXRlIHR1cGxlIHJhbmdlIFslLjRmOyUuNGZdIGZpdHNcbiIsCisgICAgICAgICAgICAgICAgICAgIGltX3N0YXJ0X2Nvb3Jkc1tpXSAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgIGltX2VuZF9jb29yZHNbaV0gLyA2NTUzNi4wICkpOwogICAgICAgICBhcHBseSA9IEZUX011bERpdiggYXBwbHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbV9lbmRfY29vcmRzW2ldIC0gYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbV9lbmRfY29vcmRzW2ldIC0gdHVwbGVfY29vcmRzW2ldICk7CisgICAgICB9CiAgICAgfQogCisgICAgRlRfVFJBQ0U2KCggIiAgICBhcHBseSBmYWN0b3IgaXMgJS40ZlxuIiwgYXBwbHkgLyA2NTUzNi4wICkpOworCiAgICAgcmV0dXJuIGFwcGx5OwogICB9CiAKQEAgLTU3Nyw5ICs2NzUsOSBAQAogICB0eXBlZGVmIHN0cnVjdCAgZnZhcl9heGlzXwogICB7CiAgICAgRlRfVUxvbmcgICBheGlzVGFnOwotICAgIEZUX1VMb25nICAgbWluVmFsdWU7Ci0gICAgRlRfVUxvbmcgICBkZWZhdWx0VmFsdWU7Ci0gICAgRlRfVUxvbmcgICBtYXhWYWx1ZTsKKyAgICBGVF9GaXhlZCAgIG1pblZhbHVlOworICAgIEZUX0ZpeGVkICAgZGVmYXVsdFZhbHVlOworICAgIEZUX0ZpeGVkICAgbWF4VmFsdWU7CiAgICAgRlRfVVNob3J0ICBmbGFnczsKICAgICBGVF9VU2hvcnQgIG5hbWVJRDsKIApAQCAtNjAwLDcgKzY5OCw4IEBACiAgIC8qICAgICAgICAgICAgICBUVF9HZXRfTU1fVmFyIGluaXRpYWxpemVzIHRoZSBibGVuZCBzdHJ1Y3R1cmUuICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1hc3RlciA6OiBUaGUgYGZ2YXInIGRhdGEgKG11c3QgYmUgZnJlZWQgYnkgY2FsbGVyKS4gICAgICAgICAgICAgICAqLworICAvKiAgICBtYXN0ZXIgOjogVGhlIGBmdmFyJyBkYXRhIChtdXN0IGJlIGZyZWVkIGJ5IGNhbGxlcikuICBDYW4gYmUgTlVMTCwgKi8KKyAgLyogICAgICAgICAgICAgIHdoaWNoIG1ha2VzIHRoaXMgZnVuY3Rpb24gc2ltcGx5IGxvYWQgTU0gc3VwcG9ydC4gICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC02NDcsMjUgKzc0NiwzNyBAQAogCiAgICAgICBGVF9GUkFNRV9TVEFSVCggMjAgKSwKICAgICAgICAgRlRfRlJBTUVfVUxPTkcgKCBheGlzVGFnICksCi0gICAgICAgIEZUX0ZSQU1FX1VMT05HICggbWluVmFsdWUgKSwKLSAgICAgICAgRlRfRlJBTUVfVUxPTkcgKCBkZWZhdWx0VmFsdWUgKSwKLSAgICAgICAgRlRfRlJBTUVfVUxPTkcgKCBtYXhWYWx1ZSApLAorICAgICAgICBGVF9GUkFNRV9MT05HICAoIG1pblZhbHVlICksCisgICAgICAgIEZUX0ZSQU1FX0xPTkcgICggZGVmYXVsdFZhbHVlICksCisgICAgICAgIEZUX0ZSQU1FX0xPTkcgICggbWF4VmFsdWUgKSwKICAgICAgICAgRlRfRlJBTUVfVVNIT1JUKCBmbGFncyApLAogICAgICAgICBGVF9GUkFNRV9VU0hPUlQoIG5hbWVJRCApLAogICAgICAgRlRfRlJBTUVfRU5ECiAgICAgfTsKIAogCisgICAgLyogcmVhZCB0aGUgZm9udCBkYXRhIGFuZCBzZXQgdXAgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uICovCisgICAgLyogaWYgbm90IGFscmVhZHkgZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKICAgICBpZiAoIGZhY2UtPmJsZW5kID09IE5VTEwgKQogICAgIHsKLSAgICAgIC8qIGJvdGggYGZ2YXInIGFuZCBgZ3ZhcicgbXVzdCBiZSBwcmVzZW50ICovCi0gICAgICBpZiAoIChlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfZ3ZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCAmdGFibGVfbGVuICkpICE9IDAgKQotICAgICAgICBnb3RvIEV4aXQ7CisgICAgICBGVF9UUkFDRTIoKCAiRlZBUiAiICkpOwogCi0gICAgICBpZiAoIChlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfZnZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCAmdGFibGVfbGVuICkpICE9IDAgKQorICAgICAgLyogYm90aCBgZnZhcicgYW5kIGBndmFyJyBtdXN0IGJlIHByZXNlbnQgKi8KKyAgICAgIGlmICggKCBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfZ3ZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwgJnRhYmxlX2xlbiApICkgIT0gMCApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMSgoICJcbiIKKyAgICAgICAgICAgICAgICAgICAgIlRUX0dldF9NTV9WYXI6IGBndmFyJyB0YWJsZSBpcyBtaXNzaW5nXG4iICkpOwogICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGlmICggKCBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfZnZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwgJnRhYmxlX2xlbiApICkgIT0gMCApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMSgoICJpcyBtaXNzaW5nXG4iICkpOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CiAKICAgICAgIGZ2YXJfc3RhcnQgPSBGVF9TVFJFQU1fUE9TKCApOwogCkBAIC02NzMsNyArNzg0LDEyIEBACiAgICAgICAgIGdvdG8gRXhpdDsKIAogICAgICAgaWYgKCBmdmFyX2hlYWQudmVyc2lvbiAhPSAoRlRfTG9uZykweDAwMDEwMDAwTCAgICAgICAgICAgICAgICAgICAgICB8fAorI2lmIDAKKyAgICAgICAgICAgLyogZm9udHMgbGlrZSBgSmFtUmVndWxhci50dGYnIGhhdmUgYW4gaW5jb3JyZWN0IHZhbHVlIGZvciAqLworICAgICAgICAgICAvKiBgY291bnRTaXplUGFpcnMnOyBzaW5jZSB2YWx1ZSAyIGlzIGhhcmQtY29kZWQgaW4gYGZ2YXInICovCisgICAgICAgICAgIC8qIHZlcnNpb24gMS4wLCB3ZSBzaW1wbHkgaWdub3JlIGl0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnZhcl9oZWFkLmNvdW50U2l6ZVBhaXJzICE9IDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyNlbmRpZgogICAgICAgICAgICBmdmFyX2hlYWQuYXhpc1NpemUgIT0gMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAvKiBheGlzQ291bnQgbGltaXQgaW1wbGllZCBieSAxNi1iaXQgaW5zdGFuY2VTaXplICovCiAgICAgICAgICAgIGZ2YXJfaGVhZC5heGlzQ291bnQgPiAweDNGRkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CkBAIC02ODMsMTAgKzc5OSwxNiBAQAogICAgICAgICAgICBmdmFyX2hlYWQub2Zmc2V0VG9EYXRhICsgZnZhcl9oZWFkLmF4aXNDb3VudCAqIDIwVSArCiAgICAgICAgICAgICAgZnZhcl9oZWFkLmluc3RhbmNlQ291bnQgKiBmdmFyX2hlYWQuaW5zdGFuY2VTaXplID4gdGFibGVfbGVuICkKICAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0UxKCggIlxuIgorICAgICAgICAgICAgICAgICAgICAiVFRfR2V0X01NX1ZhcjogaW52YWxpZCBgZnZhcicgaGVhZGVyXG4iICkpOwogICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CiAgICAgICAgIGdvdG8gRXhpdDsKICAgICAgIH0KIAorICAgICAgRlRfVFJBQ0UyKCggImxvYWRlZFxuIiApKTsKKworICAgICAgRlRfVFJBQ0U1KCggIm51bWJlciBvZiBHWCBzdHlsZSBheGVzOiAlZFxuIiwgZnZhcl9oZWFkLmF4aXNDb3VudCApKTsKKwogICAgICAgaWYgKCBGVF9ORVcoIGZhY2UtPmJsZW5kICkgKQogICAgICAgICBnb3RvIEV4aXQ7CiAKQEAgLTcwMiw2ICs4MjQsOSBAQAogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICBmYWNlLT5ibGVuZC0+bW12YXIgPSBtbXZhcjsKIAorICAgICAgLyogc2V0IHVwIHBvaW50ZXJzIGFuZCBvZmZzZXRzIGludG8gdGhlIGBtbXZhcicgYXJyYXk7ICovCisgICAgICAvKiB0aGUgZGF0YSBnZXRzIGZpbGxlZCBpbiBsYXRlciBvbiAgICAgICAgICAgICAgICAgICAgKi8KKwogICAgICAgbW12YXItPm51bV9heGlzID0KICAgICAgICAgZnZhcl9oZWFkLmF4aXNDb3VudDsKICAgICAgIG1tdmFyLT5udW1fZGVzaWducyA9CkBAIC03MTEsMzAgKzgzNiwzMiBAQAogICAgICAgbW12YXItPm51bV9uYW1lZHN0eWxlcyA9CiAgICAgICAgIGZ2YXJfaGVhZC5pbnN0YW5jZUNvdW50OwogICAgICAgbW12YXItPmF4aXMgPQotICAgICAgICAoRlRfVmFyX0F4aXMqKSYobW12YXJbMV0pOworICAgICAgICAoRlRfVmFyX0F4aXMqKSYoIG1tdmFyWzFdICk7CiAgICAgICBtbXZhci0+bmFtZWRzdHlsZSA9Ci0gICAgICAgIChGVF9WYXJfTmFtZWRfU3R5bGUqKSYobW12YXItPmF4aXNbZnZhcl9oZWFkLmF4aXNDb3VudF0pOworICAgICAgICAoRlRfVmFyX05hbWVkX1N0eWxlKikmKCBtbXZhci0+YXhpc1tmdmFyX2hlYWQuYXhpc0NvdW50XSApOwogCiAgICAgICBuZXh0X2Nvb3JkcyA9Ci0gICAgICAgIChGVF9GaXhlZCopJihtbXZhci0+bmFtZWRzdHlsZVtmdmFyX2hlYWQuaW5zdGFuY2VDb3VudF0pOwotICAgICAgZm9yICggaSA9IDA7IGkgPCBmdmFyX2hlYWQuaW5zdGFuY2VDb3VudDsgKytpICkKKyAgICAgICAgKEZUX0ZpeGVkKikmKCBtbXZhci0+bmFtZWRzdHlsZVtmdmFyX2hlYWQuaW5zdGFuY2VDb3VudF0gKTsKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgZnZhcl9oZWFkLmluc3RhbmNlQ291bnQ7IGkrKyApCiAgICAgICB7CiAgICAgICAgIG1tdmFyLT5uYW1lZHN0eWxlW2ldLmNvb3JkcyAgPSBuZXh0X2Nvb3JkczsKICAgICAgICAgbmV4dF9jb29yZHMgICAgICAgICAgICAgICAgICs9IGZ2YXJfaGVhZC5heGlzQ291bnQ7CiAgICAgICB9CiAKICAgICAgIG5leHRfbmFtZSA9IChGVF9TdHJpbmcqKW5leHRfY29vcmRzOwotICAgICAgZm9yICggaSA9IDA7IGkgPCBmdmFyX2hlYWQuYXhpc0NvdW50OyArK2kgKQorICAgICAgZm9yICggaSA9IDA7IGkgPCBmdmFyX2hlYWQuYXhpc0NvdW50OyBpKysgKQogICAgICAgewogICAgICAgICBtbXZhci0+YXhpc1tpXS5uYW1lICA9IG5leHRfbmFtZTsKICAgICAgICAgbmV4dF9uYW1lICAgICAgICAgICArPSA1OwogICAgICAgfQogCisgICAgICAvKiBub3cgZmlsbCBpbiB0aGUgZGF0YSAqLworCiAgICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBmdmFyX3N0YXJ0ICsgZnZhcl9oZWFkLm9mZnNldFRvRGF0YSApICkKICAgICAgICAgZ290byBFeGl0OwogCiAgICAgICBhID0gbW12YXItPmF4aXM7Ci0gICAgICBmb3IgKCBpID0gMDsgaSA8IGZ2YXJfaGVhZC5heGlzQ291bnQ7ICsraSApCisgICAgICBmb3IgKCBpID0gMDsgaSA8IGZ2YXJfaGVhZC5heGlzQ291bnQ7IGkrKyApCiAgICAgICB7CiAgICAgICAgIEdYX0ZWYXJfQXhpcyAgYXhpc19yZWM7CiAKQEAgLTc0MiwyMiArODY5LDMwIEBACiAgICAgICAgIGlmICggRlRfU1RSRUFNX1JFQURfRklFTERTKCBmdmFyYXhpc19maWVsZHMsICZheGlzX3JlYyApICkKICAgICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICAgIGEtPnRhZyAgICAgPSBheGlzX3JlYy5heGlzVGFnOwotICAgICAgICBhLT5taW5pbXVtID0gYXhpc19yZWMubWluVmFsdWU7ICAgICAvKiBBIEZpeGVkICovCi0gICAgICAgIGEtPmRlZiAgICAgPSBheGlzX3JlYy5kZWZhdWx0VmFsdWU7IC8qIEEgRml4ZWQgKi8KLSAgICAgICAgYS0+bWF4aW11bSA9IGF4aXNfcmVjLm1heFZhbHVlOyAgICAgLyogQSBGaXhlZCAqLworICAgICAgICBhLT5taW5pbXVtID0gYXhpc19yZWMubWluVmFsdWU7CisgICAgICAgIGEtPmRlZiAgICAgPSBheGlzX3JlYy5kZWZhdWx0VmFsdWU7CisgICAgICAgIGEtPm1heGltdW0gPSBheGlzX3JlYy5tYXhWYWx1ZTsKICAgICAgICAgYS0+c3RyaWQgICA9IGF4aXNfcmVjLm5hbWVJRDsKIAogICAgICAgICBhLT5uYW1lWzBdID0gKEZUX1N0cmluZykoICAgYS0+dGFnID4+IDI0ICk7CiAgICAgICAgIGEtPm5hbWVbMV0gPSAoRlRfU3RyaW5nKSggKCBhLT50YWcgPj4gMTYgKSAmIDB4RkYgKTsKICAgICAgICAgYS0+bmFtZVsyXSA9IChGVF9TdHJpbmcpKCAoIGEtPnRhZyA+PiAgOCApICYgMHhGRiApOwogICAgICAgICBhLT5uYW1lWzNdID0gKEZUX1N0cmluZykoICggYS0+dGFnICAgICAgICkgJiAweEZGICk7Ci0gICAgICAgIGEtPm5hbWVbNF0gPSAwOworICAgICAgICBhLT5uYW1lWzRdID0gJ1wwJzsKIAotICAgICAgICArK2E7CisgICAgICAgIEZUX1RSQUNFNSgoICIgIFwiJXNcIjogbWluaW11bT0lLjRmLCBkZWZhdWx0PSUuNGYsIG1heGltdW09JS40ZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgYS0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgYS0+bWluaW11bSAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgIGEtPmRlZiAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgIGEtPm1heGltdW0gLyA2NTUzNi4wICkpOworCisgICAgICAgIGErKzsKICAgICAgIH0KIAorICAgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKKwogICAgICAgbnMgPSBtbXZhci0+bmFtZWRzdHlsZTsKLSAgICAgIGZvciAoIGkgPSAwOyBpIDwgZnZhcl9oZWFkLmluc3RhbmNlQ291bnQ7ICsraSwgKytucyApCisgICAgICBmb3IgKCBpID0gMDsgaSA8IGZ2YXJfaGVhZC5pbnN0YW5jZUNvdW50OyBpKyssIG5zKysgKQogICAgICAgewogICAgICAgICBpZiAoIEZUX0ZSQU1FX0VOVEVSKCA0TCArIDRMICogZnZhcl9oZWFkLmF4aXNDb3VudCApICkKICAgICAgICAgICBnb3RvIEV4aXQ7CkBAIC03NjUsMTMgKzkwMCwxNSBAQAogICAgICAgICBucy0+c3RyaWQgICAgICAgPSAgICBGVF9HRVRfVVNIT1JUKCk7CiAgICAgICAgICh2b2lkKSAvKiBmbGFncyA9ICovIEZUX0dFVF9VU0hPUlQoKTsKIAotICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGZ2YXJfaGVhZC5heGlzQ291bnQ7ICsraiApCi0gICAgICAgICAgbnMtPmNvb3Jkc1tqXSA9IEZUX0dFVF9VTE9ORygpOyAgICAgLyogQSBGaXhlZCAqLworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGZ2YXJfaGVhZC5heGlzQ291bnQ7IGorKyApCisgICAgICAgICAgbnMtPmNvb3Jkc1tqXSA9IEZUX0dFVF9MT05HKCk7CiAKICAgICAgICAgRlRfRlJBTUVfRVhJVCgpOwogICAgICAgfQogICAgIH0KIAorICAgIC8qIGZpbGwgdGhlIG91dHB1dCBhcnJheSBpZiByZXF1ZXN0ZWQgKi8KKwogICAgIGlmICggbWFzdGVyICE9IE5VTEwgKQogICAgIHsKICAgICAgIEZUX1VJbnQgIG47CkBAIC03ODIsMzYgKzkxOSwzNiBAQAogICAgICAgRlRfTUVNX0NPUFkoIG1tdmFyLCBmYWNlLT5ibGVuZC0+bW12YXIsIGZhY2UtPmJsZW5kLT5tbXZhcl9sZW4gKTsKIAogICAgICAgbW12YXItPmF4aXMgPQotICAgICAgICAoRlRfVmFyX0F4aXMqKSYobW12YXJbMV0pOworICAgICAgICAoRlRfVmFyX0F4aXMqKSYoIG1tdmFyWzFdICk7CiAgICAgICBtbXZhci0+bmFtZWRzdHlsZSA9Ci0gICAgICAgIChGVF9WYXJfTmFtZWRfU3R5bGUqKSYobW12YXItPmF4aXNbbW12YXItPm51bV9heGlzXSk7CisgICAgICAgIChGVF9WYXJfTmFtZWRfU3R5bGUqKSYoIG1tdmFyLT5heGlzW21tdmFyLT5udW1fYXhpc10gKTsKICAgICAgIG5leHRfY29vcmRzID0KLSAgICAgICAgKEZUX0ZpeGVkKikmKG1tdmFyLT5uYW1lZHN0eWxlW21tdmFyLT5udW1fbmFtZWRzdHlsZXNdKTsKKyAgICAgICAgKEZUX0ZpeGVkKikmKCBtbXZhci0+bmFtZWRzdHlsZVttbXZhci0+bnVtX25hbWVkc3R5bGVzXSApOwogCi0gICAgICBmb3IgKCBuID0gMDsgbiA8IG1tdmFyLT5udW1fbmFtZWRzdHlsZXM7ICsrbiApCisgICAgICBmb3IgKCBuID0gMDsgbiA8IG1tdmFyLT5udW1fbmFtZWRzdHlsZXM7IG4rKyApCiAgICAgICB7CiAgICAgICAgIG1tdmFyLT5uYW1lZHN0eWxlW25dLmNvb3JkcyAgPSBuZXh0X2Nvb3JkczsKICAgICAgICAgbmV4dF9jb29yZHMgICAgICAgICAgICAgICAgICs9IG1tdmFyLT5udW1fYXhpczsKICAgICAgIH0KIAotICAgICAgYSA9IG1tdmFyLT5heGlzOworICAgICAgYSAgICAgICAgID0gbW12YXItPmF4aXM7CiAgICAgICBuZXh0X25hbWUgPSAoRlRfU3RyaW5nKiluZXh0X2Nvb3JkczsKLSAgICAgIGZvciAoIG4gPSAwOyBuIDwgbW12YXItPm51bV9heGlzOyArK24gKQorICAgICAgZm9yICggbiA9IDA7IG4gPCBtbXZhci0+bnVtX2F4aXM7IG4rKyApCiAgICAgICB7CiAgICAgICAgIGEtPm5hbWUgPSBuZXh0X25hbWU7CiAKICAgICAgICAgLyogc3RhbmRhcmQgUG9zdFNjcmlwdCBuYW1lcyBmb3Igc29tZSBzdGFuZGFyZCBhcHBsZSB0YWdzICovCiAgICAgICAgIGlmICggYS0+dGFnID09IFRUQUdfd2dodCApCi0gICAgICAgICAgYS0+bmFtZSA9IChjaGFyICopIldlaWdodCI7CisgICAgICAgICAgYS0+bmFtZSA9IChjaGFyKikiV2VpZ2h0IjsKICAgICAgICAgZWxzZSBpZiAoIGEtPnRhZyA9PSBUVEFHX3dkdGggKQotICAgICAgICAgIGEtPm5hbWUgPSAoY2hhciAqKSJXaWR0aCI7CisgICAgICAgICAgYS0+bmFtZSA9IChjaGFyKikiV2lkdGgiOwogICAgICAgICBlbHNlIGlmICggYS0+dGFnID09IFRUQUdfb3BzeiApCi0gICAgICAgICAgYS0+bmFtZSA9IChjaGFyICopIk9wdGljYWxTaXplIjsKKyAgICAgICAgICBhLT5uYW1lID0gKGNoYXIqKSJPcHRpY2FsU2l6ZSI7CiAgICAgICAgIGVsc2UgaWYgKCBhLT50YWcgPT0gVFRBR19zbG50ICkKLSAgICAgICAgICBhLT5uYW1lID0gKGNoYXIgKikiU2xhbnQiOworICAgICAgICAgIGEtPm5hbWUgPSAoY2hhciopIlNsYW50IjsKIAogICAgICAgICBuZXh0X25hbWUgKz0gNTsKLSAgICAgICAgKythOworICAgICAgICBhKys7CiAgICAgICB9CiAKICAgICAgICptYXN0ZXIgPSBtbXZhcjsKQEAgLTgzNyw5ICs5NzQsMTIgQEAKICAgLyogICAgICAgICAgICAgICAgICBJbml0aWFsaXplIHRoZSBibGVuZCBzdHJ1Y3R1cmUgd2l0aCBgZ3ZhcicgZGF0YS4gICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2Nvb3JkcyA6OiBNdXN0IGJlIHRoZSBheGlzIGNvdW50IG9mIHRoZSBmb250LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV9jb29yZHMgOjogVGhlIG51bWJlciBvZiBhdmFpbGFibGUgY29vcmRpbmF0ZXMuICBJZiBpdCBpcyAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgaWdub3JlIHRoZSBleGNlc3MgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICB2YWx1ZXMuICBJZiBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgdXNlIHRoZSBkZWZhdWx0IHZhbHVlICgwKSBmb3IgdGhlIHJlbWFpbmluZyBheGVzLiAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29vcmRzICAgICA6OiBBbiBhcnJheSBvZiBudW1fY29vcmRzLCBlYWNoIGJldHdlZW4gWy0xLDFdLiAgICAgICAgICovCisgIC8qICAgIGNvb3JkcyAgICAgOjogQW4gYXJyYXkgb2YgYG51bV9jb29yZHMnLCBlYWNoIGJldHdlZW4gWy0xLDFdLiAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtODY4LDMzICsxMDA4LDQ0IEBACiAKICAgICBpZiAoIGZhY2UtPmJsZW5kID09IE5VTEwgKQogICAgIHsKLSAgICAgIGlmICggKGVycm9yID0gVFRfR2V0X01NX1ZhciggZmFjZSwgTlVMTCkpICE9IDAgKQorICAgICAgaWYgKCAoIGVycm9yID0gVFRfR2V0X01NX1ZhciggZmFjZSwgTlVMTCApICkgIT0gMCApCiAgICAgICAgIGdvdG8gRXhpdDsKICAgICB9CiAKICAgICBibGVuZCA9IGZhY2UtPmJsZW5kOwogICAgIG1tdmFyID0gYmxlbmQtPm1tdmFyOwogCi0gICAgaWYgKCBudW1fY29vcmRzICE9IG1tdmFyLT5udW1fYXhpcyApCisgICAgaWYgKCBudW1fY29vcmRzID4gbW12YXItPm51bV9heGlzICkKICAgICB7Ci0gICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0gICAgICBnb3RvIEV4aXQ7CisgICAgICBGVF9UUkFDRTIoKCAiVFRfU2V0X01NX0JsZW5kOiBvbmx5IHVzaW5nIGZpcnN0ICVkIG9mICVkIGNvb3JkaW5hdGVzXG4iLAorICAgICAgICAgICAgICAgICAgbW12YXItPm51bV9heGlzLCBudW1fY29vcmRzICkpOworICAgICAgbnVtX2Nvb3JkcyA9IG1tdmFyLT5udW1fYXhpczsKICAgICB9CiAKLSAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9jb29yZHM7ICsraSApCisgICAgRlRfVFJBQ0U1KCggIm5vcm1hbGl6ZWQgZGVzaWduIGNvb3JkaW5hdGVzOlxuIiApKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2Nvb3JkczsgaSsrICkKKyAgICB7CisgICAgICBGVF9UUkFDRTUoKCAiICAlLjRmXG4iLCBjb29yZHNbaV0gLyA2NTUzNi4wICkpOwogICAgICAgaWYgKCBjb29yZHNbaV0gPCAtMHgwMDAxMDAwMEwgfHwgY29vcmRzW2ldID4gMHgwMDAxMDAwMEwgKQogICAgICAgeworICAgICAgICBGVF9UUkFDRTEoKCAiVFRfU2V0X01NX0JsZW5kOiBub3JtYWxpemVkIGRlc2lnbiBjb29yZGluYXRlICUuNGZcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgaXMgb3V0IG9mIHJhbmdlIFstMTsxXVxuIiwKKyAgICAgICAgICAgICAgICAgICAgY29vcmRzW2ldIC8gNjU1MzYuMCApKTsKICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICB9CisgICAgfQorCisgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKIAogICAgIGlmICggYmxlbmQtPmdseXBob2Zmc2V0cyA9PSBOVUxMICkKLSAgICAgIGlmICggKGVycm9yID0gZnRfdmFyX2xvYWRfZ3ZhciggZmFjZSApKSAhPSAwICkKKyAgICAgIGlmICggKCBlcnJvciA9IGZ0X3Zhcl9sb2FkX2d2YXIoIGZhY2UgKSApICE9IDAgKQogICAgICAgICBnb3RvIEV4aXQ7CiAKICAgICBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzID09IE5VTEwgKQogICAgIHsKLSAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBibGVuZC0+bm9ybWFsaXplZGNvb3JkcywgbnVtX2Nvb3JkcyApICkKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBibGVuZC0+bm9ybWFsaXplZGNvb3JkcywgbW12YXItPm51bV9heGlzICkgKQogICAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAgIG1hbmFnZUN2dCA9IG1jdnRfbW9kaWZ5OwpAQCAtOTA2LDcgKzEwNTcsOCBAQAogICAgIGVsc2UKICAgICB7CiAgICAgICBtYW5hZ2VDdnQgPSBtY3Z0X3JldGFpbjsKLSAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2Nvb3JkczsgKytpICkKKworICAgICAgZm9yICggaSA9IDA7IGkgPCBudW1fY29vcmRzOyBpKysgKQogICAgICAgewogICAgICAgICBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldICE9IGNvb3Jkc1tpXSApCiAgICAgICAgIHsKQEAgLTkxNSwxMyArMTA2NywyMiBAQAogICAgICAgICB9CiAgICAgICB9CiAKKyAgICAgIGZvciAoIDsgaSA8IG1tdmFyLT5udW1fYXhpczsgaSsrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgIG1hbmFnZUN2dCA9IG1jdnRfbG9hZDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCiAgICAgICAvKiBJZiB3ZSBkb24ndCBjaGFuZ2UgdGhlIGJsZW5kIGNvb3JkcyB0aGVuIHdlIGRvbid0IG5lZWQgdG8gZG8gICovCiAgICAgICAvKiBhbnl0aGluZyB0byB0aGUgY3Z0IHRhYmxlLiAgSXQgd2lsbCBiZSBjb3JyZWN0LiAgT3RoZXJ3aXNlIHdlICovCiAgICAgICAvKiBubyBsb25nZXIgaGF2ZSB0aGUgb3JpZ2luYWwgY3Z0IChpdCB3YXMgbW9kaWZpZWQgd2hlbiB3ZSBzZXQgICovCiAgICAgICAvKiB0aGUgYmxlbmQgbGFzdCB0aW1lKSwgc28gd2UgbXVzdCByZWxvYWQgYW5kIHRoZW4gbW9kaWZ5IGl0LiAgICovCiAgICAgfQogCi0gICAgYmxlbmQtPm51bV9heGlzID0gbnVtX2Nvb3JkczsKKyAgICBibGVuZC0+bnVtX2F4aXMgPSBtbXZhci0+bnVtX2F4aXM7CiAgICAgRlRfTUVNX0NPUFkoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzLAogICAgICAgICAgICAgICAgICBjb29yZHMsCiAgICAgICAgICAgICAgICAgIG51bV9jb29yZHMgKiBzaXplb2YgKCBGVF9GaXhlZCApICk7CkBAIC05NzMsNyArMTEzNCwxMCBAQAogICAvKiAgICAgICAgICAgICAgICAgIEluaXRpYWxpemUgdGhlIGJsZW5kIHN0cnVjdCB3aXRoIGBndmFyJyBkYXRhLiAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBudW1fY29vcmRzIDo6IFRoaXMgbXVzdCBiZSB0aGUgYXhpcyBjb3VudCBvZiB0aGUgZm9udC4gICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX2Nvb3JkcyA6OiBUaGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBjb29yZGluYXRlcy4gIElmIGl0IGlzICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCBpZ25vcmUgdGhlIGV4Y2VzcyAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlcy4gIElmIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICB1c2UgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgcmVtYWluaW5nIGF4ZXMuICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBjb29yZHMgICAgIDo6IEEgY29vcmRpbmF0ZSBhcnJheSB3aXRoIGBudW1fY29vcmRzJyBlbGVtZW50cy4gICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC05OTcsMTcgKzExNjEsMTkgQEAKIAogICAgIGlmICggZmFjZS0+YmxlbmQgPT0gTlVMTCApCiAgICAgewotICAgICAgaWYgKCAoZXJyb3IgPSBUVF9HZXRfTU1fVmFyKCBmYWNlLCBOVUxMICkpICE9IDAgKQorICAgICAgaWYgKCAoIGVycm9yID0gVFRfR2V0X01NX1ZhciggZmFjZSwgTlVMTCApICkgIT0gMCApCiAgICAgICAgIGdvdG8gRXhpdDsKICAgICB9CiAKICAgICBibGVuZCA9IGZhY2UtPmJsZW5kOwogICAgIG1tdmFyID0gYmxlbmQtPm1tdmFyOwogCi0gICAgaWYgKCBudW1fY29vcmRzICE9IG1tdmFyLT5udW1fYXhpcyApCisgICAgaWYgKCBudW1fY29vcmRzID4gbW12YXItPm51bV9heGlzICkKICAgICB7Ci0gICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0gICAgICBnb3RvIEV4aXQ7CisgICAgICBGVF9UUkFDRTIoKCAiVFRfU2V0X1Zhcl9EZXNpZ246IgorICAgICAgICAgICAgICAgICAgIiBvbmx5IHVzaW5nIGZpcnN0ICVkIG9mICVkIGNvb3JkaW5hdGVzXG4iLAorICAgICAgICAgICAgICAgICAgbW12YXItPm51bV9heGlzLCBudW1fY29vcmRzICkpOworICAgICAgbnVtX2Nvb3JkcyA9IG1tdmFyLT5udW1fYXhpczsKICAgICB9CiAKICAgICAvKiBBeGlzIG5vcm1hbGl6YXRpb24gaXMgYSB0d28gc3RhZ2UgcHJvY2Vzcy4gIEZpcnN0IHdlIG5vcm1hbGl6ZSAqLwpAQCAtMTAxNywzMiArMTE4Myw1MiBAQAogICAgIGlmICggRlRfTkVXX0FSUkFZKCBub3JtYWxpemVkLCBtbXZhci0+bnVtX2F4aXMgKSApCiAgICAgICBnb3RvIEV4aXQ7CiAKKyAgICBGVF9UUkFDRTUoKCAiZGVzaWduIGNvb3JkaW5hdGVzOlxuIiApKTsKKwogICAgIGEgPSBtbXZhci0+YXhpczsKLSAgICBmb3IgKCBpID0gMDsgaSA8IG1tdmFyLT5udW1fYXhpczsgKytpLCArK2EgKQorICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2Nvb3JkczsgaSsrLCBhKysgKQogICAgIHsKKyAgICAgIEZUX1RSQUNFNSgoICIgICUuNGZcbiIsIGNvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7CiAgICAgICBpZiAoIGNvb3Jkc1tpXSA+IGEtPm1heGltdW0gfHwgY29vcmRzW2ldIDwgYS0+bWluaW11bSApCiAgICAgICB7CisgICAgICAgIEZUX1RSQUNFMSgoICJUVF9TZXRfVmFyX0Rlc2lnbjogbm9ybWFsaXplZCBkZXNpZ24gY29vcmRpbmF0ZSAlLjRmXG4iCisgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgaXMgb3V0IG9mIHJhbmdlIFslLjRmOyUuNGZdXG4iLAorICAgICAgICAgICAgICAgICAgICBjb29yZHNbaV0gLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICBhLT5taW5pbXVtIC8gNjU1MzYuMCwKKyAgICAgICAgICAgICAgICAgICAgYS0+bWF4aW11bSAvIDY1NTM2LjAgKSk7CiAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQogCiAgICAgICBpZiAoIGNvb3Jkc1tpXSA8IGEtPmRlZiApCi0gICAgICAgIG5vcm1hbGl6ZWRbaV0gPSAtRlRfRGl2Rml4KCBjb29yZHNbaV0gLSBhLT5kZWYsIGEtPm1pbmltdW0gLSBhLT5kZWYgKTsKKyAgICAgICAgbm9ybWFsaXplZFtpXSA9IC1GVF9EaXZGaXgoIGNvb3Jkc1tpXSAtIGEtPmRlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEtPm1pbmltdW0gLSBhLT5kZWYgKTsKICAgICAgIGVsc2UgaWYgKCBhLT5tYXhpbXVtID09IGEtPmRlZiApCiAgICAgICAgIG5vcm1hbGl6ZWRbaV0gPSAwOwogICAgICAgZWxzZQotICAgICAgICBub3JtYWxpemVkW2ldID0gRlRfRGl2Rml4KCBjb29yZHNbaV0gLSBhLT5kZWYsIGEtPm1heGltdW0gLSBhLT5kZWYgKTsKKyAgICAgICAgbm9ybWFsaXplZFtpXSA9IEZUX0RpdkZpeCggY29vcmRzW2ldIC0gYS0+ZGVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLT5tYXhpbXVtIC0gYS0+ZGVmICk7CiAgICAgfQogCisgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKKworICAgIGZvciAoIDsgaSA8IG1tdmFyLT5udW1fYXhpczsgaSsrICkKKyAgICAgIG5vcm1hbGl6ZWRbaV0gPSAwOworCiAgICAgaWYgKCAhYmxlbmQtPmF2YXJfY2hlY2tlZCApCiAgICAgICBmdF92YXJfbG9hZF9hdmFyKCBmYWNlICk7CiAKICAgICBpZiAoIGJsZW5kLT5hdmFyX3NlZ21lbnQgIT0gTlVMTCApCiAgICAgeworICAgICAgRlRfVFJBQ0U1KCggIm5vcm1hbGl6ZWQgZGVzaWduIGNvb3JkaW5hdGVzIgorICAgICAgICAgICAgICAgICAgIiBiZWZvcmUgYXBwbHlpbmcgYGF2YXInIGRhdGE6XG4iICkpOworCiAgICAgICBhdiA9IGJsZW5kLT5hdmFyX3NlZ21lbnQ7Ci0gICAgICBmb3IgKCBpID0gMDsgaSA8IG1tdmFyLT5udW1fYXhpczsgKytpLCArK2F2ICkKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgbW12YXItPm51bV9heGlzOyBpKyssIGF2KysgKQogICAgICAgewotICAgICAgICBmb3IgKCBqID0gMTsgaiA8IChGVF9VSW50KWF2LT5wYWlyQ291bnQ7ICsraiApCisgICAgICAgIGZvciAoIGogPSAxOyBqIDwgKEZUX1VJbnQpYXYtPnBhaXJDb3VudDsgaisrICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFNSgoICIgICUuNGZcbiIsIG5vcm1hbGl6ZWRbaV0gLyA2NTUzNi4wICkpOwogICAgICAgICAgIGlmICggbm9ybWFsaXplZFtpXSA8IGF2LT5jb3JyZXNwb25kZW5jZVtqXS5mcm9tQ29vcmQgKQogICAgICAgICAgIHsKICAgICAgICAgICAgIG5vcm1hbGl6ZWRbaV0gPQpAQCAtMTA1NCwxMCArMTI0MCwxMSBAQAogICAgICAgICAgICAgICBhdi0+Y29ycmVzcG9uZGVuY2VbaiAtIDFdLnRvQ29vcmQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAKLSAgICBlcnJvciA9IFRUX1NldF9NTV9CbGVuZCggZmFjZSwgbnVtX2Nvb3Jkcywgbm9ybWFsaXplZCApOworICAgIGVycm9yID0gVFRfU2V0X01NX0JsZW5kKCBmYWNlLCBtbXZhci0+bnVtX2F4aXMsIG5vcm1hbGl6ZWQgKTsKIAogICBFeGl0OgogICAgIEZUX0ZSRUUoIG5vcm1hbGl6ZWQgKTsKQEAgLTExMjAsMTYgKzEzMDcsMTYgQEAKIAogICAgIGlmICggYmxlbmQgPT0gTlVMTCApCiAgICAgewotICAgICAgRlRfVFJBQ0UyKCggInR0X2ZhY2VfdmFyeV9jdnQ6IG5vIGJsZW5kIHNwZWNpZmllZFxuIiApKTsKLQorICAgICAgRlRfVFJBQ0UyKCggIlxuIgorICAgICAgICAgICAgICAgICAgInR0X2ZhY2VfdmFyeV9jdnQ6IG5vIGJsZW5kIHNwZWNpZmllZFxuIiApKTsKICAgICAgIGVycm9yID0gRlRfRXJyX09rOwogICAgICAgZ290byBFeGl0OwogICAgIH0KIAogICAgIGlmICggZmFjZS0+Y3Z0ID09IE5VTEwgKQogICAgIHsKLSAgICAgIEZUX1RSQUNFMigoICJ0dF9mYWNlX3ZhcnlfY3Z0OiBubyBgY3Z0ICcgdGFibGVcbiIgKSk7Ci0KKyAgICAgIEZUX1RSQUNFMigoICJcbiIKKyAgICAgICAgICAgICAgICAgICJ0dF9mYWNlX3ZhcnlfY3Z0OiBubyBgY3Z0ICcgdGFibGVcbiIgKSk7CiAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKICAgICAgIGdvdG8gRXhpdDsKICAgICB9CkBAIC0xMTU4LDYgKzEzNDUsOCBAQAogICAgICAgZ290byBGRXhpdDsKICAgICB9CiAKKyAgICBGVF9UUkFDRTIoKCAibG9hZGVkXG4iICkpOworCiAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHR1cGxlX2Nvb3JkcywgYmxlbmQtPm51bV9heGlzICkgICAgfHwKICAgICAgICAgIEZUX05FV19BUlJBWSggaW1fc3RhcnRfY29vcmRzLCBibGVuZC0+bnVtX2F4aXMgKSB8fAogICAgICAgICAgRlRfTkVXX0FSUkFZKCBpbV9lbmRfY29vcmRzLCBibGVuZC0+bnVtX2F4aXMgKSAgICkKQEAgLTExNzAsMTMgKzEzNTksMTcgQEAKICAgICAvKiB0dXBsZWNvdW50LCBidXQgSm9obiBKZW5raW5zIHNheXMgdGhhdCBzaGFyZWQgcG9pbnRzIGRvbid0IGFwcGx5ICovCiAgICAgLyogdG8gYGN2YXInLCBhbmQgbm8gb3RoZXIgZmxhZ3MgYXJlIGRlZmluZWQuICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgZm9yICggaSA9IDA7IGkgPCAoIHR1cGxlQ291bnQgJiAweEZGRiApOyArK2kgKQorICAgIEZUX1RSQUNFNSgoICJjdmFyOiB0aGVyZSBhcmUgJWQgdHVwbGVzOlxuIiwgdHVwbGVDb3VudCApKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgKCB0dXBsZUNvdW50ICYgMHhGRkYgKTsgaSsrICkKICAgICB7CiAgICAgICBGVF9VSW50ICAgdHVwbGVEYXRhU2l6ZTsKICAgICAgIEZUX1VJbnQgICB0dXBsZUluZGV4OwogICAgICAgRlRfRml4ZWQgIGFwcGx5OwogCiAKKyAgICAgIEZUX1RSQUNFNigoICIgIHR1cGxlICVkOlxuIiwgaSApKTsKKwogICAgICAgdHVwbGVEYXRhU2l6ZSA9IEZUX0dFVF9VU0hPUlQoKTsKICAgICAgIHR1cGxlSW5kZXggICAgPSBGVF9HRVRfVVNIT1JUKCk7CiAKQEAgLTExODUsOCArMTM3OCw4IEBACiAKICAgICAgIGlmICggdHVwbGVJbmRleCAmIEdYX1RJX0VNQkVEREVEX1RVUExFX0NPT1JEICkKICAgICAgIHsKLSAgICAgICAgZm9yICggaiA9IDA7IGogPCBibGVuZC0+bnVtX2F4aXM7ICsraiApCi0gICAgICAgICAgdHVwbGVfY29vcmRzW2pdID0gRlRfR0VUX1NIT1JUKCkgPDwgMjsgLyogY29udmVydCBmcm9tICAgICAgICAqLworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGJsZW5kLT5udW1fYXhpczsgaisrICkKKyAgICAgICAgICB0dXBsZV9jb29yZHNbal0gPSBGVF9HRVRfU0hPUlQoKSAqIDQ7ICAvKiBjb252ZXJ0IGZyb20gICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hvcnQgZnJhYyB0byBmaXhlZCAqLwogICAgICAgfQogICAgICAgZWxzZQpAQCAtMTE5NCw3ICsxMzg3LDcgQEAKICAgICAgICAgLyogc2tpcCB0aGlzIHR1cGxlOyBpdCBtYWtlcyBubyBzZW5zZSAqLwogCiAgICAgICAgIGlmICggdHVwbGVJbmRleCAmIEdYX1RJX0lOVEVSTUVESUFURV9UVVBMRSApCi0gICAgICAgICAgZm9yICggaiA9IDA7IGogPCAyICogYmxlbmQtPm51bV9heGlzOyArK2ogKQorICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgMiAqIGJsZW5kLT5udW1fYXhpczsgaisrICkKICAgICAgICAgICAgICh2b2lkKUZUX0dFVF9TSE9SVCgpOwogCiAgICAgICAgIG9mZnNldFRvRGF0YSArPSB0dXBsZURhdGFTaXplOwpAQCAtMTIwMywxMCArMTM5NiwxMCBAQAogCiAgICAgICBpZiAoIHR1cGxlSW5kZXggJiBHWF9USV9JTlRFUk1FRElBVEVfVFVQTEUgKQogICAgICAgewotICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGJsZW5kLT5udW1fYXhpczsgKytqICkKLSAgICAgICAgICBpbV9zdGFydF9jb29yZHNbal0gPSBGVF9HRVRfU0hPUlQoKSA8PCAyOwotICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGJsZW5kLT5udW1fYXhpczsgKytqICkKLSAgICAgICAgICBpbV9lbmRfY29vcmRzW2pdID0gRlRfR0VUX1NIT1JUKCkgPDwgMjsKKyAgICAgICAgZm9yICggaiA9IDA7IGogPCBibGVuZC0+bnVtX2F4aXM7IGorKyApCisgICAgICAgICAgaW1fc3RhcnRfY29vcmRzW2pdID0gRlRfR0VUX1NIT1JUKCkgKiA0OworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGJsZW5kLT5udW1fYXhpczsgaisrICkKKyAgICAgICAgICBpbV9lbmRfY29vcmRzW2pdID0gRlRfR0VUX1NIT1JUKCkgKiA0OwogICAgICAgfQogCiAgICAgICBhcHBseSA9IGZ0X3Zhcl9hcHBseV90dXBsZSggYmxlbmQsCkBAIC0xMjMzLDI1ICsxNDI2LDc0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludF9jb3VudCA9PSAwID8gZmFjZS0+Y3Z0X3NpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwb2ludF9jb3VudCApOwogICAgICAgaWYgKCBsb2NhbHBvaW50cyA9PSBOVUxMIHx8IGRlbHRhcyA9PSBOVUxMICkKLSAgICAgICAgLyogZmFpbHVyZSwgaWdub3JlIGl0ICovOworICAgICAgICA7IC8qIGZhaWx1cmUsIGlnbm9yZSBpdCAqLwogCiAgICAgICBlbHNlIGlmICggbG9jYWxwb2ludHMgPT0gQUxMX1BPSU5UUyApCiAgICAgICB7CisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgaW50ICBjb3VudCA9IDA7CisjZW5kaWYKKworCisgICAgICAgIEZUX1RSQUNFNygoICIgICAgQ1ZUIGRlbHRhczpcbiIgKSk7CisKICAgICAgICAgLyogdGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBkZWx0YXMgZm9yIGV2ZXJ5IGVudHJ5IGluIGN2dCAqLwotICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGZhY2UtPmN2dF9zaXplOyArK2ogKQotICAgICAgICAgIGZhY2UtPmN2dFtqXSA9IChGVF9TaG9ydCkoIGZhY2UtPmN2dFtqXSArCisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgZmFjZS0+Y3Z0X3NpemU7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9Mb25nICBvcmlnX2N2dCA9IGZhY2UtPmN2dFtqXTsKKworCisgICAgICAgICAgZmFjZS0+Y3Z0W2pdID0gKEZUX1Nob3J0KSggb3JpZ19jdnQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bEZpeCggZGVsdGFzW2pdLCBhcHBseSApICk7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICAgIGlmICggb3JpZ19jdnQgIT0gZmFjZS0+Y3Z0W2pdICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9UUkFDRTcoKCAiICAgICAgJWQ6ICVkIC0+ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaiwgb3JpZ19jdnQsIGZhY2UtPmN2dFtqXSApKTsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgIH0KKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIGlmICggIWNvdW50ICkKKyAgICAgICAgICBGVF9UUkFDRTcoKCAiICAgICAgbm9uZVxuIiApKTsKKyNlbmRpZgogICAgICAgfQogCiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIGZvciAoIGogPSAwOyBqIDwgcG9pbnRfY291bnQ7ICsraiApCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgIHBpbmRleCA9IGxvY2FscG9pbnRzW2pdOworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIGludCAgY291bnQgPSAwOworI2VuZGlmCiAKLSAgICAgICAgICBmYWNlLT5jdnRbcGluZGV4XSA9IChGVF9TaG9ydCkoIGZhY2UtPmN2dFtwaW5kZXhdICsKKworICAgICAgICBGVF9UUkFDRTcoKCAiICAgIENWVCBkZWx0YXM6XG4iICkpOworCisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgcG9pbnRfY291bnQ7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgICAgICBwaW5kZXggICA9IGxvY2FscG9pbnRzW2pdOworICAgICAgICAgIEZUX0xvbmcgIG9yaWdfY3Z0ID0gZmFjZS0+Y3Z0W3BpbmRleF07CisKKworICAgICAgICAgIGZhY2UtPmN2dFtwaW5kZXhdID0gKEZUX1Nob3J0KSggb3JpZ19jdnQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRml4KCBkZWx0YXNbal0sIGFwcGx5ICkgKTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgICAgaWYgKCBvcmlnX2N2dCAhPSBmYWNlLT5jdnRbcGluZGV4XSApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgICVkOiAlZCAtPiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpbmRleCwgb3JpZ19jdnQsIGZhY2UtPmN2dFtwaW5kZXhdICkpOworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgfQorCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgaWYgKCAhY291bnQgKQorICAgICAgICAgIEZUX1RSQUNFNygoICIgICAgICBub25lXG4iICkpOworI2VuZGlmCiAgICAgICB9CiAKICAgICAgIGlmICggbG9jYWxwb2ludHMgIT0gQUxMX1BPSU5UUyApCkBAIC0xMjYzLDYgKzE1MDUsOCBAQAogICAgICAgRlRfU3RyZWFtX1NlZWtTZXQoIHN0cmVhbSwgaGVyZSApOwogICAgIH0KIAorICAgIEZUX1RSQUNFNSgoICJcbiIgKSk7CisKICAgRkV4aXQ6CiAgICAgRlRfRlJBTUVfRVhJVCgpOwogCkBAIC0xMjc1LDEzICsxNTE5LDIzMCBAQAogICB9CiAKIAorICAvKiBTaGlmdCB0aGUgb3JpZ2luYWwgY29vcmRpbmF0ZXMgb2YgYWxsIHBvaW50cyBiZXR3ZWVuIGluZGljZXMgYHAxJyAqLworICAvKiBhbmQgYHAyJywgdXNpbmcgdGhlIHNhbWUgZGlmZmVyZW5jZSBhcyBnaXZlbiBieSBpbmRleCBgcmVmJy4gICAgICAqLworCisgIC8qIG1vZGVsZWQgYWZ0ZXIgYGFmX2l1cF9zaGlmdCcgKi8KKworICBzdGF0aWMgdm9pZAorICB0dF9kZWx0YV9zaGlmdCggaW50ICAgICAgICAgcDEsCisgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICBwMiwKKyAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIHJlZiwKKyAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIGluX3BvaW50cywKKyAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIG91dF9wb2ludHMgKQorICB7CisgICAgaW50ICAgICAgICBwOworICAgIEZUX1ZlY3RvciAgZGVsdGE7CisKKworICAgIGRlbHRhLnggPSBvdXRfcG9pbnRzW3JlZl0ueCAtIGluX3BvaW50c1tyZWZdLng7CisgICAgZGVsdGEueSA9IG91dF9wb2ludHNbcmVmXS55IC0gaW5fcG9pbnRzW3JlZl0ueTsKKworICAgIGlmICggZGVsdGEueCA9PSAwICYmIGRlbHRhLnkgPT0gMCApCisgICAgICByZXR1cm47CisKKyAgICBmb3IgKCBwID0gcDE7IHAgPCByZWY7IHArKyApCisgICAgeworICAgICAgb3V0X3BvaW50c1twXS54ICs9IGRlbHRhLng7CisgICAgICBvdXRfcG9pbnRzW3BdLnkgKz0gZGVsdGEueTsKKyAgICB9CisKKyAgICBmb3IgKCBwID0gcmVmICsgMTsgcCA8PSBwMjsgcCsrICkKKyAgICB7CisgICAgICBvdXRfcG9pbnRzW3BdLnggKz0gZGVsdGEueDsKKyAgICAgIG91dF9wb2ludHNbcF0ueSArPSBkZWx0YS55OworICAgIH0KKyAgfQorCisKKyAgLyogSW50ZXJwb2xhdGUgdGhlIG9yaWdpbmFsIGNvb3JkaW5hdGVzIG9mIGFsbCBwb2ludHMgd2l0aCBpbmRpY2VzICovCisgIC8qIGJldHdlZW4gYHAxJyBhbmQgYHAyJywgdXNpbmcgYHJlZjEnIGFuZCBgcmVmMicgYXMgdGhlIHJlZmVyZW5jZSAqLworICAvKiBwb2ludCBpbmRpY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAvKiBtb2RlbGVkIGFmdGVyIGBhZl9pdXBfaW50ZXJwJywgYF9pdXBfd29ya2VyX2ludGVycG9sYXRlJywgYW5kICovCisgIC8qIGBJbnNfSVVQJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICBzdGF0aWMgdm9pZAorICB0dF9kZWx0YV9pbnRlcnBvbGF0ZSggaW50ICAgICAgICAgcDEsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICBwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIHJlZjEsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICByZWYyLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgaW5fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgb3V0X3BvaW50cyApCisgIHsKKyAgICBpbnQgIHAsIGk7CisKKyAgICBGVF9Qb3MgIG91dCwgaW4xLCBpbjIsIG91dDEsIG91dDIsIGQxLCBkMjsKKworCisgICAgaWYgKCBwMSA+IHAyICkKKyAgICAgIHJldHVybjsKKworICAgIC8qIGhhbmRsZSBib3RoIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGNvb3JkaW5hdGVzICovCisgICAgZm9yICggaSA9IDA7IGkgPD0gMTsgaSsrICkKKyAgICB7CisgICAgICAvKiBzaGlmdCBhcnJheSBwb2ludGVycyBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgYGZvby55JyBhcyBgZm9vLngnICovCisgICAgICBpbl9wb2ludHMgID0gKEZUX1ZlY3RvciopKCAoRlRfUG9zKilpbl9wb2ludHMgKyBpICk7CisgICAgICBvdXRfcG9pbnRzID0gKEZUX1ZlY3RvciopKCAoRlRfUG9zKilvdXRfcG9pbnRzICsgaSApOworCisgICAgICBpZiAoIGluX3BvaW50c1tyZWYxXS54ID4gaW5fcG9pbnRzW3JlZjJdLnggKQorICAgICAgeworICAgICAgICBwICAgID0gcmVmMTsKKyAgICAgICAgcmVmMSA9IHJlZjI7CisgICAgICAgIHJlZjIgPSBwOworICAgICAgfQorCisgICAgICBpbjEgID0gaW5fcG9pbnRzW3JlZjFdLng7CisgICAgICBpbjIgID0gaW5fcG9pbnRzW3JlZjJdLng7CisgICAgICBvdXQxID0gb3V0X3BvaW50c1tyZWYxXS54OworICAgICAgb3V0MiA9IG91dF9wb2ludHNbcmVmMl0ueDsKKyAgICAgIGQxICAgPSBvdXQxIC0gaW4xOworICAgICAgZDIgICA9IG91dDIgLSBpbjI7CisKKyAgICAgIGlmICggb3V0MSA9PSBvdXQyIHx8IGluMSA9PSBpbjIgKQorICAgICAgeworICAgICAgICBmb3IgKCBwID0gcDE7IHAgPD0gcDI7IHArKyApCisgICAgICAgIHsKKyAgICAgICAgICBvdXQgPSBpbl9wb2ludHNbcF0ueDsKKworICAgICAgICAgIGlmICggb3V0IDw9IGluMSApCisgICAgICAgICAgICBvdXQgKz0gZDE7CisgICAgICAgICAgZWxzZSBpZiAoIG91dCA+PSBpbjIgKQorICAgICAgICAgICAgb3V0ICs9IGQyOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dCA9IG91dDE7CisKKyAgICAgICAgICBvdXRfcG9pbnRzW3BdLnggPSBvdXQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgRlRfRml4ZWQgIHNjYWxlID0gRlRfRGl2Rml4KCBvdXQyIC0gb3V0MSwgaW4yIC0gaW4xICk7CisKKworICAgICAgICBmb3IgKCBwID0gcDE7IHAgPD0gcDI7IHArKyApCisgICAgICAgIHsKKyAgICAgICAgICBvdXQgPSBpbl9wb2ludHNbcF0ueDsKKworICAgICAgICAgIGlmICggb3V0IDw9IGluMSApCisgICAgICAgICAgICBvdXQgKz0gZDE7CisgICAgICAgICAgZWxzZSBpZiAoIG91dCA+PSBpbjIgKQorICAgICAgICAgICAgb3V0ICs9IGQyOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dCA9IG91dDEgKyBGVF9NdWxGaXgoIG91dCAtIGluMSwgc2NhbGUgKTsKKworICAgICAgICAgIG91dF9wb2ludHNbcF0ueCA9IG91dDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyogSW50ZXJwb2xhdGUgcG9pbnRzIHdpdGhvdXQgZGVsdGEgdmFsdWVzLCBzaW1pbGFyIHRvICovCisgIC8qIHRoZSBgSVVQJyBoaW50aW5nIGluc3RydWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAqLworCisgIC8qIG1vZGVsZWQgYWZ0ZXIgYEluc19JVVAgKi8KKworICBzdGF0aWMgdm9pZAorICB0dF9oYW5kbGVfZGVsdGFzKCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgIGluX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCogICAgIGhhc19kZWx0YSApCisgIHsKKyAgICBGVF9WZWN0b3IqICBvdXRfcG9pbnRzOworCisgICAgRlRfSW50ICBmaXJzdF9wb2ludDsKKyAgICBGVF9JbnQgIGVuZF9wb2ludDsKKworICAgIEZUX0ludCAgZmlyc3RfZGVsdGE7CisgICAgRlRfSW50ICBjdXJfZGVsdGE7CisKKyAgICBGVF9JbnQgICAgcG9pbnQ7CisgICAgRlRfU2hvcnQgIGNvbnRvdXI7CisKKworICAgIC8qIGlnbm9yZSBlbXB0eSBvdXRsaW5lcyAqLworICAgIGlmICggIW91dGxpbmUtPm5fY29udG91cnMgKQorICAgICAgcmV0dXJuOworCisgICAgb3V0X3BvaW50cyA9IG91dGxpbmUtPnBvaW50czsKKworICAgIGNvbnRvdXIgPSAwOworICAgIHBvaW50ICAgPSAwOworCisgICAgZG8KKyAgICB7CisgICAgICBlbmRfcG9pbnQgICA9IG91dGxpbmUtPmNvbnRvdXJzW2NvbnRvdXJdOworICAgICAgZmlyc3RfcG9pbnQgPSBwb2ludDsKKworICAgICAgLyogc2VhcmNoIGZpcnN0IHBvaW50IHRoYXQgaGFzIGEgZGVsdGEgKi8KKyAgICAgIHdoaWxlICggcG9pbnQgPD0gZW5kX3BvaW50ICYmICFoYXNfZGVsdGFbcG9pbnRdICkKKyAgICAgICAgcG9pbnQrKzsKKworICAgICAgaWYgKCBwb2ludCA8PSBlbmRfcG9pbnQgKQorICAgICAgeworICAgICAgICBmaXJzdF9kZWx0YSA9IHBvaW50OworICAgICAgICBjdXJfZGVsdGEgICA9IHBvaW50OworCisgICAgICAgIHBvaW50Kys7CisKKyAgICAgICAgd2hpbGUgKCBwb2ludCA8PSBlbmRfcG9pbnQgKQorICAgICAgICB7CisgICAgICAgICAgLyogc2VhcmNoIG5leHQgcG9pbnQgdGhhdCBoYXMgYSBkZWx0YSAgKi8KKyAgICAgICAgICAvKiBhbmQgaW50ZXJwb2xhdGUgaW50ZXJtZWRpYXRlIHBvaW50cyAqLworICAgICAgICAgIGlmICggaGFzX2RlbHRhW3BvaW50XSApCisgICAgICAgICAgeworICAgICAgICAgICAgdHRfZGVsdGFfaW50ZXJwb2xhdGUoIGN1cl9kZWx0YSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9kZWx0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BvaW50cyApOworICAgICAgICAgICAgY3VyX2RlbHRhID0gcG9pbnQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgcG9pbnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNoaWZ0IGNvbnRvdXIgaWYgd2Ugb25seSBoYXZlIGEgc2luZ2xlIGRlbHRhICovCisgICAgICAgIGlmICggY3VyX2RlbHRhID09IGZpcnN0X2RlbHRhICkKKyAgICAgICAgICB0dF9kZWx0YV9zaGlmdCggZmlyc3RfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2RlbHRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wb2ludHMgKTsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogb3RoZXJ3aXNlIGhhbmRsZSByZW1haW5pbmcgcG9pbnRzICAgICAgICovCisgICAgICAgICAgLyogYXQgdGhlIGVuZCBhbmQgYmVnaW5uaW5nIG9mIHRoZSBjb250b3VyICovCisgICAgICAgICAgdHRfZGVsdGFfaW50ZXJwb2xhdGUoIGN1cl9kZWx0YSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2RlbHRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9kZWx0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfcG9pbnRzICk7CisKKyAgICAgICAgICBpZiAoIGZpcnN0X2RlbHRhID4gMCApCisgICAgICAgICAgICB0dF9kZWx0YV9pbnRlcnBvbGF0ZSggZmlyc3RfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfZGVsdGEgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9kZWx0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9kZWx0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BvaW50cyApOworICAgICAgICB9CisgICAgICB9CisgICAgICBjb250b3VyKys7CisKKyAgICB9IHdoaWxlICggY29udG91ciA8IG91dGxpbmUtPm5fY29udG91cnMgKTsKKyAgfQorCisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfVmFyeV9HZXRfR2x5cGhfRGVsdGFzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIExvYWQgdGhlIGFwcHJvcHJpYXRlIGRlbHRhcyBmb3IgdGhlIGN1cnJlbnQgZ2x5cGguICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBcHBseSB0aGUgYXBwcm9wcmlhdGUgZGVsdGFzIHRvIHRoZSBjdXJyZW50IGdseXBoLiAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgKi8KQEAgLTEyOTEsMjIgKzE3NTIsMjQgQEAKICAgLyogICAgbl9wb2ludHMgICAgOjogVGhlIG51bWJlciBvZiB0aGUgcG9pbnRzIGluIHRoZSBnbHlwaCwgaW5jbHVkaW5nICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgIHBoYW50b20gcG9pbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRlbHRhcyAgICAgIDo6IFRoZSBhcnJheSBvZiBwb2ludHMgdG8gY2hhbmdlLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgb3V0bGluZSAgICAgOjogVGhlIG91dGxpbmUgdG8gY2hhbmdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKLSAgVFRfVmFyeV9HZXRfR2x5cGhfRGVsdGFzKCBUVF9GYWNlICAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgZ2x5cGhfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgKmRlbHRhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgbl9wb2ludHMgKQorICBUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyggVFRfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBuX3BvaW50cyApCiAgIHsKICAgICBGVF9TdHJlYW0gICBzdHJlYW0gPSBmYWNlLT5yb290LnN0cmVhbTsKICAgICBGVF9NZW1vcnkgICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKICAgICBHWF9CbGVuZCAgICBibGVuZCAgPSBmYWNlLT5ibGVuZDsKLSAgICBGVF9WZWN0b3IqICBkZWx0YV94eSA9IE5VTEw7CisKKyAgICBGVF9WZWN0b3IqICBwb2ludHNfb3JnID0gTlVMTDsKKyAgICBGVF9Cb29sKiAgICBoYXNfZGVsdGEgID0gTlVMTDsKIAogICAgIEZUX0Vycm9yICAgIGVycm9yOwogICAgIEZUX1VMb25nICAgIGdseXBoX3N0YXJ0OwpAQCAtMTMyNywxNSArMTc5MCwxOCBAQAogICAgIGlmICggIWZhY2UtPmRvYmxlbmQgfHwgYmxlbmQgPT0gTlVMTCApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKIAotICAgIC8qIHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIgKi8KLSAgICBpZiAoIEZUX05FV19BUlJBWSggZGVsdGFfeHksIG5fcG9pbnRzICkgKQotICAgICAgZ290byBFeGl0OwotICAgICpkZWx0YXMgPSBkZWx0YV94eTsKLQogICAgIGlmICggZ2x5cGhfaW5kZXggPj0gYmxlbmQtPmd2X2dseXBoY250ICAgICAgfHwKICAgICAgICAgIGJsZW5kLT5nbHlwaG9mZnNldHNbZ2x5cGhfaW5kZXhdID09CiAgICAgICAgICAgIGJsZW5kLT5nbHlwaG9mZnNldHNbZ2x5cGhfaW5kZXggKyAxXSApCi0gICAgICByZXR1cm4gRlRfRXJyX09rOyAgICAgICAgICAgICAgIC8qIG5vIHZhcmlhdGlvbiBkYXRhIGZvciB0aGlzIGdseXBoICovCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggIlRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzOiIKKyAgICAgICAgICAgICAgICAgICIgbm8gdmFyaWF0aW9uIGRhdGEgZm9yIHRoaXMgZ2x5cGhcbiIgKSk7CisgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgIH0KKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBwb2ludHNfb3JnLCBuX3BvaW50cyApIHx8CisgICAgICAgICBGVF9ORVdfQVJSQVkoIGhhc19kZWx0YSwgbl9wb2ludHMgKSAgKQorICAgICAgZ290byBGYWlsMTsKIAogICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGJsZW5kLT5nbHlwaG9mZnNldHNbZ2x5cGhfaW5kZXhdICkgICB8fAogICAgICAgICAgRlRfRlJBTUVfRU5URVIoIGJsZW5kLT5nbHlwaG9mZnNldHNbZ2x5cGhfaW5kZXggKyAxXSAtCkBAIC0xMzY3LDQxICsxODMzLDQzIEBACiAgICAgICBGVF9TdHJlYW1fU2Vla1NldCggc3RyZWFtLCBoZXJlICk7CiAgICAgfQogCi0gICAgZm9yICggaSA9IDA7IGkgPCAoIHR1cGxlQ291bnQgJiBHWF9UQ19UVVBMRV9DT1VOVF9NQVNLICk7ICsraSApCisgICAgRlRfVFJBQ0U1KCggImd2YXI6IHRoZXJlIGFyZSAlZCB0dXBsZXM6XG4iLCB0dXBsZUNvdW50ICkpOworCisgICAgZm9yICggaSA9IDA7IGkgPCAoIHR1cGxlQ291bnQgJiBHWF9UQ19UVVBMRV9DT1VOVF9NQVNLICk7IGkrKyApCiAgICAgewogICAgICAgRlRfVUludCAgIHR1cGxlRGF0YVNpemU7CiAgICAgICBGVF9VSW50ICAgdHVwbGVJbmRleDsKICAgICAgIEZUX0ZpeGVkICBhcHBseTsKIAogCisgICAgICBGVF9UUkFDRTYoKCAiICB0dXBsZSAlZDpcbiIsIGkgKSk7CisKICAgICAgIHR1cGxlRGF0YVNpemUgPSBGVF9HRVRfVVNIT1JUKCk7CiAgICAgICB0dXBsZUluZGV4ICAgID0gRlRfR0VUX1VTSE9SVCgpOwogCiAgICAgICBpZiAoIHR1cGxlSW5kZXggJiBHWF9USV9FTUJFRERFRF9UVVBMRV9DT09SRCApCiAgICAgICB7Ci0gICAgICAgIGZvciAoIGogPSAwOyBqIDwgYmxlbmQtPm51bV9heGlzOyArK2ogKQotICAgICAgICAgIHR1cGxlX2Nvb3Jkc1tqXSA9IEZUX0dFVF9TSE9SVCgpIDw8IDI7ICAvKiBjb252ZXJ0IGZyb20gICAgICAgICovCisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgYmxlbmQtPm51bV9heGlzOyBqKysgKQorICAgICAgICAgIHR1cGxlX2Nvb3Jkc1tqXSA9IEZUX0dFVF9TSE9SVCgpICogNDsgICAvKiBjb252ZXJ0IGZyb20gICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNob3J0IGZyYWMgdG8gZml4ZWQgKi8KICAgICAgIH0KICAgICAgIGVsc2UgaWYgKCAoIHR1cGxlSW5kZXggJiBHWF9USV9UVVBMRV9JTkRFWF9NQVNLICkgPj0gYmxlbmQtPnR1cGxlY291bnQgKQogICAgICAgewogICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7Ci0gICAgICAgIGdvdG8gRmFpbDM7CisgICAgICAgIGdvdG8gRmFpbDI7CiAgICAgICB9CiAgICAgICBlbHNlCi0gICAgICB7CiAgICAgICAgIEZUX01FTV9DT1BZKAogICAgICAgICAgIHR1cGxlX2Nvb3JkcywKLSAgICAgICAgICAmYmxlbmQtPnR1cGxlY29vcmRzWyh0dXBsZUluZGV4ICYgMHhGRkYpICogYmxlbmQtPm51bV9heGlzXSwKKyAgICAgICAgICAmYmxlbmQtPnR1cGxlY29vcmRzWyggdHVwbGVJbmRleCAmIDB4RkZGICkgKiBibGVuZC0+bnVtX2F4aXNdLAogICAgICAgICAgIGJsZW5kLT5udW1fYXhpcyAqIHNpemVvZiAoIEZUX0ZpeGVkICkgKTsKLSAgICAgIH0KIAogICAgICAgaWYgKCB0dXBsZUluZGV4ICYgR1hfVElfSU5URVJNRURJQVRFX1RVUExFICkKICAgICAgIHsKLSAgICAgICAgZm9yICggaiA9IDA7IGogPCBibGVuZC0+bnVtX2F4aXM7ICsraiApCi0gICAgICAgICAgaW1fc3RhcnRfY29vcmRzW2pdID0gRlRfR0VUX1NIT1JUKCkgPDwgMjsKLSAgICAgICAgZm9yICggaiA9IDA7IGogPCBibGVuZC0+bnVtX2F4aXM7ICsraiApCi0gICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tqXSA9IEZUX0dFVF9TSE9SVCgpIDw8IDI7CisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgYmxlbmQtPm51bV9heGlzOyBqKysgKQorICAgICAgICAgIGltX3N0YXJ0X2Nvb3Jkc1tqXSA9IEZUX0dFVF9TSE9SVCgpICogNDsKKyAgICAgICAgZm9yICggaiA9IDA7IGogPCBibGVuZC0+bnVtX2F4aXM7IGorKyApCisgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tqXSA9IEZUX0dFVF9TSE9SVCgpICogNDsKICAgICAgIH0KIAogICAgICAgYXBwbHkgPSBmdF92YXJfYXBwbHlfdHVwbGUoIGJsZW5kLApAQCAtMTQ0MywyNCArMTkxMSwxMDEgQEAKIAogICAgICAgZWxzZSBpZiAoIHBvaW50cyA9PSBBTExfUE9JTlRTICkKICAgICAgIHsKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICBpbnQgIGNvdW50ID0gMDsKKyNlbmRpZgorCisKKyAgICAgICAgRlRfVFJBQ0U3KCggIiAgICBwb2ludCBkZWx0YXM6XG4iICkpOworCiAgICAgICAgIC8qIHRoaXMgbWVhbnMgdGhhdCB0aGVyZSBhcmUgZGVsdGFzIGZvciBldmVyeSBwb2ludCBpbiB0aGUgZ2x5cGggKi8KLSAgICAgICAgZm9yICggaiA9IDA7IGogPCBuX3BvaW50czsgKytqICkKKyAgICAgICAgZm9yICggaiA9IDA7IGogPCBuX3BvaW50czsgaisrICkKICAgICAgICAgewotICAgICAgICAgIGRlbHRhX3h5W2pdLnggKz0gRlRfTXVsRml4KCBkZWx0YXNfeFtqXSwgYXBwbHkgKTsKLSAgICAgICAgICBkZWx0YV94eVtqXS55ICs9IEZUX011bEZpeCggZGVsdGFzX3lbal0sIGFwcGx5ICk7CisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICBGVF9WZWN0b3IgIHBvaW50X29yZyA9IG91dGxpbmUtPnBvaW50c1tqXTsKKyNlbmRpZgorCisKKyAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCArPSBGVF9NdWxGaXgoIGRlbHRhc194W2pdLCBhcHBseSApOworICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICs9IEZUX011bEZpeCggZGVsdGFzX3lbal0sIGFwcGx5ICk7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICAgIGlmICggKCBwb2ludF9vcmcueCAhPSBvdXRsaW5lLT5wb2ludHNbal0ueCApIHx8CisgICAgICAgICAgICAgICAoIHBvaW50X29yZy55ICE9IG91dGxpbmUtPnBvaW50c1tqXS55ICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1RSQUNFNygoICIgICAgICAlZDogKCVkLCAlZCkgLT4gKCVkLCAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBqLAorICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRfb3JnLngsCisgICAgICAgICAgICAgICAgICAgICAgICBwb2ludF9vcmcueSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS54LAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnkgKSk7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICB9CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICBpZiAoICFjb3VudCApCisgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgIG5vbmVcbiIgKSk7CisjZW5kaWYKICAgICAgIH0KIAogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHBvaW50X2NvdW50OyArK2ogKQorI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIGludCAgY291bnQgPSAwOworI2VuZGlmCisKKworICAgICAgICAvKiB3ZSBoYXZlIHRvIGludGVycG9sYXRlIHRoZSBtaXNzaW5nIGRlbHRhcyBzaW1pbGFyIHRvIHRoZSAqLworICAgICAgICAvKiBJVVAgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IG5fcG9pbnRzOyBqKysgKQogICAgICAgICB7Ci0gICAgICAgICAgaWYgKCBsb2NhbHBvaW50c1tqXSA+PSBuX3BvaW50cyApCisgICAgICAgICAgcG9pbnRzX29yZ1tqXSA9IG91dGxpbmUtPnBvaW50c1tqXTsKKyAgICAgICAgICBoYXNfZGVsdGFbal0gID0gRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHBvaW50X2NvdW50OyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVVNob3J0ICBpZHggPSBsb2NhbHBvaW50c1tqXTsKKworCisgICAgICAgICAgaWYgKCBpZHggPj0gbl9wb2ludHMgKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICBkZWx0YV94eVtsb2NhbHBvaW50c1tqXV0ueCArPSBGVF9NdWxGaXgoIGRlbHRhc194W2pdLCBhcHBseSApOwotICAgICAgICAgIGRlbHRhX3h5W2xvY2FscG9pbnRzW2pdXS55ICs9IEZUX011bEZpeCggZGVsdGFzX3lbal0sIGFwcGx5ICk7CisgICAgICAgICAgaGFzX2RlbHRhW2lkeF0gPSBUUlVFOworCisgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2lkeF0ueCArPSBGVF9NdWxGaXgoIGRlbHRhc194W2pdLCBhcHBseSApOworICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tpZHhdLnkgKz0gRlRfTXVsRml4KCBkZWx0YXNfeVtqXSwgYXBwbHkgKTsKICAgICAgICAgfQorCisgICAgICAgIC8qIG5vIG5lZWQgdG8gaGFuZGxlIHBoYW50b20gcG9pbnRzIGhlcmUsICAgICAgKi8KKyAgICAgICAgLyogc2luY2Ugc29saXRhcnkgcG9pbnRzIGNhbid0IGJlIGludGVycG9sYXRlZCAqLworICAgICAgICB0dF9oYW5kbGVfZGVsdGFzKCBvdXRsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNfb3JnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfZGVsdGEgKTsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIEZUX1RSQUNFNygoICIgICAgcG9pbnQgZGVsdGFzOlxuIiApKTsKKworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IG5fcG9pbnRzOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoICggcG9pbnRzX29yZ1tqXS54ICE9IG91dGxpbmUtPnBvaW50c1tqXS54ICkgfHwKKyAgICAgICAgICAgICAgICggcG9pbnRzX29yZ1tqXS55ICE9IG91dGxpbmUtPnBvaW50c1tqXS55ICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1RSQUNFNygoICIgICAgICAlZDogKCVkLCAlZCkgLT4gKCVkLCAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBqLAorICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzX29yZ1tqXS54LAorICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzX29yZ1tqXS55LAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLngsCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueSApKTsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhY291bnQgKQorICAgICAgICAgIEZUX1RSQUNFNygoICIgICAgICBub25lXG4iICkpOworI2VuZGlmCiAgICAgICB9CiAKICAgICAgIGlmICggbG9jYWxwb2ludHMgIT0gQUxMX1BPSU5UUyApCkBAIC0xNDczLDIyICsyMDE4LDE5IEBACiAgICAgICBGVF9TdHJlYW1fU2Vla1NldCggc3RyZWFtLCBoZXJlICk7CiAgICAgfQogCi0gIEZhaWwzOgorICAgIEZUX1RSQUNFNSgoICJcbiIgKSk7CisKKyAgRmFpbDI6CiAgICAgRlRfRlJFRSggdHVwbGVfY29vcmRzICk7CiAgICAgRlRfRlJFRSggaW1fc3RhcnRfY29vcmRzICk7CiAgICAgRlRfRlJFRSggaW1fZW5kX2Nvb3JkcyApOwogCi0gIEZhaWwyOgogICAgIEZUX0ZSQU1FX0VYSVQoKTsKIAogICBGYWlsMToKLSAgICBpZiAoIGVycm9yICkKLSAgICB7Ci0gICAgICBGVF9GUkVFKCBkZWx0YV94eSApOwotICAgICAgKmRlbHRhcyA9IE5VTEw7Ci0gICAgfQorICAgIEZUX0ZSRUUoIHBvaW50c19vcmcgKTsKKyAgICBGVF9GUkVFKCBoYXNfZGVsdGEgKTsKIAotICBFeGl0OgogICAgIHJldHVybiBlcnJvcjsKICAgfQogCkBAIC0xNDk5LDcgKzIwNDEsNyBAQAogICAvKiAgICB0dF9kb25lX2JsZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlcyB0aGUgYmxlbmQgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZSB0aGUgYmxlbmQgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQogICB0dF9kb25lX2JsZW5kKCBGVF9NZW1vcnkgIG1lbW9yeSwKQEAgLTE1MTUsNyArMjA1Nyw3IEBACiAKICAgICAgIGlmICggYmxlbmQtPmF2YXJfc2VnbWVudCAhPSBOVUxMICkKICAgICAgIHsKLSAgICAgICAgZm9yICggaSA9IDA7IGkgPCBibGVuZC0+bnVtX2F4aXM7ICsraSApCisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgYmxlbmQtPm51bV9heGlzOyBpKysgKQogICAgICAgICAgIEZUX0ZSRUUoIGJsZW5kLT5hdmFyX3NlZ21lbnRbaV0uY29ycmVzcG9uZGVuY2UgKTsKICAgICAgICAgRlRfRlJFRSggYmxlbmQtPmF2YXJfc2VnbWVudCApOwogICAgICAgfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0Z3h2YXIuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dGd4dmFyLmgKaW5kZXggODJkZmM0NC4uMDYwZDRkNiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0Z3h2YXIuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRneHZhci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIEdYIEZvbnQgVmFyaWF0aW9uIGxvYWRlciAoc3BlY2lmaWNhdGlvbikgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcgYW5kIEdlb3JnZSBXaWxsaWFtcy4gICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNjIsMTAgKzE2MiwxMCBAQAogCiAKICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKLSAgVFRfVmFyeV9HZXRfR2x5cGhfRGVsdGFzKCBUVF9GYWNlICAgICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgZ2x5cGhfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgKmRlbHRhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgbl9wb2ludHMgKTsKKyAgVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXMoIFRUX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgbl9wb2ludHMgKTsKIAogCiAgIEZUX0xPQ0FMKCB2b2lkICkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dGludGVycC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMKaW5kZXggNmJkZmZiYy4uYWUyYTgyYSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMKQEAgLTQsOCArNCw4IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGJ5IERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCiAvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwpAQCAtNDQsNiArNDQsNyBAQAogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90dGludGVycAogCisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBJbiBvcmRlciB0byBkZXRlY3QgaW5maW5pdGUgbG9vcHMgaW4gdGhlIGNvZGUsIHdlIHNldCB1cCBhIGNvdW50ZXIgICAgKi8KQEAgLTUzLDE3NCArNTQsMzAgQEAKICNkZWZpbmUgTUFYX1JVTk5BQkxFX09QQ09ERVMgIDEwMDAwMDBMCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgaW1wbGVtZW50YXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogYS4gc3RhdGljIGltcGxlbWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dCBpcyBhIHN0YXRpYyB2YXJpYWJsZSwgd2hpY2ggZmllbGRzICAgKi8KLSAgLyogICAgYXJlIGFjY2Vzc2VkIGRpcmVjdGx5IGJ5IHRoZSBpbnRlcnByZXRlciBkdXJpbmcgZXhlY3V0aW9uLiAgVGhlICAgICovCi0gIC8qICAgIGNvbnRleHQgaXMgbmFtZWQgYGN1cicuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyB2ZXJzaW9uIGlzIG5vbi1yZWVudHJhbnQsIG9mIGNvdXJzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBiLiBpbmRpcmVjdCBpbXBsZW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBjdXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0IGlzIHBhc3NlZCB0byBfZWFjaF8gZnVuY3Rpb24gYXMgaXRzICAqLwotICAvKiAgICBmaXJzdCBhcmd1bWVudCwgYW5kIGVhY2ggZmllbGQgaXMgdGh1cyBhY2Nlc3NlZCBpbmRpcmVjdGx5LiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgdmVyc2lvbiBpcyBmdWxseSByZS1lbnRyYW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIGlkZWEgaXMgdGhhdCBhbiBpbmRpcmVjdCBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgc2xvd2VyIHRvIGV4ZWN1dGUgICovCi0gIC8qIG9uIGxvdy1lbmQgcHJvY2Vzc29ycyB0aGF0IGFyZSB1c2VkIGluIHNvbWUgc3lzdGVtcyAobGlrZSAzODZzIG9yICAgICAqLwotICAvKiBldmVuIDQ4NnMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEFzIGEgY29uc2VxdWVuY2UsIHRoZSBpbmRpcmVjdCBpbXBsZW1lbnRhdGlvbiBpcyBub3cgdGhlIGRlZmF1bHQsIGFzICAqLwotICAvKiBpdHMgcGVyZm9ybWFuY2UgY29zdHMgY2FuIGJlIGNvbnNpZGVyZWQgbmVnbGlnaWJsZSBpbiBvdXIgY29udGV4dC4gICAgKi8KLSAgLyogTm90ZSwgaG93ZXZlciwgdGhhdCB3ZSBrZXB0IHRoZSBzYW1lIHNvdXJjZSB3aXRoIG1hY3JvcyBiZWNhdXNlOiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIFRoZSBjb2RlIGlzIGtlcHQgdmVyeSBjbG9zZSBpbiBkZXNpZ24gdG8gdGhlIFBhc2NhbCBjb2RlIHVzZWQgZm9yICAgKi8KLSAgLyogICBkZXZlbG9wbWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIEl0J3MgbXVjaCBtb3JlIHJlYWRhYmxlIHRoYXQgd2F5ISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0gSXQncyBzdGlsbCBvcGVuIHRvIGV4cGVyaW1lbnRhdGlvbiBhbmQgdHVuaW5nLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBUVF9DT05GSUdfT1BUSU9OX1NUQVRJQ19JTlRFUlBSRVRFUiAgICAgLyogaW5kaXJlY3QgaW1wbGVtZW50YXRpb24gKi8KLQotI2RlZmluZSBDVVIgICgqZXhjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VlIHR0b2Jqcy5oICovCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIG1hY3JvIGlzIHVzZWQgd2hlbmV2ZXIgYGV4ZWMnIGlzIHVudXNlZCBpbiBhIGZ1bmN0aW9uLCB0byBhdm9pZCAgKi8KLSAgLyogc3R1cGlkIHdhcm5pbmdzIGZyb20gcGVkYW50aWMgY29tcGlsZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGVF9VTlVTRURfRVhFQyAgRlRfVU5VU0VEKCBleGMgKQotCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0aWMgaW1wbGVtZW50YXRpb24gKi8KLQotI2RlZmluZSBDVVIgIGN1cgotCi0jZGVmaW5lIEZUX1VOVVNFRF9FWEVDICBpbnQgIF9fZHVtbXkgPSBfX2R1bW15Ci0KLSAgc3RhdGljCi0gIFRUX0V4ZWNDb250ZXh0UmVjICBjdXI7ICAgLyogc3RhdGljIGV4ZWMuIGNvbnRleHQgdmFyaWFibGUgKi8KLQotICAvKiBhcHBhcmVudGx5LCB3ZSBoYXZlIGEgX2xvdF8gb2YgZGlyZWN0IGluZGV4aW5nIHdoZW4gYWNjZXNzaW5nICAqLwotICAvKiB0aGUgc3RhdGljIGBjdXInLCB3aGljaCBtYWtlcyB0aGUgY29kZSBiaWdnZXIgKGR1ZSB0byBhbGwgdGhlICAqLwotICAvKiBmb3VyIGJ5dGVzIGFkZHJlc3NlcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVEFUSUNfSU5URVJQUkVURVIgKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIGluc3RydWN0aW9uIGFyZ3VtZW50IHN0YWNrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBJTlNfQVJHICBFWEVDX09QXyBGVF9Mb25nKiAgYXJncyAgICAvKiBzZWUgdHRvYmpzLmggZm9yIEVYRUNfT1BfICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgbWFjcm8gaXMgdXNlZCB3aGVuZXZlciBgYXJncycgaXMgdW51c2VkIGluIGEgZnVuY3Rpb24sIHRvIGF2b2lkICAqLwotICAvKiBzdHVwaWQgd2FybmluZ3MgZnJvbSBwZWRhbnRpYyBjb21waWxlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZUX1VOVVNFRF9BUkcgIEZUX1VOVVNFRF9FWEVDOyBGVF9VTlVTRUQoIGFyZ3MgKQotCi0KLSNkZWZpbmUgU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCAoKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggQ1VSLmZhY2UgKSktPmludGVycHJldGVyX3ZlcnNpb24gPT0gXAorI2RlZmluZSBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZXhjLT5mYWNlICkpLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFwKICAgICAgICAgICAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggKQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBoaWRlIHRoZSB1c2Ugb2YgRVhFQ19BUkcgYW5kIEVYRUNfQVJHXyB0byAgICAgICAgKi8KLSAgLyogaW5jcmVhc2UgcmVhZGFiaWxpdHkgb2YgdGhlIGNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUFJPSkVDVCggdjEsIHYyICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZXhjLT5mdW5jX3Byb2plY3QoIGV4YywgKHYxKS0+eCAtICh2MiktPngsICh2MSktPnkgLSAodjIpLT55ICkKIAorI2RlZmluZSBEVUFMUFJPSiggdjEsIHYyICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZXhjLT5mdW5jX2R1YWxwcm9qKCBleGMsICh2MSktPnggLSAodjIpLT54LCAodjEpLT55IC0gKHYyKS0+eSApCiAKLSNkZWZpbmUgU0tJUF9Db2RlKCkgXAotICAgICAgICAgIFNraXBDb2RlKCBFWEVDX0FSRyApCisjZGVmaW5lIEZBU1RfUFJPSkVDVCggdiApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZXhjLT5mdW5jX3Byb2plY3QoIGV4YywgKHYpLT54LCAodiktPnkgKQogCi0jZGVmaW5lIEdFVF9TaG9ydElucygpIFwKLSAgICAgICAgICBHZXRTaG9ydElucyggRVhFQ19BUkcgKQotCi0jZGVmaW5lIE5PUk1hbGl6ZSggeCwgeSwgdiApIFwKLSAgICAgICAgICBOb3JtYWxpemUoIEVYRUNfQVJHXyB4LCB5LCB2ICkKLQotI2RlZmluZSBTRVRfU3VwZXJSb3VuZCggc2NhbGUsIGZsYWdzICkgXAotICAgICAgICAgIFNldFN1cGVyUm91bmQoIEVYRUNfQVJHXyBzY2FsZSwgZmxhZ3MgKQotCi0jZGVmaW5lIFJPVU5EX05vbmUoIGQsIGMgKSBcCi0gICAgICAgICAgUm91bmRfTm9uZSggRVhFQ19BUkdfIGQsIGMgKQotCi0jZGVmaW5lIElOU19Hb3RvX0NvZGVSYW5nZSggcmFuZ2UsIGlwICkgXAotICAgICAgICAgIEluc19Hb3RvX0NvZGVSYW5nZSggRVhFQ19BUkdfIHJhbmdlLCBpcCApCi0KLSNkZWZpbmUgQ1VSX0Z1bmNfbW92ZSggeiwgcCwgZCApIFwKLSAgICAgICAgICBDVVIuZnVuY19tb3ZlKCBFWEVDX0FSR18geiwgcCwgZCApCi0KLSNkZWZpbmUgQ1VSX0Z1bmNfbW92ZV9vcmlnKCB6LCBwLCBkICkgXAotICAgICAgICAgIENVUi5mdW5jX21vdmVfb3JpZyggRVhFQ19BUkdfIHosIHAsIGQgKQotCi0jZGVmaW5lIENVUl9GdW5jX3JvdW5kKCBkLCBjICkgXAotICAgICAgICAgIENVUi5mdW5jX3JvdW5kKCBFWEVDX0FSR18gZCwgYyApCi0KLSNkZWZpbmUgQ1VSX0Z1bmNfY3VyX3BwZW0oKSBcCi0gICAgICAgICAgQ1VSLmZ1bmNfY3VyX3BwZW0oIEVYRUNfQVJHICkKLQotI2RlZmluZSBDVVJfRnVuY19yZWFkX2N2dCggaW5kZXggKSBcCi0gICAgICAgICAgQ1VSLmZ1bmNfcmVhZF9jdnQoIEVYRUNfQVJHXyBpbmRleCApCi0KLSNkZWZpbmUgQ1VSX0Z1bmNfd3JpdGVfY3Z0KCBpbmRleCwgdmFsICkgXAotICAgICAgICAgIENVUi5mdW5jX3dyaXRlX2N2dCggRVhFQ19BUkdfIGluZGV4LCB2YWwgKQotCi0jZGVmaW5lIENVUl9GdW5jX21vdmVfY3Z0KCBpbmRleCwgdmFsICkgXAotICAgICAgICAgIENVUi5mdW5jX21vdmVfY3Z0KCBFWEVDX0FSR18gaW5kZXgsIHZhbCApCi0KLSNkZWZpbmUgQ1VSUkVOVF9SYXRpbygpIFwKLSAgICAgICAgICBDdXJyZW50X1JhdGlvKCBFWEVDX0FSRyApCi0KLSNkZWZpbmUgSU5TX1N4VlRMKCBhLCBiLCBjLCBkICkgXAotICAgICAgICAgIEluc19TeFZUTCggRVhFQ19BUkdfIGEsIGIsIGMsIGQgKQotCi0jZGVmaW5lIENPTVBVVEVfRnVuY3MoKSBcCi0gICAgICAgICAgQ29tcHV0ZV9GdW5jcyggRVhFQ19BUkcgKQotCi0jZGVmaW5lIENPTVBVVEVfUm91bmQoIGEgKSBcCi0gICAgICAgICAgQ29tcHV0ZV9Sb3VuZCggRVhFQ19BUkdfIGEgKQotCi0jZGVmaW5lIENPTVBVVEVfUG9pbnRfRGlzcGxhY2VtZW50KCBhLCBiLCBjLCBkICkgXAotICAgICAgICAgIENvbXB1dGVfUG9pbnRfRGlzcGxhY2VtZW50KCBFWEVDX0FSR18gYSwgYiwgYywgZCApCi0KLSNkZWZpbmUgTU9WRV9acDJfUG9pbnQoIGEsIGIsIGMsIHQgKSBcCi0gICAgICAgICAgTW92ZV9acDJfUG9pbnQoIEVYRUNfQVJHXyBhLCBiLCBjLCB0ICkKLQotCi0jZGVmaW5lIENVUl9GdW5jX3Byb2plY3QoIHYxLCB2MiApICBcCi0gICAgICAgICAgQ1VSLmZ1bmNfcHJvamVjdCggRVhFQ19BUkdfICh2MSktPnggLSAodjIpLT54LCAodjEpLT55IC0gKHYyKS0+eSApCi0KLSNkZWZpbmUgQ1VSX0Z1bmNfZHVhbHByb2ooIHYxLCB2MiApICBcCi0gICAgICAgICAgQ1VSLmZ1bmNfZHVhbHByb2ooIEVYRUNfQVJHXyAodjEpLT54IC0gKHYyKS0+eCwgKHYxKS0+eSAtICh2MiktPnkgKQotCi0jZGVmaW5lIENVUl9mYXN0X3Byb2plY3QoIHYgKSBcCi0gICAgICAgICAgQ1VSLmZ1bmNfcHJvamVjdCggRVhFQ19BUkdfICh2KS0+eCwgKHYpLT55ICkKLQotI2RlZmluZSBDVVJfZmFzdF9kdWFscHJvaiggdiApIFwKLSAgICAgICAgICBDVVIuZnVuY19kdWFscHJvaiggRVhFQ19BUkdfICh2KS0+eCwgKHYpLT55ICkKKyNkZWZpbmUgRkFTVF9EVUFMUFJPSiggdiApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZXhjLT5mdW5jX2R1YWxwcm9qKCBleGMsICh2KS0+eCwgKHYpLT55ICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogSW5zdHJ1Y3Rpb24gZGlzcGF0Y2ggZnVuY3Rpb24sIGFzIHVzZWQgYnkgdGhlIGludGVycHJldGVyLiAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB0eXBlZGVmIHZvaWQgICgqVEluc3RydWN0aW9uX0Z1bmN0aW9uKSggSU5TX0FSRyApOworICB0eXBlZGVmIHZvaWQgICgqVEluc3RydWN0aW9uX0Z1bmN0aW9uKSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICk7CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIzMCwxMyArODcsNiBAQAogI2RlZmluZSBCT1VORFMoIHgsIG4gKSAgICggKEZUX1VJbnQpKHgpICA+PSAoRlRfVUludCkobikgICkKICNkZWZpbmUgQk9VTkRTTCggeCwgbiApICAoIChGVF9VTG9uZykoeCkgPj0gKEZUX1VMb25nKShuKSApCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIG1hY3JvIGNvbXB1dGVzIChhKjJeMTQpL2IgYW5kIGNvbXBsZW1lbnRzIFRUX011bEZpeDE0LiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRUX0RpdkZpeDE0KCBhLCBiICkgXAotICAgICAgICAgIEZUX0RpdkZpeCggYSwgKGIpIDw8IDIgKQotCiAKICN1bmRlZiAgU1VDQ0VTUwogI2RlZmluZSBTVUNDRVNTICAwCkBAIC0yNDUsMTYgKzk1LDIwIEBACiAjZGVmaW5lIEZBSUxVUkUgIDEKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0jZGVmaW5lIEdVRVNTX1ZFQ1RPUiggViApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICggQ1VSLmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ1VSLkdTLlYueCA9IChGVF9GMkRvdDE0KSggQ1VSLkdTLmJvdGhfeF9heGlzID8gMHg0MDAwIDogMCApOyBcCi0gICAgQ1VSLkdTLlYueSA9IChGVF9GMkRvdDE0KSggQ1VSLkdTLmJvdGhfeF9heGlzID8gMCA6IDB4NDAwMCApOyBcCi0gIH0KKyNkZWZpbmUgR1VFU1NfVkVDVE9SKCBWICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZXhjLT5HUy5WLnggPSAoRlRfRjJEb3QxNCkoIGV4Yy0+R1MuYm90aF94X2F4aXMgPyAweDQwMDAgOiAwICk7IFwKKyAgICAgIGV4Yy0+R1MuVi55ID0gKEZUX0YyRG90MTQpKCBleGMtPkdTLmJvdGhfeF9heGlzID8gMCA6IDB4NDAwMCApOyBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgR1VFU1NfVkVDVE9SKCBWICkKKyNkZWZpbmUgR1VFU1NfVkVDVE9SKCBWICkgIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgIENPREVSQU5HRSBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI5Nyw3ICsxNTEsNyBAQAogICAgIC8qICAgICAgIHdoaWNoIHdpbGwgcmV0dXJuIHRvIHRoZSBmaXJzdCBieXRlICphZnRlciogdGhlIGNvZGUgICAgKi8KICAgICAvKiAgICAgICByYW5nZSwgd2UgdGVzdCBmb3IgSVAgPD0gU2l6ZSBpbnN0ZWFkIG9mIElQIDwgU2l6ZS4gICAgICovCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEZUX0FTU0VSVCggKEZUX1VMb25nKUlQIDw9IGNvZGVyYW5nZS0+c2l6ZSApOworICAgIEZUX0FTU0VSVCggSVAgPD0gY29kZXJhbmdlLT5zaXplICk7CiAKICAgICBleGVjLT5jb2RlICAgICA9IGNvZGVyYW5nZS0+YmFzZTsKICAgICBleGVjLT5jb2RlU2l6ZSA9IGNvZGVyYW5nZS0+c2l6ZTsKQEAgLTQ5OCw3ICszNTIsNyBAQAogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgVXBkYXRlX01heCggRlRfTWVtb3J5ICBtZW1vcnksCiAgICAgICAgICAgICAgIEZUX1VMb25nKiAgc2l6ZSwKLSAgICAgICAgICAgICAgRlRfTG9uZyAgICBtdWx0aXBsaWVyLAorICAgICAgICAgICAgICBGVF9VTG9uZyAgIG11bHRpcGxpZXIsCiAgICAgICAgICAgICAgIHZvaWQqICAgICAgX3BidWZmLAogICAgICAgICAgICAgICBGVF9VTG9uZyAgIG5ld19tYXggKQogICB7CkBAIC01OTEsMTMgKzQ0NSwxMyBAQAogCiAgICAgLyogWFhYOiBXZSByZXNlcnZlIGEgbGl0dGxlIG1vcmUgZWxlbWVudHMgb24gdGhlIHN0YWNrIHRvIGRlYWwgc2FmZWx5ICovCiAgICAgLyogICAgICB3aXRoIGJyb2tlbiBmb250cyBsaWtlIGFyaWFsYnMsIGNvdXJicywgdGltZXNicywgZXRjLiAgICAgICAgICovCi0gICAgdG1wID0gZXhlYy0+c3RhY2tTaXplOworICAgIHRtcCA9IChGVF9VTG9uZylleGVjLT5zdGFja1NpemU7CiAgICAgZXJyb3IgPSBVcGRhdGVfTWF4KCBleGVjLT5tZW1vcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggRlRfRjI2RG90NiApLAogICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKSZleGVjLT5zdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgIG1heHAtPm1heFN0YWNrRWxlbWVudHMgKyAzMiApOwotICAgIGV4ZWMtPnN0YWNrU2l6ZSA9IChGVF9VSW50KXRtcDsKKyAgICBleGVjLT5zdGFja1NpemUgPSAoRlRfTG9uZyl0bXA7CiAgICAgaWYgKCBlcnJvciApCiAgICAgICByZXR1cm4gZXJyb3I7CiAKQEAgLTY4MywxMiArNTM3LDggQEAKICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFRydWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE9ubHkgdGhlIGdseXBoIGxvYWRlciBhbmQgZGVidWdnZXIgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbi4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCi0gIFRUX1J1bl9Db250ZXh0KCBUVF9FeGVjQ29udGV4dCAgZXhlYywKLSAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgICBkZWJ1ZyApCisgIFRUX1J1bl9Db250ZXh0KCBUVF9FeGVjQ29udGV4dCAgZXhlYyApCiAgIHsKICAgICBUVF9Hb3RvX0NvZGVSYW5nZSggZXhlYywgdHRfY29kZXJhbmdlX2dseXBoLCAwICk7CiAKQEAgLTcxOCwxNiArNTY4LDcgQEAKICAgICBleGVjLT50b3AgICAgID0gMDsKICAgICBleGVjLT5jYWxsVG9wID0gMDsKIAotI2lmIDEKLSAgICBGVF9VTlVTRUQoIGRlYnVnICk7Ci0KICAgICByZXR1cm4gZXhlYy0+ZmFjZS0+aW50ZXJwcmV0ZXIoIGV4ZWMgKTsKLSNlbHNlCi0gICAgaWYgKCAhZGVidWcgKQotICAgICAgcmV0dXJuIFRUX1J1bklucyggZXhlYyApOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBGVF9FcnJfT2s7Ci0jZW5kaWYKICAgfQogCiAKQEAgLTc2MSw2ICs2MDIsOSBAQAogICBUVF9OZXdfQ29udGV4dCggVFRfRHJpdmVyICBkcml2ZXIgKQogICB7CiAgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKworICAgIFRUX0V4ZWNDb250ZXh0ICBleGVjID0gTlVMTDsKIAogCiAgICAgaWYgKCAhZHJpdmVyICkKQEAgLTc2OCwyNiArNjEyLDE2IEBACiAKICAgICBtZW1vcnkgPSBkcml2ZXItPnJvb3Qucm9vdC5tZW1vcnk7CiAKLSAgICBpZiAoICFkcml2ZXItPmNvbnRleHQgKQotICAgIHsKLSAgICAgIEZUX0Vycm9yICAgICAgICBlcnJvcjsKLSAgICAgIFRUX0V4ZWNDb250ZXh0ICBleGVjOworICAgIC8qIGFsbG9jYXRlIG9iamVjdCAqLworICAgIGlmICggRlRfTkVXKCBleGVjICkgKQorICAgICAgZ290byBGYWlsOwogCisgICAgLyogaW5pdGlhbGl6ZSBpdDsgaW4gY2FzZSBvZiBlcnJvciB0aGlzIGRlYWxsb2NhdGVzIGBleGVjJyB0b28gKi8KKyAgICBlcnJvciA9IEluaXRfQ29udGV4dCggZXhlYywgbWVtb3J5ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICBnb3RvIEZhaWw7CiAKLSAgICAgIC8qIGFsbG9jYXRlIG9iamVjdCAqLwotICAgICAgaWYgKCBGVF9ORVcoIGV4ZWMgKSApCi0gICAgICAgIGdvdG8gRmFpbDsKLQotICAgICAgLyogaW5pdGlhbGl6ZSBpdDsgaW4gY2FzZSBvZiBlcnJvciB0aGlzIGRlYWxsb2NhdGVzIGBleGVjJyB0b28gKi8KLSAgICAgIGVycm9yID0gSW5pdF9Db250ZXh0KCBleGVjLCBtZW1vcnkgKTsKLSAgICAgIGlmICggZXJyb3IgKQotICAgICAgICBnb3RvIEZhaWw7Ci0KLSAgICAgIC8qIHN0b3JlIGl0IGludG8gdGhlIGRyaXZlciAqLwotICAgICAgZHJpdmVyLT5jb250ZXh0ID0gZXhlYzsKLSAgICB9Ci0KLSAgICByZXR1cm4gZHJpdmVyLT5jb250ZXh0OworICAgIHJldHVybiBleGVjOwogCiAgIEZhaWw6CiAgICAgcmV0dXJuIE5VTEw7CkBAIC04MzQsOCArNjY4LDggQEAKICAgICAvKiAgU0Z2VEwgKyAgICovICBQQUNLKCAyLCAwICksCiAgICAgLyogIFNQdkZTICAgICAqLyAgUEFDSyggMiwgMCApLAogICAgIC8qICBTRnZGUyAgICAgKi8gIFBBQ0soIDIsIDAgKSwKLSAgICAvKiAgR1BWICAgICAgICovICBQQUNLKCAwLCAyICksCi0gICAgLyogIEdGViAgICAgICAqLyAgUEFDSyggMCwgMiApLAorICAgIC8qICBHUHYgICAgICAgKi8gIFBBQ0soIDAsIDIgKSwKKyAgICAvKiAgR0Z2ICAgICAgICovICBQQUNLKCAwLCAyICksCiAgICAgLyogIFNGdlRQdiAgICAqLyAgUEFDSyggMCwgMCApLAogICAgIC8qICBJU0VDVCAgICAgKi8gIFBBQ0soIDUsIDAgKSwKIApAQCAtOTY0LDggKzc5OCw4IEBACiAgICAgLyogIElOU18kODMgICAqLyAgUEFDSyggMCwgMCApLAogICAgIC8qICBJTlNfJDg0ICAgKi8gIFBBQ0soIDAsIDAgKSwKICAgICAvKiAgU2NhbkNUUkwgICovICBQQUNLKCAxLCAwICksCi0gICAgLyogIFNEUFZUTFswXSAqLyAgUEFDSyggMiwgMCApLAotICAgIC8qICBTRFBWVExbMV0gKi8gIFBBQ0soIDIsIDAgKSwKKyAgICAvKiAgU0RQdlRMWzBdICovICBQQUNLKCAyLCAwICksCisgICAgLyogIFNEUHZUTFsxXSAqLyAgUEFDSyggMiwgMCApLAogICAgIC8qICBHZXRJTkZPICAgKi8gIFBBQ0soIDEsIDEgKSwKICAgICAvKiAgSURFRiAgICAgICovICBQQUNLKCAxLCAwICksCiAgICAgLyogIFJPTEwgICAgICAqLyAgUEFDSyggMywgMyApLApAQCAtMTA5OCwyODAgKzkzMiwyODQgQEAKIAogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCiAKKyAgLyogdGhlIGZpcnN0IGhleCBkaWdpdCBnaXZlcyB0aGUgbGVuZ3RoIG9mIHRoZSBvcGNvZGUgbmFtZTsgdGhlIHNwYWNlICovCisgIC8qIGFmdGVyIHRoZSBkaWdpdCBpcyBoZXJlIGp1c3QgdG8gaW5jcmVhc2UgcmVhZGFiaWxpdHkgb2YgdGhlIHNvdXJjZSAqLworICAvKiBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwogICBzdGF0aWMKICAgY29uc3QgY2hhciogIGNvbnN0IG9wY29kZV9uYW1lWzI1Nl0gPQogICB7Ci0gICAgIlNWVENBIHkiLAotICAgICJTVlRDQSB4IiwKLSAgICAiU1B2VENBIHkiLAotICAgICJTUHZUQ0EgeCIsCi0gICAgIlNGdlRDQSB5IiwKLSAgICAiU0Z2VENBIHgiLAotICAgICJTUHZUTCB8fCIsCi0gICAgIlNQdlRMICsiLAotICAgICJTRnZUTCB8fCIsCi0gICAgIlNGdlRMICsiLAotICAgICJTUHZGUyIsCi0gICAgIlNGdkZTIiwKLSAgICAiR1BWIiwKLSAgICAiR0ZWIiwKLSAgICAiU0Z2VFB2IiwKLSAgICAiSVNFQ1QiLAorICAgICI3IFNWVENBIHkiLAorICAgICI3IFNWVENBIHgiLAorICAgICI4IFNQdlRDQSB5IiwKKyAgICAiOCBTUHZUQ0EgeCIsCisgICAgIjggU0Z2VENBIHkiLAorICAgICI4IFNGdlRDQSB4IiwKKyAgICAiOCBTUHZUTCB8fCIsCisgICAgIjcgU1B2VEwgKyIsCisgICAgIjggU0Z2VEwgfHwiLAorICAgICI3IFNGdlRMICsiLAorICAgICI1IFNQdkZTIiwKKyAgICAiNSBTRnZGUyIsCisgICAgIjMgR1B2IiwKKyAgICAiMyBHRnYiLAorICAgICI2IFNGdlRQdiIsCisgICAgIjUgSVNFQ1QiLAogCi0gICAgIlNSUDAiLAotICAgICJTUlAxIiwKLSAgICAiU1JQMiIsCi0gICAgIlNaUDAiLAotICAgICJTWlAxIiwKLSAgICAiU1pQMiIsCi0gICAgIlNaUFMiLAotICAgICJTTE9PUCIsCi0gICAgIlJURyIsCi0gICAgIlJUSEciLAotICAgICJTTUQiLAotICAgICJFTFNFIiwKLSAgICAiSk1QUiIsCi0gICAgIlNDdlRDaSIsCi0gICAgIlNTd0NpIiwKLSAgICAiU1NXIiwKKyAgICAiNCBTUlAwIiwKKyAgICAiNCBTUlAxIiwKKyAgICAiNCBTUlAyIiwKKyAgICAiNCBTWlAwIiwKKyAgICAiNCBTWlAxIiwKKyAgICAiNCBTWlAyIiwKKyAgICAiNCBTWlBTIiwKKyAgICAiNSBTTE9PUCIsCisgICAgIjMgUlRHIiwKKyAgICAiNCBSVEhHIiwKKyAgICAiMyBTTUQiLAorICAgICI0IEVMU0UiLAorICAgICI0IEpNUFIiLAorICAgICI2IFNDdlRDaSIsCisgICAgIjUgU1N3Q2kiLAorICAgICIzIFNTVyIsCiAKLSAgICAiRFVQIiwKLSAgICAiUE9QIiwKLSAgICAiQ0xFQVIiLAotICAgICJTV0FQIiwKLSAgICAiREVQVEgiLAotICAgICJDSU5ERVgiLAotICAgICJNSU5ERVgiLAotICAgICJBbGlnblBUUyIsCi0gICAgIklOU18kMjgiLAotICAgICJVVFAiLAotICAgICJMT09QQ0FMTCIsCi0gICAgIkNBTEwiLAotICAgICJGREVGIiwKLSAgICAiRU5ERiIsCi0gICAgIk1EQVBbMF0iLAotICAgICJNREFQWzFdIiwKKyAgICAiMyBEVVAiLAorICAgICIzIFBPUCIsCisgICAgIjUgQ0xFQVIiLAorICAgICI0IFNXQVAiLAorICAgICI1IERFUFRIIiwKKyAgICAiNiBDSU5ERVgiLAorICAgICI2IE1JTkRFWCIsCisgICAgIjggQWxpZ25QVFMiLAorICAgICI3IElOU18kMjgiLAorICAgICIzIFVUUCIsCisgICAgIjggTE9PUENBTEwiLAorICAgICI0IENBTEwiLAorICAgICI0IEZERUYiLAorICAgICI0IEVOREYiLAorICAgICI3IE1EQVBbMF0iLAorICAgICI3IE1EQVBbMV0iLAogCi0gICAgIklVUFswXSIsCi0gICAgIklVUFsxXSIsCi0gICAgIlNIUFswXSIsCi0gICAgIlNIUFsxXSIsCi0gICAgIlNIQ1swXSIsCi0gICAgIlNIQ1sxXSIsCi0gICAgIlNIWlswXSIsCi0gICAgIlNIWlsxXSIsCi0gICAgIlNIUElYIiwKLSAgICAiSVAiLAotICAgICJNU0lSUFswXSIsCi0gICAgIk1TSVJQWzFdIiwKLSAgICAiQWxpZ25SUCIsCi0gICAgIlJUREciLAotICAgICJNSUFQWzBdIiwKLSAgICAiTUlBUFsxXSIsCisgICAgIjYgSVVQWzBdIiwKKyAgICAiNiBJVVBbMV0iLAorICAgICI2IFNIUFswXSIsCisgICAgIjYgU0hQWzFdIiwKKyAgICAiNiBTSENbMF0iLAorICAgICI2IFNIQ1sxXSIsCisgICAgIjYgU0haWzBdIiwKKyAgICAiNiBTSFpbMV0iLAorICAgICI1IFNIUElYIiwKKyAgICAiMiBJUCIsCisgICAgIjggTVNJUlBbMF0iLAorICAgICI4IE1TSVJQWzFdIiwKKyAgICAiNyBBbGlnblJQIiwKKyAgICAiNCBSVERHIiwKKyAgICAiNyBNSUFQWzBdIiwKKyAgICAiNyBNSUFQWzFdIiwKIAotICAgICJOUHVzaEIiLAotICAgICJOUHVzaFciLAotICAgICJXUyIsCi0gICAgIlJTIiwKLSAgICAiV0N2dFAiLAotICAgICJSQ3Z0IiwKLSAgICAiR0NbMF0iLAotICAgICJHQ1sxXSIsCi0gICAgIlNDRlMiLAotICAgICJNRFswXSIsCi0gICAgIk1EWzFdIiwKLSAgICAiTVBQRU0iLAotICAgICJNUFMiLAotICAgICJGbGlwT04iLAotICAgICJGbGlwT0ZGIiwKLSAgICAiREVCVUciLAorICAgICI2IE5QdXNoQiIsCisgICAgIjYgTlB1c2hXIiwKKyAgICAiMiBXUyIsCisgICAgIjIgUlMiLAorICAgICI1IFdDdnRQIiwKKyAgICAiNCBSQ3Z0IiwKKyAgICAiNSBHQ1swXSIsCisgICAgIjUgR0NbMV0iLAorICAgICI0IFNDRlMiLAorICAgICI1IE1EWzBdIiwKKyAgICAiNSBNRFsxXSIsCisgICAgIjUgTVBQRU0iLAorICAgICIzIE1QUyIsCisgICAgIjYgRmxpcE9OIiwKKyAgICAiNyBGbGlwT0ZGIiwKKyAgICAiNSBERUJVRyIsCiAKLSAgICAiTFQiLAotICAgICJMVEVRIiwKLSAgICAiR1QiLAotICAgICJHVEVRIiwKLSAgICAiRVEiLAotICAgICJORVEiLAotICAgICJPREQiLAotICAgICJFVkVOIiwKLSAgICAiSUYiLAotICAgICJFSUYiLAotICAgICJBTkQiLAotICAgICJPUiIsCi0gICAgIk5PVCIsCi0gICAgIkRlbHRhUDEiLAotICAgICJTREIiLAotICAgICJTRFMiLAorICAgICIyIExUIiwKKyAgICAiNCBMVEVRIiwKKyAgICAiMiBHVCIsCisgICAgIjQgR1RFUSIsCisgICAgIjIgRVEiLAorICAgICIzIE5FUSIsCisgICAgIjMgT0REIiwKKyAgICAiNCBFVkVOIiwKKyAgICAiMiBJRiIsCisgICAgIjMgRUlGIiwKKyAgICAiMyBBTkQiLAorICAgICIyIE9SIiwKKyAgICAiMyBOT1QiLAorICAgICI3IERlbHRhUDEiLAorICAgICIzIFNEQiIsCisgICAgIjMgU0RTIiwKIAotICAgICJBREQiLAotICAgICJTVUIiLAotICAgICJESVYiLAotICAgICJNVUwiLAotICAgICJBQlMiLAotICAgICJORUciLAotICAgICJGTE9PUiIsCi0gICAgIkNFSUxJTkciLAotICAgICJST1VORFswXSIsCi0gICAgIlJPVU5EWzFdIiwKLSAgICAiUk9VTkRbMl0iLAotICAgICJST1VORFszXSIsCi0gICAgIk5ST1VORFswXSIsCi0gICAgIk5ST1VORFsxXSIsCi0gICAgIk5ST1VORFsyXSIsCi0gICAgIk5ST1VORFszXSIsCisgICAgIjMgQUREIiwKKyAgICAiMyBTVUIiLAorICAgICIzIERJViIsCisgICAgIjMgTVVMIiwKKyAgICAiMyBBQlMiLAorICAgICIzIE5FRyIsCisgICAgIjUgRkxPT1IiLAorICAgICI3IENFSUxJTkciLAorICAgICI4IFJPVU5EWzBdIiwKKyAgICAiOCBST1VORFsxXSIsCisgICAgIjggUk9VTkRbMl0iLAorICAgICI4IFJPVU5EWzNdIiwKKyAgICAiOSBOUk9VTkRbMF0iLAorICAgICI5IE5ST1VORFsxXSIsCisgICAgIjkgTlJPVU5EWzJdIiwKKyAgICAiOSBOUk9VTkRbM10iLAogCi0gICAgIldDdnRGIiwKLSAgICAiRGVsdGFQMiIsCi0gICAgIkRlbHRhUDMiLAotICAgICJEZWx0YUNuWzBdIiwKLSAgICAiRGVsdGFDblsxXSIsCi0gICAgIkRlbHRhQ25bMl0iLAotICAgICJTUk9VTkQiLAotICAgICJTNDVSb3VuZCIsCi0gICAgIkpST1QiLAotICAgICJKUk9GIiwKLSAgICAiUk9GRiIsCi0gICAgIklOU18kN0IiLAotICAgICJSVVRHIiwKLSAgICAiUkRURyIsCi0gICAgIlNBTkdXIiwKLSAgICAiQUEiLAorICAgICI1IFdDdnRGIiwKKyAgICAiNyBEZWx0YVAyIiwKKyAgICAiNyBEZWx0YVAzIiwKKyAgICAiQSBEZWx0YUNuWzBdIiwKKyAgICAiQSBEZWx0YUNuWzFdIiwKKyAgICAiQSBEZWx0YUNuWzJdIiwKKyAgICAiNiBTUk9VTkQiLAorICAgICI4IFM0NVJvdW5kIiwKKyAgICAiNCBKUk9UIiwKKyAgICAiNCBKUk9GIiwKKyAgICAiNCBST0ZGIiwKKyAgICAiNyBJTlNfJDdCIiwKKyAgICAiNCBSVVRHIiwKKyAgICAiNCBSRFRHIiwKKyAgICAiNSBTQU5HVyIsCisgICAgIjIgQUEiLAogCi0gICAgIkZsaXBQVCIsCi0gICAgIkZsaXBSZ09OIiwKLSAgICAiRmxpcFJnT0ZGIiwKLSAgICAiSU5TXyQ4MyIsCi0gICAgIklOU18kODQiLAotICAgICJTY2FuQ1RSTCIsCi0gICAgIlNEVlBUTFswXSIsCi0gICAgIlNEVlBUTFsxXSIsCi0gICAgIkdldElORk8iLAotICAgICJJREVGIiwKLSAgICAiUk9MTCIsCi0gICAgIk1BWCIsCi0gICAgIk1JTiIsCi0gICAgIlNjYW5UWVBFIiwKLSAgICAiSW5zdENUUkwiLAotICAgICJJTlNfJDhGIiwKKyAgICAiNiBGbGlwUFQiLAorICAgICI4IEZsaXBSZ09OIiwKKyAgICAiOSBGbGlwUmdPRkYiLAorICAgICI3IElOU18kODMiLAorICAgICI3IElOU18kODQiLAorICAgICI4IFNjYW5DVFJMIiwKKyAgICAiOSBTRFB2VExbMF0iLAorICAgICI5IFNEUHZUTFsxXSIsCisgICAgIjcgR2V0SU5GTyIsCisgICAgIjQgSURFRiIsCisgICAgIjQgUk9MTCIsCisgICAgIjMgTUFYIiwKKyAgICAiMyBNSU4iLAorICAgICI4IFNjYW5UWVBFIiwKKyAgICAiOCBJbnN0Q1RSTCIsCisgICAgIjcgSU5TXyQ4RiIsCiAKLSAgICAiSU5TXyQ5MCIsCi0gICAgIklOU18kOTEiLAotICAgICJJTlNfJDkyIiwKLSAgICAiSU5TXyQ5MyIsCi0gICAgIklOU18kOTQiLAotICAgICJJTlNfJDk1IiwKLSAgICAiSU5TXyQ5NiIsCi0gICAgIklOU18kOTciLAotICAgICJJTlNfJDk4IiwKLSAgICAiSU5TXyQ5OSIsCi0gICAgIklOU18kOUEiLAotICAgICJJTlNfJDlCIiwKLSAgICAiSU5TXyQ5QyIsCi0gICAgIklOU18kOUQiLAotICAgICJJTlNfJDlFIiwKLSAgICAiSU5TXyQ5RiIsCisgICAgIjcgSU5TXyQ5MCIsCisgICAgIjcgSU5TXyQ5MSIsCisgICAgIjcgSU5TXyQ5MiIsCisgICAgIjcgSU5TXyQ5MyIsCisgICAgIjcgSU5TXyQ5NCIsCisgICAgIjcgSU5TXyQ5NSIsCisgICAgIjcgSU5TXyQ5NiIsCisgICAgIjcgSU5TXyQ5NyIsCisgICAgIjcgSU5TXyQ5OCIsCisgICAgIjcgSU5TXyQ5OSIsCisgICAgIjcgSU5TXyQ5QSIsCisgICAgIjcgSU5TXyQ5QiIsCisgICAgIjcgSU5TXyQ5QyIsCisgICAgIjcgSU5TXyQ5RCIsCisgICAgIjcgSU5TXyQ5RSIsCisgICAgIjcgSU5TXyQ5RiIsCiAKLSAgICAiSU5TXyRBMCIsCi0gICAgIklOU18kQTEiLAotICAgICJJTlNfJEEyIiwKLSAgICAiSU5TXyRBMyIsCi0gICAgIklOU18kQTQiLAotICAgICJJTlNfJEE1IiwKLSAgICAiSU5TXyRBNiIsCi0gICAgIklOU18kQTciLAotICAgICJJTlNfJEE4IiwKLSAgICAiSU5TXyRBOSIsCi0gICAgIklOU18kQUEiLAotICAgICJJTlNfJEFCIiwKLSAgICAiSU5TXyRBQyIsCi0gICAgIklOU18kQUQiLAotICAgICJJTlNfJEFFIiwKLSAgICAiSU5TXyRBRiIsCisgICAgIjcgSU5TXyRBMCIsCisgICAgIjcgSU5TXyRBMSIsCisgICAgIjcgSU5TXyRBMiIsCisgICAgIjcgSU5TXyRBMyIsCisgICAgIjcgSU5TXyRBNCIsCisgICAgIjcgSU5TXyRBNSIsCisgICAgIjcgSU5TXyRBNiIsCisgICAgIjcgSU5TXyRBNyIsCisgICAgIjcgSU5TXyRBOCIsCisgICAgIjcgSU5TXyRBOSIsCisgICAgIjcgSU5TXyRBQSIsCisgICAgIjcgSU5TXyRBQiIsCisgICAgIjcgSU5TXyRBQyIsCisgICAgIjcgSU5TXyRBRCIsCisgICAgIjcgSU5TXyRBRSIsCisgICAgIjcgSU5TXyRBRiIsCiAKLSAgICAiUHVzaEJbMF0iLAotICAgICJQdXNoQlsxXSIsCi0gICAgIlB1c2hCWzJdIiwKLSAgICAiUHVzaEJbM10iLAotICAgICJQdXNoQls0XSIsCi0gICAgIlB1c2hCWzVdIiwKLSAgICAiUHVzaEJbNl0iLAotICAgICJQdXNoQls3XSIsCi0gICAgIlB1c2hXWzBdIiwKLSAgICAiUHVzaFdbMV0iLAotICAgICJQdXNoV1syXSIsCi0gICAgIlB1c2hXWzNdIiwKLSAgICAiUHVzaFdbNF0iLAotICAgICJQdXNoV1s1XSIsCi0gICAgIlB1c2hXWzZdIiwKLSAgICAiUHVzaFdbN10iLAorICAgICI4IFB1c2hCWzBdIiwKKyAgICAiOCBQdXNoQlsxXSIsCisgICAgIjggUHVzaEJbMl0iLAorICAgICI4IFB1c2hCWzNdIiwKKyAgICAiOCBQdXNoQls0XSIsCisgICAgIjggUHVzaEJbNV0iLAorICAgICI4IFB1c2hCWzZdIiwKKyAgICAiOCBQdXNoQls3XSIsCisgICAgIjggUHVzaFdbMF0iLAorICAgICI4IFB1c2hXWzFdIiwKKyAgICAiOCBQdXNoV1syXSIsCisgICAgIjggUHVzaFdbM10iLAorICAgICI4IFB1c2hXWzRdIiwKKyAgICAiOCBQdXNoV1s1XSIsCisgICAgIjggUHVzaFdbNl0iLAorICAgICI4IFB1c2hXWzddIiwKIAotICAgICJNRFJQWzAwXSIsCi0gICAgIk1EUlBbMDFdIiwKLSAgICAiTURSUFswMl0iLAotICAgICJNRFJQWzAzXSIsCi0gICAgIk1EUlBbMDRdIiwKLSAgICAiTURSUFswNV0iLAotICAgICJNRFJQWzA2XSIsCi0gICAgIk1EUlBbMDddIiwKLSAgICAiTURSUFswOF0iLAotICAgICJNRFJQWzA5XSIsCi0gICAgIk1EUlBbMTBdIiwKLSAgICAiTURSUFsxMV0iLAotICAgICJNRFJQWzEyXSIsCi0gICAgIk1EUlBbMTNdIiwKLSAgICAiTURSUFsxNF0iLAotICAgICJNRFJQWzE1XSIsCisgICAgIjggTURSUFswMF0iLAorICAgICI4IE1EUlBbMDFdIiwKKyAgICAiOCBNRFJQWzAyXSIsCisgICAgIjggTURSUFswM10iLAorICAgICI4IE1EUlBbMDRdIiwKKyAgICAiOCBNRFJQWzA1XSIsCisgICAgIjggTURSUFswNl0iLAorICAgICI4IE1EUlBbMDddIiwKKyAgICAiOCBNRFJQWzA4XSIsCisgICAgIjggTURSUFswOV0iLAorICAgICI4IE1EUlBbMTBdIiwKKyAgICAiOCBNRFJQWzExXSIsCisgICAgIjggTURSUFsxMl0iLAorICAgICI4IE1EUlBbMTNdIiwKKyAgICAiOCBNRFJQWzE0XSIsCisgICAgIjggTURSUFsxNV0iLAogCi0gICAgIk1EUlBbMTZdIiwKLSAgICAiTURSUFsxN10iLAotICAgICJNRFJQWzE4XSIsCi0gICAgIk1EUlBbMTldIiwKLSAgICAiTURSUFsyMF0iLAotICAgICJNRFJQWzIxXSIsCi0gICAgIk1EUlBbMjJdIiwKLSAgICAiTURSUFsyM10iLAotICAgICJNRFJQWzI0XSIsCi0gICAgIk1EUlBbMjVdIiwKLSAgICAiTURSUFsyNl0iLAotICAgICJNRFJQWzI3XSIsCi0gICAgIk1EUlBbMjhdIiwKLSAgICAiTURSUFsyOV0iLAotICAgICJNRFJQWzMwXSIsCi0gICAgIk1EUlBbMzFdIiwKKyAgICAiOCBNRFJQWzE2XSIsCisgICAgIjggTURSUFsxN10iLAorICAgICI4IE1EUlBbMThdIiwKKyAgICAiOCBNRFJQWzE5XSIsCisgICAgIjggTURSUFsyMF0iLAorICAgICI4IE1EUlBbMjFdIiwKKyAgICAiOCBNRFJQWzIyXSIsCisgICAgIjggTURSUFsyM10iLAorICAgICI4IE1EUlBbMjRdIiwKKyAgICAiOCBNRFJQWzI1XSIsCisgICAgIjggTURSUFsyNl0iLAorICAgICI4IE1EUlBbMjddIiwKKyAgICAiOCBNRFJQWzI4XSIsCisgICAgIjggTURSUFsyOV0iLAorICAgICI4IE1EUlBbMzBdIiwKKyAgICAiOCBNRFJQWzMxXSIsCiAKLSAgICAiTUlSUFswMF0iLAotICAgICJNSVJQWzAxXSIsCi0gICAgIk1JUlBbMDJdIiwKLSAgICAiTUlSUFswM10iLAotICAgICJNSVJQWzA0XSIsCi0gICAgIk1JUlBbMDVdIiwKLSAgICAiTUlSUFswNl0iLAotICAgICJNSVJQWzA3XSIsCi0gICAgIk1JUlBbMDhdIiwKLSAgICAiTUlSUFswOV0iLAotICAgICJNSVJQWzEwXSIsCi0gICAgIk1JUlBbMTFdIiwKLSAgICAiTUlSUFsxMl0iLAotICAgICJNSVJQWzEzXSIsCi0gICAgIk1JUlBbMTRdIiwKLSAgICAiTUlSUFsxNV0iLAorICAgICI4IE1JUlBbMDBdIiwKKyAgICAiOCBNSVJQWzAxXSIsCisgICAgIjggTUlSUFswMl0iLAorICAgICI4IE1JUlBbMDNdIiwKKyAgICAiOCBNSVJQWzA0XSIsCisgICAgIjggTUlSUFswNV0iLAorICAgICI4IE1JUlBbMDZdIiwKKyAgICAiOCBNSVJQWzA3XSIsCisgICAgIjggTUlSUFswOF0iLAorICAgICI4IE1JUlBbMDldIiwKKyAgICAiOCBNSVJQWzEwXSIsCisgICAgIjggTUlSUFsxMV0iLAorICAgICI4IE1JUlBbMTJdIiwKKyAgICAiOCBNSVJQWzEzXSIsCisgICAgIjggTUlSUFsxNF0iLAorICAgICI4IE1JUlBbMTVdIiwKIAotICAgICJNSVJQWzE2XSIsCi0gICAgIk1JUlBbMTddIiwKLSAgICAiTUlSUFsxOF0iLAotICAgICJNSVJQWzE5XSIsCi0gICAgIk1JUlBbMjBdIiwKLSAgICAiTUlSUFsyMV0iLAotICAgICJNSVJQWzIyXSIsCi0gICAgIk1JUlBbMjNdIiwKLSAgICAiTUlSUFsyNF0iLAotICAgICJNSVJQWzI1XSIsCi0gICAgIk1JUlBbMjZdIiwKLSAgICAiTUlSUFsyN10iLAotICAgICJNSVJQWzI4XSIsCi0gICAgIk1JUlBbMjldIiwKLSAgICAiTUlSUFszMF0iLAotICAgICJNSVJQWzMxXSIKKyAgICAiOCBNSVJQWzE2XSIsCisgICAgIjggTUlSUFsxN10iLAorICAgICI4IE1JUlBbMThdIiwKKyAgICAiOCBNSVJQWzE5XSIsCisgICAgIjggTUlSUFsyMF0iLAorICAgICI4IE1JUlBbMjFdIiwKKyAgICAiOCBNSVJQWzIyXSIsCisgICAgIjggTUlSUFsyM10iLAorICAgICI4IE1JUlBbMjRdIiwKKyAgICAiOCBNSVJQWzI1XSIsCisgICAgIjggTUlSUFsyNl0iLAorICAgICI4IE1JUlBbMjddIiwKKyAgICAiOCBNSVJQWzI4XSIsCisgICAgIjggTUlSUFsyOV0iLAorICAgICI4IE1JUlBbMzBdIiwKKyAgICAiOCBNSVJQWzMxXSIKICAgfTsKIAogI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCkBAIC0xNjM3LDU1ICsxNDc1LDU1IEBACiAgIC8qICAgIFRoZSBhc3BlY3QgcmF0aW8gaW4gMTYuMTYgZm9ybWF0LCBhbHdheXMgPD0gMS4wIC4gICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIEZUX0xvbmcKLSAgQ3VycmVudF9SYXRpbyggRVhFQ19PUCApCisgIEN1cnJlbnRfUmF0aW8oIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7Ci0gICAgaWYgKCAhQ1VSLnR0X21ldHJpY3MucmF0aW8gKQorICAgIGlmICggIWV4Yy0+dHRfbWV0cmljcy5yYXRpbyApCiAgICAgewogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0gICAgICBpZiAoIENVUi5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKQorICAgICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCiAgICAgICB7Ci0gICAgICAgIGlmICggQ1VSLkdTLmJvdGhfeF9heGlzICkKLSAgICAgICAgICBDVVIudHRfbWV0cmljcy5yYXRpbyA9IENVUi50dF9tZXRyaWNzLnhfcmF0aW87CisgICAgICAgIGlmICggZXhjLT5HUy5ib3RoX3hfYXhpcyApCisgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gZXhjLT50dF9tZXRyaWNzLnhfcmF0aW87CiAgICAgICAgIGVsc2UKLSAgICAgICAgICBDVVIudHRfbWV0cmljcy5yYXRpbyA9IENVUi50dF9tZXRyaWNzLnlfcmF0aW87CisgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gZXhjLT50dF9tZXRyaWNzLnlfcmF0aW87CiAgICAgICB9CiAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgIHsKLSAgICAgICAgaWYgKCBDVVIuR1MucHJvalZlY3Rvci55ID09IDAgKQotICAgICAgICAgIENVUi50dF9tZXRyaWNzLnJhdGlvID0gQ1VSLnR0X21ldHJpY3MueF9yYXRpbzsKKyAgICAgICAgaWYgKCBleGMtPkdTLnByb2pWZWN0b3IueSA9PSAwICkKKyAgICAgICAgICBleGMtPnR0X21ldHJpY3MucmF0aW8gPSBleGMtPnR0X21ldHJpY3MueF9yYXRpbzsKIAotICAgICAgICBlbHNlIGlmICggQ1VSLkdTLnByb2pWZWN0b3IueCA9PSAwICkKLSAgICAgICAgICBDVVIudHRfbWV0cmljcy5yYXRpbyA9IENVUi50dF9tZXRyaWNzLnlfcmF0aW87CisgICAgICAgIGVsc2UgaWYgKCBleGMtPkdTLnByb2pWZWN0b3IueCA9PSAwICkKKyAgICAgICAgICBleGMtPnR0X21ldHJpY3MucmF0aW8gPSBleGMtPnR0X21ldHJpY3MueV9yYXRpbzsKIAogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICBGVF9GMjZEb3Q2ICB4LCB5OwogCiAKLSAgICAgICAgICB4ID0gVFRfTXVsRml4MTQoIENVUi50dF9tZXRyaWNzLnhfcmF0aW8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDVVIuR1MucHJvalZlY3Rvci54ICk7Ci0gICAgICAgICAgeSA9IFRUX011bEZpeDE0KCBDVVIudHRfbWV0cmljcy55X3JhdGlvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSLkdTLnByb2pWZWN0b3IueSApOwotICAgICAgICAgIENVUi50dF9tZXRyaWNzLnJhdGlvID0gRlRfSHlwb3QoIHgsIHkgKTsKKyAgICAgICAgICB4ID0gVFRfTXVsRml4MTQoIGV4Yy0+dHRfbWV0cmljcy54X3JhdGlvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5wcm9qVmVjdG9yLnggKTsKKyAgICAgICAgICB5ID0gVFRfTXVsRml4MTQoIGV4Yy0+dHRfbWV0cmljcy55X3JhdGlvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5wcm9qVmVjdG9yLnkgKTsKKyAgICAgICAgICBleGMtPnR0X21ldHJpY3MucmF0aW8gPSBGVF9IeXBvdCggeCwgeSApOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBDVVIudHRfbWV0cmljcy5yYXRpbzsKKyAgICByZXR1cm4gZXhjLT50dF9tZXRyaWNzLnJhdGlvOwogICB9CiAKIAogICBGVF9DQUxMQkFDS19ERUYoIEZUX0xvbmcgKQotICBDdXJyZW50X1BwZW0oIEVYRUNfT1AgKQorICBDdXJyZW50X1BwZW0oIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7Ci0gICAgcmV0dXJuIENVUi50dF9tZXRyaWNzLnBwZW07CisgICAgcmV0dXJuIGV4Yy0+dHRfbWV0cmljcy5wcGVtOwogICB9CiAKIAogICBGVF9DQUxMQkFDS19ERUYoIEZUX0xvbmcgKQotICBDdXJyZW50X1BwZW1fU3RyZXRjaGVkKCBFWEVDX09QICkKKyAgQ3VycmVudF9QcGVtX1N0cmV0Y2hlZCggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKLSAgICByZXR1cm4gRlRfTXVsRml4KCBDVVIudHRfbWV0cmljcy5wcGVtLCBDVVJSRU5UX1JhdGlvKCkgKTsKKyAgICByZXR1cm4gRlRfTXVsRml4KCBleGMtPnR0X21ldHJpY3MucHBlbSwgQ3VycmVudF9SYXRpbyggZXhjICkgKTsKICAgfQogCiAKQEAgLTE2OTcsNDggKzE1MzUsNTQgQEAKIAogCiAgIEZUX0NBTExCQUNLX0RFRiggRlRfRjI2RG90NiApCi0gIFJlYWRfQ1ZUKCBFWEVDX09QXyBGVF9VTG9uZyAgaWR4ICkKKyAgUmVhZF9DVlQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgaWR4ICkKICAgewotICAgIHJldHVybiBDVVIuY3Z0W2lkeF07CisgICAgcmV0dXJuIGV4Yy0+Y3Z0W2lkeF07CiAgIH0KIAogCiAgIEZUX0NBTExCQUNLX0RFRiggRlRfRjI2RG90NiApCi0gIFJlYWRfQ1ZUX1N0cmV0Y2hlZCggRVhFQ19PUF8gRlRfVUxvbmcgIGlkeCApCisgIFJlYWRfQ1ZUX1N0cmV0Y2hlZCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgaWR4ICkKICAgewotICAgIHJldHVybiBGVF9NdWxGaXgoIENVUi5jdnRbaWR4XSwgQ1VSUkVOVF9SYXRpbygpICk7CisgICAgcmV0dXJuIEZUX011bEZpeCggZXhjLT5jdnRbaWR4XSwgQ3VycmVudF9SYXRpbyggZXhjICkgKTsKICAgfQogCiAKICAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKLSAgV3JpdGVfQ1ZUKCBFWEVDX09QXyBGVF9VTG9uZyAgICBpZHgsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgdmFsdWUgKQorICBXcml0ZV9DVlQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgIGlkeCwKKyAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgdmFsdWUgKQogICB7Ci0gICAgQ1VSLmN2dFtpZHhdID0gdmFsdWU7CisgICAgZXhjLT5jdnRbaWR4XSA9IHZhbHVlOwogICB9CiAKIAogICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQotICBXcml0ZV9DVlRfU3RyZXRjaGVkKCBFWEVDX09QXyBGVF9VTG9uZyAgICBpZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgIHZhbHVlICkKKyAgV3JpdGVfQ1ZUX1N0cmV0Y2hlZCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIHZhbHVlICkKICAgewotICAgIENVUi5jdnRbaWR4XSA9IEZUX0RpdkZpeCggdmFsdWUsIENVUlJFTlRfUmF0aW8oKSApOworICAgIGV4Yy0+Y3Z0W2lkeF0gPSBGVF9EaXZGaXgoIHZhbHVlLCBDdXJyZW50X1JhdGlvKCBleGMgKSApOwogICB9CiAKIAogICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQotICBNb3ZlX0NWVCggRVhFQ19PUF8gRlRfVUxvbmcgICAgaWR4LAotICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgdmFsdWUgKQorICBNb3ZlX0NWVCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX1VMb25nICAgICAgICBpZHgsCisgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgdmFsdWUgKQogICB7Ci0gICAgQ1VSLmN2dFtpZHhdICs9IHZhbHVlOworICAgIGV4Yy0+Y3Z0W2lkeF0gKz0gdmFsdWU7CiAgIH0KIAogCiAgIEZUX0NBTExCQUNLX0RFRiggdm9pZCApCi0gIE1vdmVfQ1ZUX1N0cmV0Y2hlZCggRVhFQ19PUF8gRlRfVUxvbmcgICAgaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgIHZhbHVlICkKKyAgTW92ZV9DVlRfU3RyZXRjaGVkKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIHZhbHVlICkKICAgewotICAgIENVUi5jdnRbaWR4XSArPSBGVF9EaXZGaXgoIHZhbHVlLCBDVVJSRU5UX1JhdGlvKCkgKTsKKyAgICBleGMtPmN2dFtpZHhdICs9IEZUX0RpdkZpeCggdmFsdWUsIEN1cnJlbnRfUmF0aW8oIGV4YyApICk7CiAgIH0KIAogCkBAIC0xNzU4LDEyICsxNjAyLDEyIEBACiAgIC8qICAgIFRoaXMgb25lIGNvdWxkIGJlY29tZSBhIG1hY3JvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIEZUX1Nob3J0Ci0gIEdldFNob3J0SW5zKCBFWEVDX09QICkKKyAgR2V0U2hvcnRJbnMoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7CiAgICAgLyogUmVhZGluZyBhIGJ5dGUgc3RyZWFtIHNvIHRoZXJlIGlzIG5vIGVuZGlhbmVzcyAoRGF2ZVApICovCi0gICAgQ1VSLklQICs9IDI7Ci0gICAgcmV0dXJuIChGVF9TaG9ydCkoICggQ1VSLmNvZGVbQ1VSLklQIC0gMl0gPDwgOCApICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBDVVIuY29kZVtDVVIuSVAgLSAxXSAgICAgICk7CisgICAgZXhjLT5JUCArPSAyOworICAgIHJldHVybiAoRlRfU2hvcnQpKCAoIGV4Yy0+Y29kZVtleGMtPklQIC0gMl0gPDwgOCApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPmNvZGVbZXhjLT5JUCAtIDFdICAgICAgKTsKICAgfQogCiAKQEAgLTE3ODQsMjMgKzE2MjgsMjQgQEAKICAgLyogICAgU1VDQ0VTUyBvciBGQUlMVVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgRlRfQm9vbAotICBJbnNfR290b19Db2RlUmFuZ2UoIEVYRUNfT1BfIEZUX0ludCAgICBhUmFuZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgIGFJUCApCisgIEluc19Hb3RvX0NvZGVSYW5nZSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgYVJhbmdlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICBhSVAgKQogICB7CiAgICAgVFRfQ29kZVJhbmdlKiAgcmFuZ2U7CiAKIAogICAgIGlmICggYVJhbmdlIDwgMSB8fCBhUmFuZ2UgPiAzICkKICAgICB7Ci0gICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggQmFkX0FyZ3VtZW50ICk7CisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEJhZF9Bcmd1bWVudCApOwogICAgICAgcmV0dXJuIEZBSUxVUkU7CiAgICAgfQogCi0gICAgcmFuZ2UgPSAmQ1VSLmNvZGVSYW5nZVRhYmxlW2FSYW5nZSAtIDFdOworICAgIHJhbmdlID0gJmV4Yy0+Y29kZVJhbmdlVGFibGVbYVJhbmdlIC0gMV07CiAKICAgICBpZiAoIHJhbmdlLT5iYXNlID09IE5VTEwgKSAgICAgLyogaW52YWxpZCBjb2RlcmFuZ2UgKi8KICAgICB7Ci0gICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Db2RlUmFuZ2UgKTsKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Db2RlUmFuZ2UgKTsKICAgICAgIHJldHVybiBGQUlMVVJFOwogICAgIH0KIApAQCAtMTgxMCwxNCArMTY1NSwxNCBAQAogCiAgICAgaWYgKCBhSVAgPiByYW5nZS0+c2l6ZSApCiAgICAgewotICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIENvZGVfT3ZlcmZsb3cgKTsKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggQ29kZV9PdmVyZmxvdyApOwogICAgICAgcmV0dXJuIEZBSUxVUkU7CiAgICAgfQogCi0gICAgQ1VSLmNvZGUgICAgID0gcmFuZ2UtPmJhc2U7Ci0gICAgQ1VSLmNvZGVTaXplID0gcmFuZ2UtPnNpemU7Ci0gICAgQ1VSLklQICAgICAgID0gYUlQOwotICAgIENVUi5jdXJSYW5nZSA9IGFSYW5nZTsKKyAgICBleGMtPmNvZGUgICAgID0gcmFuZ2UtPmJhc2U7CisgICAgZXhjLT5jb2RlU2l6ZSA9IHJhbmdlLT5zaXplOworICAgIGV4Yy0+SVAgICAgICAgPSBhSVA7CisgICAgZXhjLT5jdXJSYW5nZSA9IGFSYW5nZTsKIAogICAgIHJldHVybiBTVUNDRVNTOwogICB9CkBAIC0xODQxLDM2ICsxNjg2LDM3IEBACiAgIC8qICAgIHpvbmUgICAgIDo6IFRoZSBhZmZlY3RlZCBnbHlwaCB6b25lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgRGlyZWN0X01vdmUoIEVYRUNfT1BfIFRUX0dseXBoWm9uZSAgem9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgIGRpc3RhbmNlICkKKyAgRGlyZWN0X01vdmUoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICBUVF9HbHlwaFpvbmUgICAgem9uZSwKKyAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgICBwb2ludCwKKyAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSApCiAgIHsKICAgICBGVF9GMjZEb3Q2ICB2OwogCiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIEZUX0FTU0VSVCggIUNVUi5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKTsKKyAgICBGVF9BU1NFUlQoICFleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApOwogI2VuZGlmCiAKLSAgICB2ID0gQ1VSLkdTLmZyZWVWZWN0b3IueDsKKyAgICB2ID0gZXhjLT5HUy5mcmVlVmVjdG9yLng7CiAKICAgICBpZiAoIHYgIT0gMCApCiAgICAgewogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgICAgaWYgKCAhU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAotICAgICAgICAgICAoICFDVVIuaWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKLSAgICAgICAgICAgICAoIENVUi5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfQUxMT1dfWF9ETU9WRSApICkgKQorICAgICAgaWYgKCAhU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgKCAhZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfQUxMT1dfWF9ETU9WRSApICkgKQogI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLwotICAgICAgICB6b25lLT5jdXJbcG9pbnRdLnggKz0gRlRfTXVsRGl2KCBkaXN0YW5jZSwgdiwgQ1VSLkZfZG90X1AgKTsKKyAgICAgICAgem9uZS0+Y3VyW3BvaW50XS54ICs9IEZUX011bERpdiggZGlzdGFuY2UsIHYsIGV4Yy0+Rl9kb3RfUCApOwogCiAgICAgICB6b25lLT50YWdzW3BvaW50XSB8PSBGVF9DVVJWRV9UQUdfVE9VQ0hfWDsKICAgICB9CiAKLSAgICB2ID0gQ1VSLkdTLmZyZWVWZWN0b3IueTsKKyAgICB2ID0gZXhjLT5HUy5mcmVlVmVjdG9yLnk7CiAKICAgICBpZiAoIHYgIT0gMCApCiAgICAgewotICAgICAgem9uZS0+Y3VyW3BvaW50XS55ICs9IEZUX011bERpdiggZGlzdGFuY2UsIHYsIENVUi5GX2RvdF9QICk7CisgICAgICB6b25lLT5jdXJbcG9pbnRdLnkgKz0gRlRfTXVsRGl2KCBkaXN0YW5jZSwgdiwgZXhjLT5GX2RvdF9QICk7CiAKICAgICAgIHpvbmUtPnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9ZOwogICAgIH0KQEAgLTE4OTUsMjYgKzE3NDEsMjcgQEAKICAgLyogICAgem9uZSAgICAgOjogVGhlIGFmZmVjdGVkIGdseXBoIHpvbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBEaXJlY3RfTW92ZV9PcmlnKCBFWEVDX09QXyBUVF9HbHlwaFpvbmUgIHpvbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgZGlzdGFuY2UgKQorICBEaXJlY3RfTW92ZV9PcmlnKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgICBUVF9HbHlwaFpvbmUgICAgem9uZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgIHBvaW50LAorICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UgKQogICB7CiAgICAgRlRfRjI2RG90NiAgdjsKIAogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICBGVF9BU1NFUlQoICFDVVIuZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICk7CisgICAgRlRfQVNTRVJUKCAhZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKTsKICNlbmRpZgogCi0gICAgdiA9IENVUi5HUy5mcmVlVmVjdG9yLng7CisgICAgdiA9IGV4Yy0+R1MuZnJlZVZlY3Rvci54OwogCiAgICAgaWYgKCB2ICE9IDAgKQotICAgICAgem9uZS0+b3JnW3BvaW50XS54ICs9IEZUX011bERpdiggZGlzdGFuY2UsIHYsIENVUi5GX2RvdF9QICk7CisgICAgICB6b25lLT5vcmdbcG9pbnRdLnggKz0gRlRfTXVsRGl2KCBkaXN0YW5jZSwgdiwgZXhjLT5GX2RvdF9QICk7CiAKLSAgICB2ID0gQ1VSLkdTLmZyZWVWZWN0b3IueTsKKyAgICB2ID0gZXhjLT5HUy5mcmVlVmVjdG9yLnk7CiAKICAgICBpZiAoIHYgIT0gMCApCi0gICAgICB6b25lLT5vcmdbcG9pbnRdLnkgKz0gRlRfTXVsRGl2KCBkaXN0YW5jZSwgdiwgQ1VSLkZfZG90X1AgKTsKKyAgICAgIHpvbmUtPm9yZ1twb2ludF0ueSArPSBGVF9NdWxEaXYoIGRpc3RhbmNlLCB2LCBleGMtPkZfZG90X1AgKTsKICAgfQogCiAKQEAgLTE5MjksMTUgKzE3NzYsMTYgQEAKIAogCiAgIHN0YXRpYyB2b2lkCi0gIERpcmVjdF9Nb3ZlX1goIEVYRUNfT1BfIFRUX0dseXBoWm9uZSAgem9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICBwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICBkaXN0YW5jZSApCisgIERpcmVjdF9Nb3ZlX1goIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgIFRUX0dseXBoWm9uZSAgICB6b25lLAorICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICAgcG9pbnQsCisgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSApCiAgIHsKLSAgICBGVF9VTlVTRURfRVhFQzsKKyAgICBGVF9VTlVTRUQoIGV4YyApOwogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCAhU1VCUElYRUxfSElOVElORyAgfHwKLSAgICAgICAgICFDVVIuaWdub3JlX3hfbW9kZSApCisgICAgaWYgKCAhU1VCUElYRUxfSElOVElORyAgIHx8CisgICAgICAgICAhZXhjLT5pZ25vcmVfeF9tb2RlICkKICNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KICAgICAgIHpvbmUtPmN1cltwb2ludF0ueCArPSBkaXN0YW5jZTsKIApAQCAtMTk0NiwxMSArMTc5NCwxMiBAQAogCiAKICAgc3RhdGljIHZvaWQKLSAgRGlyZWN0X01vdmVfWSggRVhFQ19PUF8gVFRfR2x5cGhab25lICB6b25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgIHBvaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgIGRpc3RhbmNlICkKKyAgRGlyZWN0X01vdmVfWSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgVFRfR2x5cGhab25lICAgIHpvbmUsCisgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgICBwb2ludCwKKyAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlICkKICAgewotICAgIEZUX1VOVVNFRF9FWEVDOworICAgIEZUX1VOVVNFRCggZXhjICk7CiAKICAgICB6b25lLT5jdXJbcG9pbnRdLnkgKz0gZGlzdGFuY2U7CiAgICAgem9uZS0+dGFnc1twb2ludF0gIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9ZOwpAQCAtMTk2OCwyMiArMTgxNywyNCBAQAogCiAKICAgc3RhdGljIHZvaWQKLSAgRGlyZWN0X01vdmVfT3JpZ19YKCBFWEVDX09QXyBUVF9HbHlwaFpvbmUgIHpvbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICBwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgIGRpc3RhbmNlICkKKyAgRGlyZWN0X01vdmVfT3JpZ19YKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgICAgIFRUX0dseXBoWm9uZSAgICB6b25lLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgICBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UgKQogICB7Ci0gICAgRlRfVU5VU0VEX0VYRUM7CisgICAgRlRfVU5VU0VEKCBleGMgKTsKIAogICAgIHpvbmUtPm9yZ1twb2ludF0ueCArPSBkaXN0YW5jZTsKICAgfQogCiAKICAgc3RhdGljIHZvaWQKLSAgRGlyZWN0X01vdmVfT3JpZ19ZKCBFWEVDX09QXyBUVF9HbHlwaFpvbmUgIHpvbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICBwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgIGRpc3RhbmNlICkKKyAgRGlyZWN0X01vdmVfT3JpZ19ZKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgICAgIFRUX0dseXBoWm9uZSAgICB6b25lLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgICBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UgKQogICB7Ci0gICAgRlRfVU5VU0VEX0VYRUM7CisgICAgRlRfVU5VU0VEKCBleGMgKTsKIAogICAgIHpvbmUtPm9yZ1twb2ludF0ueSArPSBkaXN0YW5jZTsKICAgfQpAQCAtMjAxMiwxMiArMTg2MywxMyBAQAogICAvKiAgICBiZWZvcmUgcm91bmRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyBGVF9GMjZEb3Q2Ci0gIFJvdW5kX05vbmUoIEVYRUNfT1BfIEZUX0YyNkRvdDYgIGRpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICBjb21wZW5zYXRpb24gKQorICBSb3VuZF9Ob25lKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCisgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBjb21wZW5zYXRpb24gKQogICB7CiAgICAgRlRfRjI2RG90NiAgdmFsOwogCi0gICAgRlRfVU5VU0VEX0VYRUM7CisgICAgRlRfVU5VU0VEKCBleGMgKTsKIAogCiAgICAgaWYgKCBkaXN0YW5jZSA+PSAwICkKQEAgLTIwNTMsMTIgKzE5MDUsMTMgQEAKICAgLyogICAgUm91bmRlZCBkaXN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgRlRfRjI2RG90NgotICBSb3VuZF9Ub19HcmlkKCBFWEVDX09QXyBGVF9GMjZEb3Q2ICBkaXN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgY29tcGVuc2F0aW9uICkKKyAgUm91bmRfVG9fR3JpZCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLAorICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgY29tcGVuc2F0aW9uICkKICAgewogICAgIEZUX0YyNkRvdDYgIHZhbDsKIAotICAgIEZUX1VOVVNFRF9FWEVDOworICAgIEZUX1VOVVNFRCggZXhjICk7CiAKIAogICAgIGlmICggZGlzdGFuY2UgPj0gMCApCkBAIC0yMDc0LDcgKzE5MjcsNyBAQAogICAgICAgICB2YWwgPSAwOwogICAgIH0KIAotICAgIHJldHVybiAgdmFsOworICAgIHJldHVybiB2YWw7CiAgIH0KIAogCkBAIC0yMDk1LDEyICsxOTQ4LDEzIEBACiAgIC8qICAgIFJvdW5kZWQgZGlzdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIEZUX0YyNkRvdDYKLSAgUm91bmRfVG9fSGFsZl9HcmlkKCBFWEVDX09QXyBGVF9GMjZEb3Q2ICBkaXN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICBjb21wZW5zYXRpb24gKQorICBSb3VuZF9Ub19IYWxmX0dyaWQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBjb21wZW5zYXRpb24gKQogICB7CiAgICAgRlRfRjI2RG90NiAgdmFsOwogCi0gICAgRlRfVU5VU0VEX0VYRUM7CisgICAgRlRfVU5VU0VEKCBleGMgKTsKIAogCiAgICAgaWYgKCBkaXN0YW5jZSA+PSAwICkKQEAgLTIxMzcsMTIgKzE5OTEsMTMgQEAKICAgLyogICAgUm91bmRlZCBkaXN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgRlRfRjI2RG90NgotICBSb3VuZF9Eb3duX1RvX0dyaWQoIEVYRUNfT1BfIEZUX0YyNkRvdDYgIGRpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgIGNvbXBlbnNhdGlvbiApCisgIFJvdW5kX0Rvd25fVG9fR3JpZCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGNvbXBlbnNhdGlvbiApCiAgIHsKICAgICBGVF9GMjZEb3Q2ICB2YWw7CiAKLSAgICBGVF9VTlVTRURfRVhFQzsKKyAgICBGVF9VTlVTRUQoIGV4YyApOwogCiAKICAgICBpZiAoIGRpc3RhbmNlID49IDAgKQpAQCAtMjE3OSwxMiArMjAzNCwxMyBAQAogICAvKiAgICBSb3VuZGVkIGRpc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyBGVF9GMjZEb3Q2Ci0gIFJvdW5kX1VwX1RvX0dyaWQoIEVYRUNfT1BfIEZUX0YyNkRvdDYgIGRpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICBjb21wZW5zYXRpb24gKQorICBSb3VuZF9VcF9Ub19HcmlkKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBjb21wZW5zYXRpb24gKQogICB7CiAgICAgRlRfRjI2RG90NiAgdmFsOwogCi0gICAgRlRfVU5VU0VEX0VYRUM7CisgICAgRlRfVU5VU0VEKCBleGMgKTsKIAogCiAgICAgaWYgKCBkaXN0YW5jZSA+PSAwICkKQEAgLTIyMjEsMTIgKzIwNzcsMTMgQEAKICAgLyogICAgUm91bmRlZCBkaXN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgRlRfRjI2RG90NgotICBSb3VuZF9Ub19Eb3VibGVfR3JpZCggRVhFQ19PUF8gRlRfRjI2RG90NiAgZGlzdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICBjb21wZW5zYXRpb24gKQorICBSb3VuZF9Ub19Eb3VibGVfR3JpZCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBjb21wZW5zYXRpb24gKQogICB7CiAgICAgRlRfRjI2RG90NiB2YWw7CiAKLSAgICBGVF9VTlVTRURfRVhFQzsKKyAgICBGVF9VTlVTRUQoIGV4YyApOwogCiAKICAgICBpZiAoIGRpc3RhbmNlID49IDAgKQpAQCAtMjI2OSwyNyArMjEyNiwyOCBAQAogICAvKiAgICBiZWZvcmUgcm91bmRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyBGVF9GMjZEb3Q2Ci0gIFJvdW5kX1N1cGVyKCBFWEVDX09QXyBGVF9GMjZEb3Q2ICBkaXN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgIGNvbXBlbnNhdGlvbiApCisgIFJvdW5kX1N1cGVyKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLAorICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGNvbXBlbnNhdGlvbiApCiAgIHsKICAgICBGVF9GMjZEb3Q2ICB2YWw7CiAKIAogICAgIGlmICggZGlzdGFuY2UgPj0gMCApCiAgICAgewotICAgICAgdmFsID0gKCBkaXN0YW5jZSAtIENVUi5waGFzZSArIENVUi50aHJlc2hvbGQgKyBjb21wZW5zYXRpb24gKSAmCi0gICAgICAgICAgICAgIC1DVVIucGVyaW9kOwotICAgICAgdmFsICs9IENVUi5waGFzZTsKKyAgICAgIHZhbCA9ICggZGlzdGFuY2UgLSBleGMtPnBoYXNlICsgZXhjLT50aHJlc2hvbGQgKyBjb21wZW5zYXRpb24gKSAmCisgICAgICAgICAgICAgIC1leGMtPnBlcmlvZDsKKyAgICAgIHZhbCArPSBleGMtPnBoYXNlOwogICAgICAgaWYgKCB2YWwgPCAwICkKLSAgICAgICAgdmFsID0gQ1VSLnBoYXNlOworICAgICAgICB2YWwgPSBleGMtPnBoYXNlOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgdmFsID0gLSggKCBDVVIudGhyZXNob2xkIC0gQ1VSLnBoYXNlIC0gZGlzdGFuY2UgKyBjb21wZW5zYXRpb24gKSAmCi0gICAgICAgICAgICAgICAtQ1VSLnBlcmlvZCApOwotICAgICAgdmFsIC09IENVUi5waGFzZTsKKyAgICAgIHZhbCA9IC0oICggZXhjLT50aHJlc2hvbGQgLSBleGMtPnBoYXNlIC0gZGlzdGFuY2UgKyBjb21wZW5zYXRpb24gKSAmCisgICAgICAgICAgICAgICAtZXhjLT5wZXJpb2QgKTsKKyAgICAgIHZhbCAtPSBleGMtPnBoYXNlOwogICAgICAgaWYgKCB2YWwgPiAwICkKLSAgICAgICAgdmFsID0gLUNVUi5waGFzZTsKKyAgICAgICAgdmFsID0gLWV4Yy0+cGhhc2U7CiAgICAgfQogCiAgICAgcmV0dXJuIHZhbDsKQEAgLTIzMTcsMjcgKzIxNzUsMjggQEAKICAgLyogICAgZ3JlYXRlciBwcmVjaXNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgRlRfRjI2RG90NgotICBSb3VuZF9TdXBlcl80NSggRVhFQ19PUF8gRlRfRjI2RG90NiAgZGlzdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICBjb21wZW5zYXRpb24gKQorICBSb3VuZF9TdXBlcl80NSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBjb21wZW5zYXRpb24gKQogICB7CiAgICAgRlRfRjI2RG90NiAgdmFsOwogCiAKICAgICBpZiAoIGRpc3RhbmNlID49IDAgKQogICAgIHsKLSAgICAgIHZhbCA9ICggKCBkaXN0YW5jZSAtIENVUi5waGFzZSArIENVUi50aHJlc2hvbGQgKyBjb21wZW5zYXRpb24gKSAvCi0gICAgICAgICAgICAgICAgQ1VSLnBlcmlvZCApICogQ1VSLnBlcmlvZDsKLSAgICAgIHZhbCArPSBDVVIucGhhc2U7CisgICAgICB2YWwgPSAoICggZGlzdGFuY2UgLSBleGMtPnBoYXNlICsgZXhjLT50aHJlc2hvbGQgKyBjb21wZW5zYXRpb24gKSAvCisgICAgICAgICAgICAgICAgZXhjLT5wZXJpb2QgKSAqIGV4Yy0+cGVyaW9kOworICAgICAgdmFsICs9IGV4Yy0+cGhhc2U7CiAgICAgICBpZiAoIHZhbCA8IDAgKQotICAgICAgICB2YWwgPSBDVVIucGhhc2U7CisgICAgICAgIHZhbCA9IGV4Yy0+cGhhc2U7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICB2YWwgPSAtKCAoICggQ1VSLnRocmVzaG9sZCAtIENVUi5waGFzZSAtIGRpc3RhbmNlICsgY29tcGVuc2F0aW9uICkgLwotICAgICAgICAgICAgICAgICAgIENVUi5wZXJpb2QgKSAqIENVUi5wZXJpb2QgKTsKLSAgICAgIHZhbCAtPSBDVVIucGhhc2U7CisgICAgICB2YWwgPSAtKCAoICggZXhjLT50aHJlc2hvbGQgLSBleGMtPnBoYXNlIC0gZGlzdGFuY2UgKyBjb21wZW5zYXRpb24gKSAvCisgICAgICAgICAgICAgICAgICAgZXhjLT5wZXJpb2QgKSAqIGV4Yy0+cGVyaW9kICk7CisgICAgICB2YWwgLT0gZXhjLT5waGFzZTsKICAgICAgIGlmICggdmFsID4gMCApCi0gICAgICAgIHZhbCA9IC1DVVIucGhhc2U7CisgICAgICAgIHZhbCA9IC1leGMtPnBoYXNlOwogICAgIH0KIAogICAgIHJldHVybiB2YWw7CkBAIC0yMzU2LDQwICsyMjE1LDQxIEBACiAgIC8qICAgIHJvdW5kX21vZGUgOjogVGhlIHJvdW5kaW5nIG1vZGUgdG8gYmUgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgQ29tcHV0ZV9Sb3VuZCggRVhFQ19PUF8gRlRfQnl0ZSAgcm91bmRfbW9kZSApCisgIENvbXB1dGVfUm91bmQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgIEZUX0J5dGUgICAgICAgICByb3VuZF9tb2RlICkKICAgewogICAgIHN3aXRjaCAoIHJvdW5kX21vZGUgKQogICAgIHsKICAgICBjYXNlIFRUX1JvdW5kX09mZjoKLSAgICAgIENVUi5mdW5jX3JvdW5kID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfTm9uZTsKKyAgICAgIGV4Yy0+ZnVuY19yb3VuZCA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX05vbmU7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFRfUm91bmRfVG9fR3JpZDoKLSAgICAgIENVUi5mdW5jX3JvdW5kID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfVG9fR3JpZDsKKyAgICAgIGV4Yy0+ZnVuY19yb3VuZCA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX1RvX0dyaWQ7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFRfUm91bmRfVXBfVG9fR3JpZDoKLSAgICAgIENVUi5mdW5jX3JvdW5kID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfVXBfVG9fR3JpZDsKKyAgICAgIGV4Yy0+ZnVuY19yb3VuZCA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX1VwX1RvX0dyaWQ7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFRfUm91bmRfRG93bl9Ub19HcmlkOgotICAgICAgQ1VSLmZ1bmNfcm91bmQgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9Eb3duX1RvX0dyaWQ7CisgICAgICBleGMtPmZ1bmNfcm91bmQgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9Eb3duX1RvX0dyaWQ7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFRfUm91bmRfVG9fSGFsZl9HcmlkOgotICAgICAgQ1VSLmZ1bmNfcm91bmQgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9Ub19IYWxmX0dyaWQ7CisgICAgICBleGMtPmZ1bmNfcm91bmQgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9Ub19IYWxmX0dyaWQ7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFRfUm91bmRfVG9fRG91YmxlX0dyaWQ6Ci0gICAgICBDVVIuZnVuY19yb3VuZCA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX1RvX0RvdWJsZV9HcmlkOworICAgICAgZXhjLT5mdW5jX3JvdW5kID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfVG9fRG91YmxlX0dyaWQ7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFRfUm91bmRfU3VwZXI6Ci0gICAgICBDVVIuZnVuY19yb3VuZCA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX1N1cGVyOworICAgICAgZXhjLT5mdW5jX3JvdW5kID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfU3VwZXI7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFRfUm91bmRfU3VwZXJfNDU6Ci0gICAgICBDVVIuZnVuY19yb3VuZCA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX1N1cGVyXzQ1OworICAgICAgZXhjLT5mdW5jX3JvdW5kID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfU3VwZXJfNDU7CiAgICAgICBicmVhazsKICAgICB9CiAgIH0KQEAgLTI0MDksNTcgKzIyNjksNTggQEAKICAgLyogICAgc2VsZWN0b3IgICA6OiBUaGUgU1JPVU5EIG9wY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBTZXRTdXBlclJvdW5kKCBFWEVDX09QXyBGVF9GMjZEb3Q2ICBHcmlkUGVyaW9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBzZWxlY3RvciApCisgIFNldFN1cGVyUm91bmQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgIEZUX0YyRG90MTQgICAgICBHcmlkUGVyaW9kLAorICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgICAgc2VsZWN0b3IgKQogICB7CiAgICAgc3dpdGNoICggKEZUX0ludCkoIHNlbGVjdG9yICYgMHhDMCApICkKICAgICB7CiAgICAgICBjYXNlIDA6Ci0gICAgICAgIENVUi5wZXJpb2QgPSBHcmlkUGVyaW9kIC8gMjsKKyAgICAgICAgZXhjLT5wZXJpb2QgPSBHcmlkUGVyaW9kIC8gMjsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgMHg0MDoKLSAgICAgICAgQ1VSLnBlcmlvZCA9IEdyaWRQZXJpb2Q7CisgICAgICAgIGV4Yy0+cGVyaW9kID0gR3JpZFBlcmlvZDsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgMHg4MDoKLSAgICAgICAgQ1VSLnBlcmlvZCA9IEdyaWRQZXJpb2QgKiAyOworICAgICAgICBleGMtPnBlcmlvZCA9IEdyaWRQZXJpb2QgKiAyOwogICAgICAgICBicmVhazsKIAogICAgICAgLyogVGhpcyBvcGNvZGUgaXMgcmVzZXJ2ZWQsIGJ1dC4uLiAqLwotCiAgICAgICBjYXNlIDB4QzA6Ci0gICAgICAgIENVUi5wZXJpb2QgPSBHcmlkUGVyaW9kOworICAgICAgICBleGMtPnBlcmlvZCA9IEdyaWRQZXJpb2Q7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoIChGVF9JbnQpKCBzZWxlY3RvciAmIDB4MzAgKSApCiAgICAgewogICAgIGNhc2UgMDoKLSAgICAgIENVUi5waGFzZSA9IDA7CisgICAgICBleGMtPnBoYXNlID0gMDsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAweDEwOgotICAgICAgQ1VSLnBoYXNlID0gQ1VSLnBlcmlvZCAvIDQ7CisgICAgICBleGMtPnBoYXNlID0gZXhjLT5wZXJpb2QgLyA0OwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDB4MjA6Ci0gICAgICBDVVIucGhhc2UgPSBDVVIucGVyaW9kIC8gMjsKKyAgICAgIGV4Yy0+cGhhc2UgPSBleGMtPnBlcmlvZCAvIDI7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgMHgzMDoKLSAgICAgIENVUi5waGFzZSA9IENVUi5wZXJpb2QgKiAzIC8gNDsKKyAgICAgIGV4Yy0+cGhhc2UgPSBleGMtPnBlcmlvZCAqIDMgLyA0OwogICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCAoIHNlbGVjdG9yICYgMHgwRiApID09IDAgKQotICAgICAgQ1VSLnRocmVzaG9sZCA9IENVUi5wZXJpb2QgLSAxOworICAgICAgZXhjLT50aHJlc2hvbGQgPSBleGMtPnBlcmlvZCAtIDE7CiAgICAgZWxzZQotICAgICAgQ1VSLnRocmVzaG9sZCA9ICggKEZUX0ludCkoIHNlbGVjdG9yICYgMHgwRiApIC0gNCApICogQ1VSLnBlcmlvZCAvIDg7CisgICAgICBleGMtPnRocmVzaG9sZCA9ICggKEZUX0ludCkoIHNlbGVjdG9yICYgMHgwRiApIC0gNCApICogZXhjLT5wZXJpb2QgLyA4OwogCi0gICAgQ1VSLnBlcmlvZCAgICAvPSAyNTY7Ci0gICAgQ1VSLnBoYXNlICAgICAvPSAyNTY7Ci0gICAgQ1VSLnRocmVzaG9sZCAvPSAyNTY7CisgICAgLyogY29udmVydCB0byBGMjZEb3Q2IGZvcm1hdCAqLworICAgIGV4Yy0+cGVyaW9kICAgID4+PSA4OworICAgIGV4Yy0+cGhhc2UgICAgID4+PSA4OworICAgIGV4Yy0+dGhyZXNob2xkID4+PSA4OwogICB9CiAKIApAQCAtMjQ4MCwxNiArMjM0MSwxNyBAQAogICAvKiAgICBUaGUgZGlzdGFuY2UgaW4gRjI2ZG90NiBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyBGVF9GMjZEb3Q2Ci0gIFByb2plY3QoIEVYRUNfT1BfIEZUX1BvcyAgZHgsCi0gICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgZHkgKQorICBQcm9qZWN0KCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICBGVF9Qb3MgICAgICAgICAgZHgsCisgICAgICAgICAgIEZUX1BvcyAgICAgICAgICBkeSApCiAgIHsKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIEZUX0FTU0VSVCggIUNVUi5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKTsKKyAgICBGVF9BU1NFUlQoICFleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApOwogI2VuZGlmCiAKLSAgICByZXR1cm4gVFRfRG90Rml4MTQoIChGVF9VSW50MzIpZHgsIChGVF9VSW50MzIpZHksCi0gICAgICAgICAgICAgICAgICAgICAgICBDVVIuR1MucHJvalZlY3Rvci54LAotICAgICAgICAgICAgICAgICAgICAgICAgQ1VSLkdTLnByb2pWZWN0b3IueSApOworICAgIHJldHVybiBUVF9Eb3RGaXgxNCggZHgsIGR5LAorICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5wcm9qVmVjdG9yLngsCisgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLnByb2pWZWN0b3IueSApOwogICB9CiAKIApAQCAtMjUxMCwxMiArMjM3MiwxMyBAQAogICAvKiAgICBUaGUgZGlzdGFuY2UgaW4gRjI2ZG90NiBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyBGVF9GMjZEb3Q2Ci0gIER1YWxfUHJvamVjdCggRVhFQ19PUF8gRlRfUG9zICBkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIGR5ICkKKyAgRHVhbF9Qcm9qZWN0KCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgICBkeCwKKyAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICAgZHkgKQogICB7Ci0gICAgcmV0dXJuIFRUX0RvdEZpeDE0KCAoRlRfVUludDMyKWR4LCAoRlRfVUludDMyKWR5LAotICAgICAgICAgICAgICAgICAgICAgICAgQ1VSLkdTLmR1YWxWZWN0b3IueCwKLSAgICAgICAgICAgICAgICAgICAgICAgIENVUi5HUy5kdWFsVmVjdG9yLnkgKTsKKyAgICByZXR1cm4gVFRfRG90Rml4MTQoIGR4LCBkeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MuZHVhbFZlY3Rvci54LAorICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5kdWFsVmVjdG9yLnkgKTsKICAgfQogCiAKQEAgLTI1MzYsMTAgKzIzOTksMTEgQEAKICAgLyogICAgVGhlIGRpc3RhbmNlIGluIEYyNmRvdDYgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgRlRfRjI2RG90NgotICBQcm9qZWN0X3goIEVYRUNfT1BfIEZUX1BvcyAgZHgsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICBkeSApCisgIFByb2plY3RfeCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICAgZHgsCisgICAgICAgICAgICAgRlRfUG9zICAgICAgICAgIGR5ICkKICAgewotICAgIEZUX1VOVVNFRF9FWEVDOworICAgIEZUX1VOVVNFRCggZXhjICk7CiAgICAgRlRfVU5VU0VEKCBkeSApOwogCiAgICAgcmV0dXJuIGR4OwpAQCAtMjU2MywxMCArMjQyNywxMSBAQAogICAvKiAgICBUaGUgZGlzdGFuY2UgaW4gRjI2ZG90NiBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyBGVF9GMjZEb3Q2Ci0gIFByb2plY3RfeSggRVhFQ19PUF8gRlRfUG9zICBkeCwKLSAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIGR5ICkKKyAgUHJvamVjdF95KCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgICBkeCwKKyAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICAgZHkgKQogICB7Ci0gICAgRlRfVU5VU0VEX0VYRUM7CisgICAgRlRfVU5VU0VEKCBleGMgKTsKICAgICBGVF9VTlVTRUQoIGR4ICk7CiAKICAgICByZXR1cm4gZHk7CkBAIC0yNTgzLDEwMSArMjQ0OCwxMDEgQEAKICAgLyogICAgdG8gdGhlIGN1cnJlbnQgZ3JhcGhpY3Mgc3RhdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBDb21wdXRlX0Z1bmNzKCBFWEVDX09QICkKKyAgQ29tcHV0ZV9GdW5jcyggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIGlmICggQ1VSLmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCisgICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCiAgICAgewotICAgICAgLyogSWYgYm90aCB2ZWN0b3JzIHBvaW50IHJpZ2h0d2FyZHMgYWxvbmcgdGhlIHggYXhpcywgc2V0ICAgICAgICAgICAgICovCi0gICAgICAvKiBgYm90aC14LWF4aXMnIHRydWUsIG90aGVyd2lzZSBzZXQgaXQgZmFsc2UuICBUaGUgeCB2YWx1ZXMgb25seSAgICAgKi8KLSAgICAgIC8qIG5lZWQgYmUgdGVzdGVkIGJlY2F1c2UgdGhlIHZlY3RvciBoYXMgYmVlbiBub3JtYWxpc2VkIHRvIGEgdW5pdCAgICAqLwotICAgICAgLyogdmVjdG9yIG9mIGxlbmd0aCAweDQwMDAgPSB1bml0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICBDVVIuR1MuYm90aF94X2F4aXMgPSAoRlRfQm9vbCkoIENVUi5HUy5wcm9qVmVjdG9yLnggPT0gMHg0MDAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnggPT0gMHg0MDAwICk7CisgICAgICAvKiBJZiBib3RoIHZlY3RvcnMgcG9pbnQgcmlnaHR3YXJkcyBhbG9uZyB0aGUgeCBheGlzLCBzZXQgICAgICAgICAgKi8KKyAgICAgIC8qIGBib3RoLXgtYXhpcycgdHJ1ZSwgb3RoZXJ3aXNlIHNldCBpdCBmYWxzZS4gIFRoZSB4IHZhbHVlcyBvbmx5ICAqLworICAgICAgLyogbmVlZCBiZSB0ZXN0ZWQgYmVjYXVzZSB0aGUgdmVjdG9yIGhhcyBiZWVuIG5vcm1hbGlzZWQgdG8gYSB1bml0ICovCisgICAgICAvKiB2ZWN0b3Igb2YgbGVuZ3RoIDB4NDAwMCA9IHVuaXR5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGV4Yy0+R1MuYm90aF94X2F4aXMgPSAoRlRfQm9vbCkoIGV4Yy0+R1MucHJvalZlY3Rvci54ID09IDB4NDAwMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggPT0gMHg0MDAwICk7CiAKICAgICAgIC8qIFRocm93IGF3YXkgcHJvamVjdGlvbiBhbmQgZnJlZWRvbSB2ZWN0b3IgaW5mb3JtYXRpb24gKi8KICAgICAgIC8qIGJlY2F1c2UgdGhlIHBhdGVudHMgZG9uJ3QgYWxsb3cgdGhlbSB0byBiZSBzdG9yZWQuICAgKi8KICAgICAgIC8qIFRoZSByZWxldmFudCBVUyBQYXRlbnRzIGFyZSA1MTU1ODA1IGFuZCA1MzI1NDc5LiAgICAgKi8KLSAgICAgIENVUi5HUy5wcm9qVmVjdG9yLnggPSAwOwotICAgICAgQ1VSLkdTLnByb2pWZWN0b3IueSA9IDA7Ci0gICAgICBDVVIuR1MuZnJlZVZlY3Rvci54ID0gMDsKLSAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnkgPSAwOworICAgICAgZXhjLT5HUy5wcm9qVmVjdG9yLnggPSAwOworICAgICAgZXhjLT5HUy5wcm9qVmVjdG9yLnkgPSAwOworICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggPSAwOworICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnkgPSAwOwogCi0gICAgICBpZiAoIENVUi5HUy5ib3RoX3hfYXhpcyApCisgICAgICBpZiAoIGV4Yy0+R1MuYm90aF94X2F4aXMgKQogICAgICAgewotICAgICAgICBDVVIuZnVuY19wcm9qZWN0ICAgPSBQcm9qZWN0X3g7Ci0gICAgICAgIENVUi5mdW5jX21vdmUgICAgICA9IERpcmVjdF9Nb3ZlX1g7Ci0gICAgICAgIENVUi5mdW5jX21vdmVfb3JpZyA9IERpcmVjdF9Nb3ZlX09yaWdfWDsKKyAgICAgICAgZXhjLT5mdW5jX3Byb2plY3QgICA9IFByb2plY3RfeDsKKyAgICAgICAgZXhjLT5mdW5jX21vdmUgICAgICA9IERpcmVjdF9Nb3ZlX1g7CisgICAgICAgIGV4Yy0+ZnVuY19tb3ZlX29yaWcgPSBEaXJlY3RfTW92ZV9PcmlnX1g7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIENVUi5mdW5jX3Byb2plY3QgICA9IFByb2plY3RfeTsKLSAgICAgICAgQ1VSLmZ1bmNfbW92ZSAgICAgID0gRGlyZWN0X01vdmVfWTsKLSAgICAgICAgQ1VSLmZ1bmNfbW92ZV9vcmlnID0gRGlyZWN0X01vdmVfT3JpZ19ZOworICAgICAgICBleGMtPmZ1bmNfcHJvamVjdCAgID0gUHJvamVjdF95OworICAgICAgICBleGMtPmZ1bmNfbW92ZSAgICAgID0gRGlyZWN0X01vdmVfWTsKKyAgICAgICAgZXhjLT5mdW5jX21vdmVfb3JpZyA9IERpcmVjdF9Nb3ZlX09yaWdfWTsKICAgICAgIH0KIAotICAgICAgaWYgKCBDVVIuR1MuZHVhbFZlY3Rvci54ID09IDB4NDAwMCApCi0gICAgICAgIENVUi5mdW5jX2R1YWxwcm9qID0gUHJvamVjdF94OwotICAgICAgZWxzZSBpZiAoIENVUi5HUy5kdWFsVmVjdG9yLnkgPT0gMHg0MDAwICkKLSAgICAgICAgQ1VSLmZ1bmNfZHVhbHByb2ogPSBQcm9qZWN0X3k7CisgICAgICBpZiAoIGV4Yy0+R1MuZHVhbFZlY3Rvci54ID09IDB4NDAwMCApCisgICAgICAgIGV4Yy0+ZnVuY19kdWFscHJvaiA9IFByb2plY3RfeDsKKyAgICAgIGVsc2UgaWYgKCBleGMtPkdTLmR1YWxWZWN0b3IueSA9PSAweDQwMDAgKQorICAgICAgICBleGMtPmZ1bmNfZHVhbHByb2ogPSBQcm9qZWN0X3k7CiAgICAgICBlbHNlCi0gICAgICAgIENVUi5mdW5jX2R1YWxwcm9qID0gRHVhbF9Qcm9qZWN0OworICAgICAgICBleGMtPmZ1bmNfZHVhbHByb2ogPSBEdWFsX1Byb2plY3Q7CiAKICAgICAgIC8qIEZvcmNlIHJlY2FsY3VsYXRpb24gb2YgY2FjaGVkIGFzcGVjdCByYXRpbyAqLwotICAgICAgQ1VSLnR0X21ldHJpY3MucmF0aW8gPSAwOworICAgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gMDsKIAogICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyAqLwogCi0gICAgaWYgKCBDVVIuR1MuZnJlZVZlY3Rvci54ID09IDB4NDAwMCApCi0gICAgICBDVVIuRl9kb3RfUCA9IENVUi5HUy5wcm9qVmVjdG9yLng7Ci0gICAgZWxzZSBpZiAoIENVUi5HUy5mcmVlVmVjdG9yLnkgPT0gMHg0MDAwICkKLSAgICAgIENVUi5GX2RvdF9QID0gQ1VSLkdTLnByb2pWZWN0b3IueTsKKyAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci54ID09IDB4NDAwMCApCisgICAgICBleGMtPkZfZG90X1AgPSBleGMtPkdTLnByb2pWZWN0b3IueDsKKyAgICBlbHNlIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnkgPT0gMHg0MDAwICkKKyAgICAgIGV4Yy0+Rl9kb3RfUCA9IGV4Yy0+R1MucHJvalZlY3Rvci55OwogICAgIGVsc2UKLSAgICAgIENVUi5GX2RvdF9QID0gKCAoRlRfTG9uZylDVVIuR1MucHJvalZlY3Rvci54ICogQ1VSLkdTLmZyZWVWZWN0b3IueCArCi0gICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpQ1VSLkdTLnByb2pWZWN0b3IueSAqIENVUi5HUy5mcmVlVmVjdG9yLnkgKSA+PgotICAgICAgICAgICAgICAgICAgICAxNDsKKyAgICAgIGV4Yy0+Rl9kb3RfUCA9CisgICAgICAgICggKEZUX0xvbmcpZXhjLT5HUy5wcm9qVmVjdG9yLnggKiBleGMtPkdTLmZyZWVWZWN0b3IueCArCisgICAgICAgICAgKEZUX0xvbmcpZXhjLT5HUy5wcm9qVmVjdG9yLnkgKiBleGMtPkdTLmZyZWVWZWN0b3IueSApID4+IDE0OwogCi0gICAgaWYgKCBDVVIuR1MucHJvalZlY3Rvci54ID09IDB4NDAwMCApCi0gICAgICBDVVIuZnVuY19wcm9qZWN0ID0gKFRUX1Byb2plY3RfRnVuYylQcm9qZWN0X3g7Ci0gICAgZWxzZSBpZiAoIENVUi5HUy5wcm9qVmVjdG9yLnkgPT0gMHg0MDAwICkKLSAgICAgIENVUi5mdW5jX3Byb2plY3QgPSAoVFRfUHJvamVjdF9GdW5jKVByb2plY3RfeTsKKyAgICBpZiAoIGV4Yy0+R1MucHJvalZlY3Rvci54ID09IDB4NDAwMCApCisgICAgICBleGMtPmZ1bmNfcHJvamVjdCA9IChUVF9Qcm9qZWN0X0Z1bmMpUHJvamVjdF94OworICAgIGVsc2UgaWYgKCBleGMtPkdTLnByb2pWZWN0b3IueSA9PSAweDQwMDAgKQorICAgICAgZXhjLT5mdW5jX3Byb2plY3QgPSAoVFRfUHJvamVjdF9GdW5jKVByb2plY3RfeTsKICAgICBlbHNlCi0gICAgICBDVVIuZnVuY19wcm9qZWN0ID0gKFRUX1Byb2plY3RfRnVuYylQcm9qZWN0OworICAgICAgZXhjLT5mdW5jX3Byb2plY3QgPSAoVFRfUHJvamVjdF9GdW5jKVByb2plY3Q7CiAKLSAgICBpZiAoIENVUi5HUy5kdWFsVmVjdG9yLnggPT0gMHg0MDAwICkKLSAgICAgIENVUi5mdW5jX2R1YWxwcm9qID0gKFRUX1Byb2plY3RfRnVuYylQcm9qZWN0X3g7Ci0gICAgZWxzZSBpZiAoIENVUi5HUy5kdWFsVmVjdG9yLnkgPT0gMHg0MDAwICkKLSAgICAgIENVUi5mdW5jX2R1YWxwcm9qID0gKFRUX1Byb2plY3RfRnVuYylQcm9qZWN0X3k7CisgICAgaWYgKCBleGMtPkdTLmR1YWxWZWN0b3IueCA9PSAweDQwMDAgKQorICAgICAgZXhjLT5mdW5jX2R1YWxwcm9qID0gKFRUX1Byb2plY3RfRnVuYylQcm9qZWN0X3g7CisgICAgZWxzZSBpZiAoIGV4Yy0+R1MuZHVhbFZlY3Rvci55ID09IDB4NDAwMCApCisgICAgICBleGMtPmZ1bmNfZHVhbHByb2ogPSAoVFRfUHJvamVjdF9GdW5jKVByb2plY3RfeTsKICAgICBlbHNlCi0gICAgICBDVVIuZnVuY19kdWFscHJvaiA9IChUVF9Qcm9qZWN0X0Z1bmMpRHVhbF9Qcm9qZWN0OworICAgICAgZXhjLT5mdW5jX2R1YWxwcm9qID0gKFRUX1Byb2plY3RfRnVuYylEdWFsX1Byb2plY3Q7CiAKLSAgICBDVVIuZnVuY19tb3ZlICAgICAgPSAoVFRfTW92ZV9GdW5jKURpcmVjdF9Nb3ZlOwotICAgIENVUi5mdW5jX21vdmVfb3JpZyA9IChUVF9Nb3ZlX0Z1bmMpRGlyZWN0X01vdmVfT3JpZzsKKyAgICBleGMtPmZ1bmNfbW92ZSAgICAgID0gKFRUX01vdmVfRnVuYylEaXJlY3RfTW92ZTsKKyAgICBleGMtPmZ1bmNfbW92ZV9vcmlnID0gKFRUX01vdmVfRnVuYylEaXJlY3RfTW92ZV9PcmlnOwogCi0gICAgaWYgKCBDVVIuRl9kb3RfUCA9PSAweDQwMDBMICkKKyAgICBpZiAoIGV4Yy0+Rl9kb3RfUCA9PSAweDQwMDBMICkKICAgICB7Ci0gICAgICBpZiAoIENVUi5HUy5mcmVlVmVjdG9yLnggPT0gMHg0MDAwICkKKyAgICAgIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnggPT0gMHg0MDAwICkKICAgICAgIHsKLSAgICAgICAgQ1VSLmZ1bmNfbW92ZSAgICAgID0gKFRUX01vdmVfRnVuYylEaXJlY3RfTW92ZV9YOwotICAgICAgICBDVVIuZnVuY19tb3ZlX29yaWcgPSAoVFRfTW92ZV9GdW5jKURpcmVjdF9Nb3ZlX09yaWdfWDsKKyAgICAgICAgZXhjLT5mdW5jX21vdmUgICAgICA9IChUVF9Nb3ZlX0Z1bmMpRGlyZWN0X01vdmVfWDsKKyAgICAgICAgZXhjLT5mdW5jX21vdmVfb3JpZyA9IChUVF9Nb3ZlX0Z1bmMpRGlyZWN0X01vdmVfT3JpZ19YOwogICAgICAgfQotICAgICAgZWxzZSBpZiAoIENVUi5HUy5mcmVlVmVjdG9yLnkgPT0gMHg0MDAwICkKKyAgICAgIGVsc2UgaWYgKCBleGMtPkdTLmZyZWVWZWN0b3IueSA9PSAweDQwMDAgKQogICAgICAgewotICAgICAgICBDVVIuZnVuY19tb3ZlICAgICAgPSAoVFRfTW92ZV9GdW5jKURpcmVjdF9Nb3ZlX1k7Ci0gICAgICAgIENVUi5mdW5jX21vdmVfb3JpZyA9IChUVF9Nb3ZlX0Z1bmMpRGlyZWN0X01vdmVfT3JpZ19ZOworICAgICAgICBleGMtPmZ1bmNfbW92ZSAgICAgID0gKFRUX01vdmVfRnVuYylEaXJlY3RfTW92ZV9ZOworICAgICAgICBleGMtPmZ1bmNfbW92ZV9vcmlnID0gKFRUX01vdmVfRnVuYylEaXJlY3RfTW92ZV9PcmlnX1k7CiAgICAgICB9CiAgICAgfQogCiAgICAgLyogYXQgc21hbGwgc2l6ZXMsIEZfZG90X1AgY2FuIGJlY29tZSB0b28gc21hbGwsIHJlc3VsdGluZyAgICovCiAgICAgLyogaW4gb3ZlcmZsb3dzIGFuZCBgc3Bpa2VzJyBpbiBhIG51bWJlciBvZiBnbHlwaHMgbGlrZSBgdycuICovCiAKLSAgICBpZiAoIEZUX0FCUyggQ1VSLkZfZG90X1AgKSA8IDB4NDAwTCApCi0gICAgICBDVVIuRl9kb3RfUCA9IDB4NDAwMEw7CisgICAgaWYgKCBGVF9BQlMoIGV4Yy0+Rl9kb3RfUCApIDwgMHg0MDBMICkKKyAgICAgIGV4Yy0+Rl9kb3RfUCA9IDB4NDAwMEw7CiAKICAgICAvKiBEaXNhYmxlIGNhY2hlZCBhc3BlY3QgcmF0aW8gKi8KLSAgICBDVVIudHRfbWV0cmljcy5yYXRpbyA9IDA7CisgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gMDsKICAgfQogCiAKQEAgLTI3MDAsMzYgKzI1NjUsMzEgQEAKICAgLyogICAgUmV0dXJucyBGQUlMVVJFIGlmIGEgdmVjdG9yIHBhcmFtZXRlciBpcyB6ZXJvLiAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW4gY2FzZSBWeCBhbmQgVnkgYXJlIGJvdGggemVybywgTm9ybWFsaXplKCkgcmV0dXJucyBTVUNDRVNTLCBhbmQgICovCisgIC8qICAgIEluIGNhc2UgVnggYW5kIFZ5IGFyZSBib3RoIHplcm8sIGBOb3JtYWxpemUnIHJldHVybnMgU1VDQ0VTUywgYW5kICAqLwogICAvKiAgICBSIGlzIHVuZGVmaW5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyBGVF9Cb29sCi0gIE5vcm1hbGl6ZSggRVhFQ19PUF8gRlRfRjI2RG90NiAgICAgIFZ4LAotICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBWeSwKLSAgICAgICAgICAgICAgICAgICAgICBGVF9Vbml0VmVjdG9yKiAgUiApCisgIE5vcm1hbGl6ZSggRlRfRjI2RG90NiAgICAgIFZ4LAorICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBWeSwKKyAgICAgICAgICAgICBGVF9Vbml0VmVjdG9yKiAgUiApCiAgIHsKLSAgICBGVF9GMjZEb3Q2ICBXOwotCi0gICAgRlRfVU5VU0VEX0VYRUM7CisgICAgRlRfVmVjdG9yIFY7CiAKIAotICAgIGlmICggRlRfQUJTKCBWeCApIDwgMHg0MDAwTCAmJiBGVF9BQlMoIFZ5ICkgPCAweDQwMDBMICkKKyAgICBpZiAoIFZ4ID09IDAgJiYgVnkgPT0gMCApCiAgICAgewotICAgICAgaWYgKCBWeCA9PSAwICYmIFZ5ID09IDAgKQotICAgICAgewotICAgICAgICAvKiBYWFg6IFVORE9DVU1FTlRFRCEgSXQgc2VlbXMgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byB0cnkgICAqLwotICAgICAgICAvKiAgICAgIHRvIG5vcm1hbGl6ZSB0aGUgdmVjdG9yICgwLDApLiAgUmV0dXJuIGltbWVkaWF0ZWx5LiAqLwotICAgICAgICByZXR1cm4gU1VDQ0VTUzsKLSAgICAgIH0KLQotICAgICAgVnggKj0gMHg0MDAwOwotICAgICAgVnkgKj0gMHg0MDAwOworICAgICAgLyogWFhYOiBVTkRPQ1VNRU5URUQhIEl0IHNlZW1zIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gdHJ5ICAgKi8KKyAgICAgIC8qICAgICAgdG8gbm9ybWFsaXplIHRoZSB2ZWN0b3IgKDAsMCkuICBSZXR1cm4gaW1tZWRpYXRlbHkuICovCisgICAgICByZXR1cm4gU1VDQ0VTUzsKICAgICB9CiAKLSAgICBXID0gRlRfSHlwb3QoIFZ4LCBWeSApOworICAgIFYueCA9IFZ4OworICAgIFYueSA9IFZ5OwogCi0gICAgUi0+eCA9IChGVF9GMkRvdDE0KVRUX0RpdkZpeDE0KCBWeCwgVyApOwotICAgIFItPnkgPSAoRlRfRjJEb3QxNClUVF9EaXZGaXgxNCggVnksIFcgKTsKKyAgICBGVF9WZWN0b3JfTm9ybUxlbiggJlYgKTsKKworICAgIFItPnggPSAoRlRfRjJEb3QxNCkoIFYueCAvIDQgKTsKKyAgICBSLT55ID0gKEZUX0YyRG90MTQpKCBWLnkgLyA0ICk7CiAKICAgICByZXR1cm4gU1VDQ0VTUzsKICAgfQpAQCAtMjc0MiwxMDY1ICsyNjAyLDEyIEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgc3RhdGljIEZUX0Jvb2wKLSAgSW5zX1N4VlRMKCBFWEVDX09QXyBGVF9VU2hvcnQgICAgICAgYUlkeDEsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgIGFJZHgyLAotICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgICBhT3BjLAotICAgICAgICAgICAgICAgICAgICAgIEZUX1VuaXRWZWN0b3IqICBWZWMgKQotICB7Ci0gICAgRlRfTG9uZyAgICAgQSwgQiwgQzsKLSAgICBGVF9WZWN0b3IqICBwMTsKLSAgICBGVF9WZWN0b3IqICBwMjsKLQotCi0gICAgaWYgKCBCT1VORFMoIGFJZHgxLCBDVVIuenAyLm5fcG9pbnRzICkgfHwKLSAgICAgICAgIEJPVU5EUyggYUlkeDIsIENVUi56cDEubl9wb2ludHMgKSApCi0gICAgewotICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApCi0gICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwotICAgICAgcmV0dXJuIEZBSUxVUkU7Ci0gICAgfQotCi0gICAgcDEgPSBDVVIuenAxLmN1ciArIGFJZHgyOwotICAgIHAyID0gQ1VSLnpwMi5jdXIgKyBhSWR4MTsKLQotICAgIEEgPSBwMS0+eCAtIHAyLT54OwotICAgIEIgPSBwMS0+eSAtIHAyLT55OwotCi0gICAgLyogSWYgcDEgPT0gcDIsIFNQVlRMIGFuZCBTRlZUTCBiZWhhdmUgdGhlIHNhbWUgYXMgKi8KLSAgICAvKiBTUFZUQ0FbWF0gYW5kIFNGVlRDQVtYXSwgcmVzcGVjdGl2ZWx5LiAgICAgICAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogQ29uZmlybWVkIGJ5IEdyZWcgSGl0Y2hjb2NrLiAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgIGlmICggQSA9PSAwICYmIEIgPT0gMCApCi0gICAgewotICAgICAgQSAgICA9IDB4NDAwMDsKLSAgICAgIGFPcGMgPSAwOwotICAgIH0KLQotICAgIGlmICggKCBhT3BjICYgMSApICE9IDAgKQotICAgIHsKLSAgICAgIEMgPSAgQjsgICAvKiBjb3VudGVyIGNsb2Nrd2lzZSByb3RhdGlvbiAqLwotICAgICAgQiA9ICBBOwotICAgICAgQSA9IC1DOwotICAgIH0KLQotICAgIE5PUk1hbGl6ZSggQSwgQiwgVmVjICk7Ci0KLSAgICByZXR1cm4gU1VDQ0VTUzsKLSAgfQotCi0KLSAgLyogV2hlbiBub3QgdXNpbmcgdGhlIGJpZyBzd2l0Y2ggc3RhdGVtZW50cywgdGhlIGludGVycHJldGVyIHVzZXMgYSAqLwotICAvKiBjYWxsIHRhYmxlIGRlZmluZWQgbGF0ZXIgYmVsb3cgaW4gdGhpcyBzb3VyY2UuICBFYWNoIG9wY29kZSBtdXN0ICovCi0gIC8qIHRodXMgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24sIGV2ZW4gdHJpdmlhbCBvbmVzLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGV5IGFyZSBhbGwgZGVmaW5lZCB0aGVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSNkZWZpbmUgRE9fU1ZUQ0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfU2hvcnQgIEEsIEI7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQSA9IChGVF9TaG9ydCkoIENVUi5vcGNvZGUgJiAxICkgPDwgMTQ7IFwKLSAgICBCID0gQSBeIChGVF9TaG9ydCkweDQwMDA7ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ1VSLkdTLmZyZWVWZWN0b3IueCA9IEE7ICAgICAgICAgICAgICAgIFwKLSAgICBDVVIuR1MucHJvalZlY3Rvci54ID0gQTsgICAgICAgICAgICAgICAgXAotICAgIENVUi5HUy5kdWFsVmVjdG9yLnggPSBBOyAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBDVVIuR1MuZnJlZVZlY3Rvci55ID0gQjsgICAgICAgICAgICAgICAgXAotICAgIENVUi5HUy5wcm9qVmVjdG9yLnkgPSBCOyAgICAgICAgICAgICAgICBcCi0gICAgQ1VSLkdTLmR1YWxWZWN0b3IueSA9IEI7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIENPTVBVVEVfRnVuY3MoKTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotCi0jZGVmaW5lIERPX1NQVlRDQSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX1Nob3J0ICBBLCBCOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEEgPSAoRlRfU2hvcnQpKCBDVVIub3Bjb2RlICYgMSApIDw8IDE0OyBcCi0gICAgQiA9IEEgXiAoRlRfU2hvcnQpMHg0MDAwOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIENVUi5HUy5wcm9qVmVjdG9yLnggPSBBOyAgICAgICAgICAgICAgICBcCi0gICAgQ1VSLkdTLmR1YWxWZWN0b3IueCA9IEE7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIENVUi5HUy5wcm9qVmVjdG9yLnkgPSBCOyAgICAgICAgICAgICAgICBcCi0gICAgQ1VSLkdTLmR1YWxWZWN0b3IueSA9IEI7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdVRVNTX1ZFQ1RPUiggZnJlZVZlY3RvciApOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBDT01QVVRFX0Z1bmNzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLQotI2RlZmluZSBET19TRlZUQ0EgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9TaG9ydCAgQSwgQjsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBID0gKEZUX1Nob3J0KSggQ1VSLm9wY29kZSAmIDEgKSA8PCAxNDsgXAotICAgIEIgPSBBIF4gKEZUX1Nob3J0KTB4NDAwMDsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBDVVIuR1MuZnJlZVZlY3Rvci54ID0gQTsgICAgICAgICAgICAgICAgXAotICAgIENVUi5HUy5mcmVlVmVjdG9yLnkgPSBCOyAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHVUVTU19WRUNUT1IoIHByb2pWZWN0b3IgKTsgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ09NUFVURV9GdW5jcygpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0KLSNkZWZpbmUgRE9fU1BWVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIElOU19TeFZUTCggKEZUX1VTaG9ydClhcmdzWzFdLCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgKEZUX1VTaG9ydClhcmdzWzBdLCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgQ1VSLm9wY29kZSwgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgJkNVUi5HUy5wcm9qVmVjdG9yICkgPT0gU1VDQ0VTUyApIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIENVUi5HUy5kdWFsVmVjdG9yID0gQ1VSLkdTLnByb2pWZWN0b3I7ICAgICAgICAgIFwKLSAgICAgIEdVRVNTX1ZFQ1RPUiggZnJlZVZlY3RvciApOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIENPTVBVVEVfRnVuY3MoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9Ci0KLQotI2RlZmluZSBET19TRlZUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggSU5TX1N4VlRMKCAoRlRfVVNob3J0KWFyZ3NbMV0sICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAoRlRfVVNob3J0KWFyZ3NbMF0sICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBDVVIub3Bjb2RlLCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAmQ1VSLkdTLmZyZWVWZWN0b3IgKSA9PSBTVUNDRVNTICkgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgR1VFU1NfVkVDVE9SKCBwcm9qVmVjdG9yICk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgQ09NUFVURV9GdW5jcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQotCi0jZGVmaW5lIERPX1NGVlRQViAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdVRVNTX1ZFQ1RPUiggcHJvalZlY3RvciApOyAgICAgICAgICAgIFwKLSAgICBDVVIuR1MuZnJlZVZlY3RvciA9IENVUi5HUy5wcm9qVmVjdG9yOyBcCi0gICAgQ09NUFVURV9GdW5jcygpOwotCi0KLSNkZWZpbmUgRE9fU1BWRlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9TaG9ydCAgUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9Mb25nICAgWCwgWTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAvKiBPbmx5IHVzZSBsb3cgMTZiaXRzLCB0aGVuIHNpZ24gZXh0ZW5kICovIFwKLSAgICBTID0gKEZUX1Nob3J0KWFyZ3NbMV07ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZID0gKEZUX0xvbmcpUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTID0gKEZUX1Nob3J0KWFyZ3NbMF07ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBYID0gKEZUX0xvbmcpUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBOT1JNYWxpemUoIFgsIFksICZDVVIuR1MucHJvalZlY3RvciApOyAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBDVVIuR1MuZHVhbFZlY3RvciA9IENVUi5HUy5wcm9qVmVjdG9yOyAgICAgIFwKLSAgICBHVUVTU19WRUNUT1IoIGZyZWVWZWN0b3IgKTsgICAgICAgICAgICAgICAgIFwKLSAgICBDT01QVVRFX0Z1bmNzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0KLSNkZWZpbmUgRE9fU0ZWRlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9TaG9ydCAgUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9Mb25nICAgWCwgWTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAvKiBPbmx5IHVzZSBsb3cgMTZiaXRzLCB0aGVuIHNpZ24gZXh0ZW5kICovIFwKLSAgICBTID0gKEZUX1Nob3J0KWFyZ3NbMV07ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZID0gKEZUX0xvbmcpUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTID0gKEZUX1Nob3J0KWFyZ3NbMF07ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBYID0gUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBOT1JNYWxpemUoIFgsIFksICZDVVIuR1MuZnJlZVZlY3RvciApOyAgICAgIFwKLSAgICBHVUVTU19WRUNUT1IoIHByb2pWZWN0b3IgKTsgICAgICAgICAgICAgICAgIFwKLSAgICBDT01QVVRFX0Z1bmNzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0KLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotI2RlZmluZSBET19HUFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIENVUi5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKSAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgYXJnc1swXSA9IENVUi5HUy5ib3RoX3hfYXhpcyA/IDB4NDAwMCA6IDA7IFwKLSAgICAgIGFyZ3NbMV0gPSBDVVIuR1MuYm90aF94X2F4aXMgPyAwIDogMHg0MDAwOyBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBhcmdzWzBdID0gQ1VSLkdTLnByb2pWZWN0b3IueDsgICAgICAgICAgICAgXAotICAgICAgYXJnc1sxXSA9IENVUi5HUy5wcm9qVmVjdG9yLnk7ICAgICAgICAgICAgIFwKLSAgICB9Ci0jZWxzZQotI2RlZmluZSBET19HUFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhcmdzWzBdID0gQ1VSLkdTLnByb2pWZWN0b3IueDsgICAgICAgICAgICAgICBcCi0gICAgYXJnc1sxXSA9IENVUi5HUy5wcm9qVmVjdG9yLnk7Ci0jZW5kaWYKLQotCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSNkZWZpbmUgRE9fR0ZWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBDVVIuZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGFyZ3NbMF0gPSBDVVIuR1MuYm90aF94X2F4aXMgPyAweDQwMDAgOiAwOyBcCi0gICAgICBhcmdzWzFdID0gQ1VSLkdTLmJvdGhfeF9heGlzID8gMCA6IDB4NDAwMDsgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgYXJnc1swXSA9IENVUi5HUy5mcmVlVmVjdG9yLng7ICAgICAgICAgICAgIFwKLSAgICAgIGFyZ3NbMV0gPSBDVVIuR1MuZnJlZVZlY3Rvci55OyAgICAgICAgICAgICBcCi0gICAgfQotI2Vsc2UKLSNkZWZpbmUgRE9fR0ZWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYXJnc1swXSA9IENVUi5HUy5mcmVlVmVjdG9yLng7ICAgICAgICAgICAgICAgXAotICAgIGFyZ3NbMV0gPSBDVVIuR1MuZnJlZVZlY3Rvci55OwotI2VuZGlmCi0KLQotI2RlZmluZSBET19TUlAwICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBDVVIuR1MucnAwID0gKEZUX1VTaG9ydClhcmdzWzBdOwotCi0KLSNkZWZpbmUgRE9fU1JQMSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ1VSLkdTLnJwMSA9IChGVF9VU2hvcnQpYXJnc1swXTsKLQotCi0jZGVmaW5lIERPX1NSUDIgICAgICAgICAgICAgICAgICAgICAgXAotICAgIENVUi5HUy5ycDIgPSAoRlRfVVNob3J0KWFyZ3NbMF07Ci0KLQotI2RlZmluZSBET19SVEhHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ1VSLkdTLnJvdW5kX3N0YXRlID0gVFRfUm91bmRfVG9fSGFsZl9HcmlkOyAgICAgICAgIFwKLSAgICBDVVIuZnVuY19yb3VuZCA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX1RvX0hhbGZfR3JpZDsKLQotCi0jZGVmaW5lIERPX1JURyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ1VSLkdTLnJvdW5kX3N0YXRlID0gVFRfUm91bmRfVG9fR3JpZDsgICAgICAgICBcCi0gICAgQ1VSLmZ1bmNfcm91bmQgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9Ub19HcmlkOwotCi0KLSNkZWZpbmUgRE9fUlRERyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ1VSLkdTLnJvdW5kX3N0YXRlID0gVFRfUm91bmRfVG9fRG91YmxlX0dyaWQ7ICAgICAgICAgXAotICAgIENVUi5mdW5jX3JvdW5kID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfVG9fRG91YmxlX0dyaWQ7Ci0KLQotI2RlZmluZSBET19SVVRHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIENVUi5HUy5yb3VuZF9zdGF0ZSA9IFRUX1JvdW5kX1VwX1RvX0dyaWQ7ICAgICAgICAgXAotICAgIENVUi5mdW5jX3JvdW5kID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfVXBfVG9fR3JpZDsKLQotCi0jZGVmaW5lIERPX1JEVEcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBDVVIuR1Mucm91bmRfc3RhdGUgPSBUVF9Sb3VuZF9Eb3duX1RvX0dyaWQ7ICAgICAgICAgXAotICAgIENVUi5mdW5jX3JvdW5kID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfRG93bl9Ub19HcmlkOwotCi0KLSNkZWZpbmUgRE9fUk9GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBDVVIuR1Mucm91bmRfc3RhdGUgPSBUVF9Sb3VuZF9PZmY7ICAgICAgICAgIFwKLSAgICBDVVIuZnVuY19yb3VuZCA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX05vbmU7Ci0KLQotI2RlZmluZSBET19TUk9VTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTRVRfU3VwZXJSb3VuZCggMHg0MDAwLCBhcmdzWzBdICk7ICAgICAgICAgICBcCi0gICAgQ1VSLkdTLnJvdW5kX3N0YXRlID0gVFRfUm91bmRfU3VwZXI7ICAgICAgICAgXAotICAgIENVUi5mdW5jX3JvdW5kID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfU3VwZXI7Ci0KLQotI2RlZmluZSBET19TNDVST1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTRVRfU3VwZXJSb3VuZCggMHgyRDQxLCBhcmdzWzBdICk7ICAgICAgICAgICAgICBcCi0gICAgQ1VSLkdTLnJvdW5kX3N0YXRlID0gVFRfUm91bmRfU3VwZXJfNDU7ICAgICAgICAgXAotICAgIENVUi5mdW5jX3JvdW5kID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfU3VwZXJfNDU7Ci0KLQotI2RlZmluZSBET19TTE9PUCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBhcmdzWzBdIDwgMCApICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBCYWRfQXJndW1lbnQgKTsgXAotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBDVVIuR1MubG9vcCA9IGFyZ3NbMF07Ci0KLQotI2RlZmluZSBET19TTUQgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIENVUi5HUy5taW5pbXVtX2Rpc3RhbmNlID0gYXJnc1swXTsKLQotCi0jZGVmaW5lIERPX1NDVlRDSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ1VSLkdTLmNvbnRyb2xfdmFsdWVfY3V0aW4gPSAoRlRfRjI2RG90NilhcmdzWzBdOwotCi0KLSNkZWZpbmUgRE9fU1NXQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIENVUi5HUy5zaW5nbGVfd2lkdGhfY3V0aW4gPSAoRlRfRjI2RG90NilhcmdzWzBdOwotCi0KLSNkZWZpbmUgRE9fU1NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ1VSLkdTLnNpbmdsZV93aWR0aF92YWx1ZSA9IEZUX011bEZpeCggYXJnc1swXSwgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUi50dF9tZXRyaWNzLnNjYWxlICk7Ci0KLQotI2RlZmluZSBET19GTElQT04gICAgICAgICAgICBcCi0gICAgQ1VSLkdTLmF1dG9fZmxpcCA9IFRSVUU7Ci0KLQotI2RlZmluZSBET19GTElQT0ZGICAgICAgICAgICAgXAotICAgIENVUi5HUy5hdXRvX2ZsaXAgPSBGQUxTRTsKLQotCi0jZGVmaW5lIERPX1NEQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBDVVIuR1MuZGVsdGFfYmFzZSA9IChGVF9VU2hvcnQpYXJnc1swXTsKLQotCi0jZGVmaW5lIERPX1NEUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIChGVF9VTG9uZylhcmdzWzBdID4gNlVMICkgICAgICAgICAgICAgXAotICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEJhZF9Bcmd1bWVudCApOyAgICBcCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIENVUi5HUy5kZWx0YV9zaGlmdCA9IChGVF9VU2hvcnQpYXJnc1swXTsKLQotCi0jZGVmaW5lIERPX01EICAvKiBub3RoaW5nICovCi0KLQotI2RlZmluZSBET19NUFBFTSAgICAgICAgICAgICAgXAotICAgIGFyZ3NbMF0gPSBDVVJfRnVuY19jdXJfcHBlbSgpOwotCi0KLSAgLyogTm90ZTogVGhlIHBvaW50U2l6ZSBzaG91bGQgYmUgaXJyZWxldmFudCBpbiBhIGdpdmVuIGZvbnQgcHJvZ3JhbTsgKi8KLSAgLyogICAgICAgd2UgdGh1cyBkZWNpZGUgdG8gcmV0dXJuIG9ubHkgdGhlIHBwZW0uICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZiAwCi0KLSNkZWZpbmUgRE9fTVBTICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYXJnc1swXSA9IENVUi5tZXRyaWNzLnBvaW50U2l6ZTsKLQotI2Vsc2UKLQotI2RlZmluZSBET19NUFMgICAgICAgICAgICAgICAgXAotICAgIGFyZ3NbMF0gPSBDVVJfRnVuY19jdXJfcHBlbSgpOwotCi0jZW5kaWYgLyogMCAqLwotCi0KLSNkZWZpbmUgRE9fRFVQICAgICAgICAgXAotICAgIGFyZ3NbMV0gPSBhcmdzWzBdOwotCi0KLSNkZWZpbmUgRE9fQ0xFQVIgICAgIFwKLSAgICBDVVIubmV3X3RvcCA9IDA7Ci0KLQotI2RlZmluZSBET19TV0FQICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9Mb25nICBMOyAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBMICAgICAgID0gYXJnc1swXTsgXAotICAgIGFyZ3NbMF0gPSBhcmdzWzFdOyBcCi0gICAgYXJnc1sxXSA9IEw7ICAgICAgIFwKLSAgfQotCi0KLSNkZWZpbmUgRE9fREVQVEggICAgICAgXAotICAgIGFyZ3NbMF0gPSBDVVIudG9wOwotCi0KLSNkZWZpbmUgRE9fQ0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9Mb25nICBMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBMID0gYXJnc1swXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIEwgPD0gMCB8fCBMID4gQ1VSLmFyZ3MgKSAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7IFwKLSAgICAgIGFyZ3NbMF0gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGFyZ3NbMF0gPSBDVVIuc3RhY2tbQ1VSLmFyZ3MgLSBMXTsgICAgICAgICAgIFwKLSAgfQotCi0KLSNkZWZpbmUgRE9fSlJPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBhcmdzWzFdICE9IDAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmICggYXJnc1swXSA9PSAwICYmIENVUi5hcmdzID09IDAgKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBCYWRfQXJndW1lbnQgKTsgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgQ1VSLklQICs9IGFyZ3NbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmICggQ1VSLklQIDwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICggQ1VSLmNhbGxUb3AgPiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICAgXAotICAgICAgICAgICAgIENVUi5JUCA+IENVUi5jYWxsU3RhY2tbQ1VSLmNhbGxUb3AgLSAxXS5EZWYtPmVuZCApICkgIFwKLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEJhZF9Bcmd1bWVudCApOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBDVVIuc3RlcF9pbnMgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQotCi0jZGVmaW5lIERPX0pNUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIGFyZ3NbMF0gPT0gMCAmJiBDVVIuYXJncyA9PSAwICkgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEJhZF9Bcmd1bWVudCApOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ1VSLklQICs9IGFyZ3NbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIENVUi5JUCA8IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXAotICAgICAgICAgKCBDVVIuY2FsbFRvcCA+IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgICBcCi0gICAgICAgICAgIENVUi5JUCA+IENVUi5jYWxsU3RhY2tbQ1VSLmNhbGxUb3AgLSAxXS5EZWYtPmVuZCApICkgIFwKLSAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBCYWRfQXJndW1lbnQgKTsgICAgICAgICAgICAgICAgICAgICAgXAotICAgIENVUi5zdGVwX2lucyA9IEZBTFNFOwotCi0KLSNkZWZpbmUgRE9fSlJPRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBhcmdzWzFdID09IDAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmICggYXJnc1swXSA9PSAwICYmIENVUi5hcmdzID09IDAgKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBCYWRfQXJndW1lbnQgKTsgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgQ1VSLklQICs9IGFyZ3NbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmICggQ1VSLklQIDwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCi0gICAgICAgICAgICggQ1VSLmNhbGxUb3AgPiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICAgXAotICAgICAgICAgICAgIENVUi5JUCA+IENVUi5jYWxsU3RhY2tbQ1VSLmNhbGxUb3AgLSAxXS5EZWYtPmVuZCApICkgIFwKLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEJhZF9Bcmd1bWVudCApOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBDVVIuc3RlcF9pbnMgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQotCi0jZGVmaW5lIERPX0xUICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFyZ3NbMF0gPSAoIGFyZ3NbMF0gPCBhcmdzWzFdICk7Ci0KLQotI2RlZmluZSBET19MVEVRICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYXJnc1swXSA9ICggYXJnc1swXSA8PSBhcmdzWzFdICk7Ci0KLQotI2RlZmluZSBET19HVCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhcmdzWzBdID0gKCBhcmdzWzBdID4gYXJnc1sxXSApOwotCi0KLSNkZWZpbmUgRE9fR1RFUSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFyZ3NbMF0gPSAoIGFyZ3NbMF0gPj0gYXJnc1sxXSApOwotCi0KLSNkZWZpbmUgRE9fRVEgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFyZ3NbMF0gPSAoIGFyZ3NbMF0gPT0gYXJnc1sxXSApOwotCi0KLSNkZWZpbmUgRE9fTkVRICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFyZ3NbMF0gPSAoIGFyZ3NbMF0gIT0gYXJnc1sxXSApOwotCi0KLSNkZWZpbmUgRE9fT0REICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYXJnc1swXSA9ICggKCBDVVJfRnVuY19yb3VuZCggYXJnc1swXSwgMCApICYgMTI3ICkgPT0gNjQgKTsKLQotCi0jZGVmaW5lIERPX0VWRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYXJnc1swXSA9ICggKCBDVVJfRnVuY19yb3VuZCggYXJnc1swXSwgMCApICYgMTI3ICkgPT0gMCApOwotCi0KLSNkZWZpbmUgRE9fQU5EICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFyZ3NbMF0gPSAoIGFyZ3NbMF0gJiYgYXJnc1sxXSApOwotCi0KLSNkZWZpbmUgRE9fT1IgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFyZ3NbMF0gPSAoIGFyZ3NbMF0gfHwgYXJnc1sxXSApOwotCi0KLSNkZWZpbmUgRE9fTk9UICAgICAgICAgIFwKLSAgICBhcmdzWzBdID0gIWFyZ3NbMF07Ci0KLQotI2RlZmluZSBET19BREQgICAgICAgICAgXAotICAgIGFyZ3NbMF0gKz0gYXJnc1sxXTsKLQotCi0jZGVmaW5lIERPX1NVQiAgICAgICAgICBcCi0gICAgYXJnc1swXSAtPSBhcmdzWzFdOwotCi0KLSNkZWZpbmUgRE9fRElWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBhcmdzWzFdID09IDAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIERpdmlkZV9CeV9aZXJvICk7ICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBhcmdzWzBdID0gRlRfTXVsRGl2X05vX1JvdW5kKCBhcmdzWzBdLCA2NEwsIGFyZ3NbMV0gKTsKLQotCi0jZGVmaW5lIERPX01VTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhcmdzWzBdID0gRlRfTXVsRGl2KCBhcmdzWzBdLCBhcmdzWzFdLCA2NEwgKTsKLQotCi0jZGVmaW5lIERPX0FCUyAgICAgICAgICAgICAgICAgICBcCi0gICAgYXJnc1swXSA9IEZUX0FCUyggYXJnc1swXSApOwotCi0KLSNkZWZpbmUgRE9fTkVHICAgICAgICAgIFwKLSAgICBhcmdzWzBdID0gLWFyZ3NbMF07Ci0KLQotI2RlZmluZSBET19GTE9PUiAgICBcCi0gICAgYXJnc1swXSA9IEZUX1BJWF9GTE9PUiggYXJnc1swXSApOwotCi0KLSNkZWZpbmUgRE9fQ0VJTElORyAgICAgICAgICAgICAgICAgICAgXAotICAgIGFyZ3NbMF0gPSBGVF9QSVhfQ0VJTCggYXJnc1swXSApOwotCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0KLSNkZWZpbmUgRE9fUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBGVF9VTG9uZyAgSSA9IChGVF9VTG9uZylhcmdzWzBdOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBpZiAoIEJPVU5EU0woIEksIENVUi5zdG9yZVNpemUgKSApICAgICAgICAgICAgICAgICAgIFwKLSAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgQVJSQVlfQk9VTkRfRVJST1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICBhcmdzWzBdID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIC8qIHN1YnBpeGVsIGhpbnRpbmcgLSBhdm9pZCBUeXBlbWFuIERzdHJva2UgYW5kICovIFwKLSAgICAgICAvKiBJU3Ryb2tlIGFuZCBWYWN1Zm9ybSByb3VuZHMgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFwKLSAgICAgICAgICAgIENVUi5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBcCi0gICAgICAgICAgICAoICggSSA9PSAyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAgICAgXAotICAgICAgICAgICAgICAgICggQ1VSLmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzICYgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICggU1BIX0ZERUZfU1BBQ0lOR18xIHwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIFNQSF9GREVGX1NQQUNJTkdfMiApICAgICAgICAgKSApIHx8ICAgXAotICAgICAgICAgICAgICAoIEkgPT0gMjIgICAgICAgICAgICAgICAgICAgICAgJiYgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoIENVUi5zcGhfaW5fZnVuY19mbGFncyAgICAmICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBTUEhfRkRFRl9UWVBFTUFOX1NUUk9LRVMgKSApICAgICAgIHx8ICAgXAotICAgICAgICAgICAgICAoIEkgPT0gOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgICAgIFwKLSAgICAgICAgICAgICAgICAoIENVUi5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyAmICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBTUEhfRkRFRl9WQUNVRk9STV9ST1VORF8xICAgICAgKSAmJiAgICAgXAotICAgICAgICAgICAgICAgICAgQ1VSLml1cF9jYWxsZWQgICAgICAgICAgICAgICAgICAgKSApICkgIFwKLSAgICAgICAgIGFyZ3NbMF0gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgYXJnc1swXSA9IENVUi5zdG9yYWdlW0ldOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICB9Ci0KLSNlbHNlIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KLQotI2RlZmluZSBET19SUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIEZUX1VMb25nICBJID0gKEZUX1VMb25nKWFyZ3NbMF07ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIGlmICggQk9VTkRTTCggSSwgQ1VSLnN0b3JlU2l6ZSApICkgXAotICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkgICAgICBcCi0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgQVJSQVlfQk9VTkRfRVJST1I7ICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgYXJnc1swXSA9IDA7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIGFyZ3NbMF0gPSBDVVIuc3RvcmFnZVtJXTsgICAgICAgIFwKLSAgIH0KLQotI2VuZGlmIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KLQotCi0jZGVmaW5lIERPX1dTICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgRlRfVUxvbmcgIEkgPSAoRlRfVUxvbmcpYXJnc1swXTsgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgaWYgKCBCT1VORFNMKCBJLCBDVVIuc3RvcmVTaXplICkgKSBcCi0gICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKSAgICAgIFwKLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICBBUlJBWV9CT1VORF9FUlJPUjsgICAgICAgICAgICAgXAotICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIENVUi5zdG9yYWdlW0ldID0gYXJnc1sxXTsgICAgICAgIFwKLSAgIH0KLQotCi0jZGVmaW5lIERPX1JDVlQgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBGVF9VTG9uZyAgSSA9IChGVF9VTG9uZylhcmdzWzBdOyAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBpZiAoIEJPVU5EU0woIEksIENVUi5jdnRTaXplICkgKSAgICBcCi0gICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICBBUlJBWV9CT1VORF9FUlJPUjsgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICBhcmdzWzBdID0gMDsgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgYXJnc1swXSA9IENVUl9GdW5jX3JlYWRfY3Z0KCBJICk7IFwKLSAgIH0KLQotCi0jZGVmaW5lIERPX1dDVlRQICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBGVF9VTG9uZyAgSSA9IChGVF9VTG9uZylhcmdzWzBdOyAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBpZiAoIEJPVU5EU0woIEksIENVUi5jdnRTaXplICkgKSAgICBcCi0gICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICBBUlJBWV9CT1VORF9FUlJPUjsgICAgICAgICAgICAgIFwKLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBDVVJfRnVuY193cml0ZV9jdnQoIEksIGFyZ3NbMV0gKTsgXAotICAgfQotCi0KLSNkZWZpbmUgRE9fV0NWVEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBGVF9VTG9uZyAgSSA9IChGVF9VTG9uZylhcmdzWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBpZiAoIEJPVU5EU0woIEksIENVUi5jdnRTaXplICkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIEFSUkFZX0JPVU5EX0VSUk9SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgQ1VSLmN2dFtJXSA9IEZUX011bEZpeCggYXJnc1sxXSwgQ1VSLnR0X21ldHJpY3Muc2NhbGUgKTsgXAotICAgfQotCi0KLSNkZWZpbmUgRE9fREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggRGVidWdfT3BDb2RlICk7Ci0KLQotI2RlZmluZSBET19ST1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhcmdzWzBdID0gQ1VSX0Z1bmNfcm91bmQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYXJnc1swXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIENVUi50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbQ1VSLm9wY29kZSAtIDB4NjhdICk7Ci0KLQotI2RlZmluZSBET19OUk9VTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYXJnc1swXSA9IFJPVU5EX05vbmUoIGFyZ3NbMF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSLnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1tDVVIub3Bjb2RlIC0gMHg2Q10gKTsKLQotCi0jZGVmaW5lIERPX01BWCAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIGFyZ3NbMV0gPiBhcmdzWzBdICkgXAotICAgICAgYXJnc1swXSA9IGFyZ3NbMV07Ci0KLQotI2RlZmluZSBET19NSU4gICAgICAgICAgICAgICBcCi0gICAgaWYgKCBhcmdzWzFdIDwgYXJnc1swXSApIFwKLSAgICAgIGFyZ3NbMF0gPSBhcmdzWzFdOwotCi0KLSNpZm5kZWYgVFRfQ09ORklHX09QVElPTl9JTlRFUlBSRVRFUl9TV0lUQ0gKLQotCi0jdW5kZWYgIEFSUkFZX0JPVU5EX0VSUk9SCi0jZGVmaW5lIEFSUkFZX0JPVU5EX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOyBcCi0gICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU1ZUQ0FbYV06ICAgICBTZXQgKEYgYW5kIFApIFZlY3RvcnMgdG8gQ29vcmRpbmF0ZSBBeGlzICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgwMC0weDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIEluc19TVlRDQSggSU5TX0FSRyApCi0gIHsKLSAgICBET19TVlRDQQotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNQVlRDQVthXTogICAgU2V0IFBWZWN0b3IgdG8gQ29vcmRpbmF0ZSBBeGlzICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MDItMHgwMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfU1BWVENBKCBJTlNfQVJHICkKLSAgewotICAgIERPX1NQVlRDQQotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNGVlRDQVthXTogICAgU2V0IEZWZWN0b3IgdG8gQ29vcmRpbmF0ZSBBeGlzICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MDQtMHgwNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfU0ZWVENBKCBJTlNfQVJHICkKLSAgewotICAgIERPX1NGVlRDQQotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNQVlRMW2FdOiAgICAgU2V0IFBWZWN0b3IgVG8gTGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MDYtMHgwNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfU1BWVEwoIElOU19BUkcgKQotICB7Ci0gICAgRE9fU1BWVEwKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTRlZUTFthXTogICAgIFNldCBGVmVjdG9yIFRvIExpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDA4LTB4MDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljIHZvaWQKLSAgSW5zX1NGVlRMKCBJTlNfQVJHICkKLSAgewotICAgIERPX1NGVlRMCi0gIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU0ZWVFBWW106ICAgICBTZXQgRlZlY3RvciBUbyBQVmVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgwRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIEluc19TRlZUUFYoIElOU19BUkcgKQotICB7Ci0gICAgRE9fU0ZWVFBWCi0gIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU1BWRlNbXTogICAgICBTZXQgUFZlY3RvciBGcm9tIFN0YWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgwQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIGYyLjE0IGYyLjE0IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIEluc19TUFZGUyggSU5TX0FSRyApCi0gIHsKLSAgICBET19TUFZGUwotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNGVkZTW106ICAgICAgU2V0IEZWZWN0b3IgRnJvbSBTdGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBmMi4xNCBmMi4xNCAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfU0ZWRlMoIElOU19BUkcgKQotICB7Ci0gICAgRE9fU0ZWRlMKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBHUFZbXTogICAgICAgIEdldCBQcm9qZWN0aW9uIFZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgZWYyLjE0IC0tPiBlZjIuMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljIHZvaWQKLSAgSW5zX0dQViggSU5TX0FSRyApCi0gIHsKLSAgICBET19HUFYKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qIEdGVltdOiAgICAgICAgR2V0IEZyZWVkb20gVmVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBlZjIuMTQgLS0+IGVmMi4xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfR0ZWKCBJTlNfQVJHICkKLSAgewotICAgIERPX0dGVgotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNSUDBbXTogICAgICAgU2V0IFJlZmVyZW5jZSBQb2ludCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfU1JQMCggSU5TX0FSRyApCi0gIHsKLSAgICBET19TUlAwCi0gIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU1JQMVtdOiAgICAgICBTZXQgUmVmZXJlbmNlIFBvaW50IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIEluc19TUlAxKCBJTlNfQVJHICkKLSAgewotICAgIERPX1NSUDEKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTUlAyW106ICAgICAgIFNldCBSZWZlcmVuY2UgUG9pbnQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljIHZvaWQKLSAgSW5zX1NSUDIoIElOU19BUkcgKQotICB7Ci0gICAgRE9fU1JQMgotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFJUSEdbXTogICAgICAgUm91bmQgVG8gSGFsZiBHcmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfUlRIRyggSU5TX0FSRyApCi0gIHsKLSAgICBET19SVEhHCi0gIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUlRHW106ICAgICAgICBSb3VuZCBUbyBHcmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIEluc19SVEcoIElOU19BUkcgKQotICB7Ci0gICAgRE9fUlRHCi0gIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiBSVERHW106ICAgICAgIFJvdW5kIFRvIERvdWJsZSBHcmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljIHZvaWQKLSAgSW5zX1JUREcoIElOU19BUkcgKQotICB7Ci0gICAgRE9fUlRERwotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogUlVUR1tdOiAgICAgICBSb3VuZCBVcCBUbyBHcmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg3QyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIEluc19SVVRHKCBJTlNfQVJHICkKLSAgewotICAgIERPX1JVVEcKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBSRFRHW106ICAgICAgIFJvdW5kIERvd24gVG8gR3JpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDdEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljIHZvaWQKLSAgSW5zX1JEVEcoIElOU19BUkcgKQotICB7Ci0gICAgRE9fUkRURwotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFJPRkZbXTogICAgICAgUm91bmQgT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4N0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfUk9GRiggSU5TX0FSRyApCi0gIHsKLSAgICBET19ST0ZGCi0gIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU1JPVU5EW106ICAgICBTdXBlciBST1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIEVpbnQ4IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIEluc19TUk9VTkQoIElOU19BUkcgKQotICB7Ci0gICAgRE9fU1JPVU5ECi0gIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUzQ1Uk9VTkRbXTogICBTdXBlciBST1VORCA0NSBkZWdyZWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg3NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIEluc19TNDVST1VORCggSU5TX0FSRyApCi0gIHsKLSAgICBET19TNDVST1VORAotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNMT09QW106ICAgICAgU2V0IExPT1AgdmFyaWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBpbnQzMj8gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfU0xPT1AoIElOU19BUkcgKQotICB7Ci0gICAgRE9fU0xPT1AKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTTURbXTogICAgICAgIFNldCBNaW5pbXVtIERpc3RhbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDFBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljIHZvaWQKLSAgSW5zX1NNRCggSU5TX0FSRyApCi0gIHsKLSAgICBET19TTUQKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTQ1ZUQ0lbXTogICAgIFNldCBDb250cm9sIFZhbHVlIFRhYmxlIEN1dCBJbiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljIHZvaWQKLSAgSW5zX1NDVlRDSSggSU5TX0FSRyApCi0gIHsKLSAgICBET19TQ1ZUQ0kKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTU1dDSVtdOiAgICAgIFNldCBTaW5nbGUgV2lkdGggQ3V0IEluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDFFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljIHZvaWQKLSAgSW5zX1NTV0NJKCBJTlNfQVJHICkKLSAgewotICAgIERPX1NTV0NJCi0gIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU1NXW106ICAgICAgICBTZXQgU2luZ2xlIFdpZHRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgxRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIGludDMyPyAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIEluc19TU1coIElOU19BUkcgKQotICB7Ci0gICAgRE9fU1NXCi0gIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRkxJUE9OW106ICAgICBTZXQgYXV0by1GTElQIHRvIE9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg0RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIEluc19GTElQT04oIElOU19BUkcgKQotICB7Ci0gICAgRE9fRkxJUE9OCi0gIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRkxJUE9GRltdOiAgICBTZXQgYXV0by1GTElQIHRvIE9GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg0RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIEluc19GTElQT0ZGKCBJTlNfQVJHICkKLSAgewotICAgIERPX0ZMSVBPRkYKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTQU5HV1tdOiAgICAgIFNldCBBTkdsZSBXZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljIHZvaWQKLSAgSW5zX1NBTkdXKCBJTlNfQVJHICkKLSAgewotICAgIC8qIGluc3RydWN0aW9uIG5vdCBzdXBwb3J0ZWQgYW55bW9yZSAqLwotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNEQltdOiAgICAgICAgU2V0IERlbHRhIEJhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfU0RCKCBJTlNfQVJHICkKLSAgewotICAgIERPX1NEQgotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNEU1tdOiAgICAgICAgU2V0IERlbHRhIFNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfU0RTKCBJTlNfQVJHICkKLSAgewotICAgIERPX1NEUwotICB9CisjZGVmaW5lIEFSUkFZX0JPVU5EX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7IFwKKyAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM4MTAsOSArMjYxNywxMCBAQAogICAvKiBTdGFjazogICAgICAgIC0tPiBFdWludDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19NUFBFTSggSU5TX0FSRyApCisgIEluc19NUFBFTSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSAgICBET19NUFBFTQorICAgIGFyZ3NbMF0gPSBleGMtPmZ1bmNfY3VyX3BwZW0oIGV4YyApOwogICB9CiAKIApAQCAtMzgyMywyMiArMjYzMSwyOSBAQAogICAvKiBTdGFjazogICAgICAgIC0tPiBFdWludDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19NUFMoIElOU19BUkcgKQorICBJbnNfTVBTKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSAgICBET19NUFMKKyAgICAvKiBOb3RlOiBUaGUgcG9pbnQgc2l6ZSBzaG91bGQgYmUgaXJyZWxldmFudCBpbiBhIGdpdmVuIGZvbnQgcHJvZ3JhbTsgKi8KKyAgICAvKiAgICAgICB3ZSB0aHVzIGRlY2lkZSB0byByZXR1cm4gb25seSB0aGUgUFBFTSB2YWx1ZS4gICAgICAgICAgICAgICAgKi8KKyNpZiAwCisgICAgYXJnc1swXSA9IGV4Yy0+bWV0cmljcy5wb2ludFNpemU7CisjZWxzZQorICAgIGFyZ3NbMF0gPSBleGMtPmZ1bmNfY3VyX3BwZW0oIGV4YyApOworI2VuZGlmCiAgIH0KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRFVQW106ICAgICAgICBEVVBsaWNhdGUgdGhlIHRvcCBzdGFjaydzIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERVUFtdOiAgICAgICAgRFVQbGljYXRlIHRoZSBzdGFjaydzIHRvcCBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBPcGNvZGUgcmFuZ2U6IDB4MjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogU3RhY2s6ICAgICAgICBTdGtFbHQgLS0+IFN0a0VsdCBTdGtFbHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfRFVQKCBJTlNfQVJHICkKKyAgSW5zX0RVUCggRlRfTG9uZyogIGFyZ3MgKQogICB7Ci0gICAgRE9fRFVQCisgICAgYXJnc1sxXSA9IGFyZ3NbMF07CiAgIH0KIAogCkBAIC0zODQ5LDcgKzI2NjQsNyBAQAogICAvKiBTdGFjazogICAgICAgIFN0a0VsdCAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19QT1AoIElOU19BUkcgKQorICBJbnNfUE9QKCB2b2lkICkKICAgewogICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KICAgfQpAQCAtMzg2Miw5ICsyNjc3LDkgQEAKICAgLyogU3RhY2s6ICAgICAgICBTdGtFbHQuLi4gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfQ0xFQVIoIElOU19BUkcgKQorICBJbnNfQ0xFQVIoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7Ci0gICAgRE9fQ0xFQVIKKyAgICBleGMtPm5ld190b3AgPSAwOwogICB9CiAKIApAQCAtMzg3NSw5ICsyNjkwLDE0IEBACiAgIC8qIFN0YWNrOiAgICAgICAgMiAqIFN0a0VsdCAtLT4gMiAqIFN0a0VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX1NXQVAoIElOU19BUkcgKQorICBJbnNfU1dBUCggRlRfTG9uZyogIGFyZ3MgKQogICB7Ci0gICAgRE9fU1dBUAorICAgIEZUX0xvbmcgIEw7CisKKworICAgIEwgICAgICAgPSBhcmdzWzBdOworICAgIGFyZ3NbMF0gPSBhcmdzWzFdOworICAgIGFyZ3NbMV0gPSBMOwogICB9CiAKIApAQCAtMzg4OCw3NCArMjcwOCwxMCBAQAogICAvKiBTdGFjazogICAgICAgIC0tPiB1aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19ERVBUSCggSU5TX0FSRyApCisgIEluc19ERVBUSCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSAgICBET19ERVBUSAotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIENJTkRFWFtdOiAgICAgQ29weSBJTkRFWGVkIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBpbnQzMiAtLT4gU3RrRWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfQ0lOREVYKCBJTlNfQVJHICkKLSAgewotICAgIERPX0NJTkRFWAotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEVJRltdOiAgICAgICAgRW5kIElGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfRUlGKCBJTlNfQVJHICkKLSAgewotICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBKUk9UW106ICAgICAgIEp1bXAgUmVsYXRpdmUgT24gVHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDc4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgU3RrRWx0IGludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljIHZvaWQKLSAgSW5zX0pST1QoIElOU19BUkcgKQotICB7Ci0gICAgRE9fSlJPVAotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEpNUFJbXTogICAgICAgSnVNUCBSZWxhdGl2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBJbnNfSk1QUiggSU5TX0FSRyApCi0gIHsKLSAgICBET19KTVBSCi0gIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSlJPRltdOiAgICAgICBKdW1wIFJlbGF0aXZlIE9uIEZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg3OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIFN0a0VsdCBpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIEluc19KUk9GKCBJTlNfQVJHICkKLSAgewotICAgIERPX0pST0YKKyAgICBhcmdzWzBdID0gZXhjLT50b3A7CiAgIH0KIAogCkBAIC0zOTY2LDkgKzI3MjIsOSBAQAogICAvKiBTdGFjazogICAgICAgIGludDMyPyBpbnQzMj8gLS0+IGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19MVCggSU5TX0FSRyApCisgIEluc19MVCggRlRfTG9uZyogIGFyZ3MgKQogICB7Ci0gICAgRE9fTFQKKyAgICBhcmdzWzBdID0gKCBhcmdzWzBdIDwgYXJnc1sxXSApOwogICB9CiAKIApAQCAtMzk3OSw5ICsyNzM1LDkgQEAKICAgLyogU3RhY2s6ICAgICAgICBpbnQzMj8gaW50MzI/IC0tPiBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfTFRFUSggSU5TX0FSRyApCisgIEluc19MVEVRKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKLSAgICBET19MVEVRCisgICAgYXJnc1swXSA9ICggYXJnc1swXSA8PSBhcmdzWzFdICk7CiAgIH0KIAogCkBAIC0zOTkyLDkgKzI3NDgsOSBAQAogICAvKiBTdGFjazogICAgICAgIGludDMyPyBpbnQzMj8gLS0+IGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19HVCggSU5TX0FSRyApCisgIEluc19HVCggRlRfTG9uZyogIGFyZ3MgKQogICB7Ci0gICAgRE9fR1QKKyAgICBhcmdzWzBdID0gKCBhcmdzWzBdID4gYXJnc1sxXSApOwogICB9CiAKIApAQCAtNDAwNSw5ICsyNzYxLDkgQEAKICAgLyogU3RhY2s6ICAgICAgICBpbnQzMj8gaW50MzI/IC0tPiBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfR1RFUSggSU5TX0FSRyApCisgIEluc19HVEVRKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKLSAgICBET19HVEVRCisgICAgYXJnc1swXSA9ICggYXJnc1swXSA+PSBhcmdzWzFdICk7CiAgIH0KIAogCkBAIC00MDE4LDkgKzI3NzQsOSBAQAogICAvKiBTdGFjazogICAgICAgIFN0a0VsdCBTdGtFbHQgLS0+IGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19FUSggSU5TX0FSRyApCisgIEluc19FUSggRlRfTG9uZyogIGFyZ3MgKQogICB7Ci0gICAgRE9fRVEKKyAgICBhcmdzWzBdID0gKCBhcmdzWzBdID09IGFyZ3NbMV0gKTsKICAgfQogCiAKQEAgLTQwMzEsOSArMjc4Nyw5IEBACiAgIC8qIFN0YWNrOiAgICAgICAgU3RrRWx0IFN0a0VsdCAtLT4gYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX05FUSggSU5TX0FSRyApCisgIEluc19ORVEoIEZUX0xvbmcqICBhcmdzICkKICAgewotICAgIERPX05FUQorICAgIGFyZ3NbMF0gPSAoIGFyZ3NbMF0gIT0gYXJnc1sxXSApOwogICB9CiAKIApAQCAtNDA0NCw5ICsyODAwLDEwIEBACiAgIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+IGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX09ERCggSU5TX0FSRyApCisgIEluc19PREQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewotICAgIERPX09ERAorICAgIGFyZ3NbMF0gPSAoICggZXhjLT5mdW5jX3JvdW5kKCBleGMsIGFyZ3NbMF0sIDAgKSAmIDEyNyApID09IDY0ICk7CiAgIH0KIAogCkBAIC00MDU3LDkgKzI4MTQsMTAgQEAKICAgLyogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfRVZFTiggSU5TX0FSRyApCisgIEluc19FVkVOKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7Ci0gICAgRE9fRVZFTgorICAgIGFyZ3NbMF0gPSAoICggZXhjLT5mdW5jX3JvdW5kKCBleGMsIGFyZ3NbMF0sIDAgKSAmIDEyNyApID09IDAgKTsKICAgfQogCiAKQEAgLTQwNzAsOSArMjgyOCw5IEBACiAgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX0FORCggSU5TX0FSRyApCisgIEluc19BTkQoIEZUX0xvbmcqICBhcmdzICkKICAgewotICAgIERPX0FORAorICAgIGFyZ3NbMF0gPSAoIGFyZ3NbMF0gJiYgYXJnc1sxXSApOwogICB9CiAKIApAQCAtNDA4Myw5ICsyODQxLDkgQEAKICAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPiB1aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfT1IoIElOU19BUkcgKQorICBJbnNfT1IoIEZUX0xvbmcqICBhcmdzICkKICAgewotICAgIERPX09SCisgICAgYXJnc1swXSA9ICggYXJnc1swXSB8fCBhcmdzWzFdICk7CiAgIH0KIAogCkBAIC00MDk2LDkgKzI4NTQsOSBAQAogICAvKiBTdGFjazogICAgICAgIFN0a0VsdCAtLT4gdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19OT1QoIElOU19BUkcgKQorICBJbnNfTk9UKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKLSAgICBET19OT1QKKyAgICBhcmdzWzBdID0gIWFyZ3NbMF07CiAgIH0KIAogCkBAIC00MTA5LDkgKzI4NjcsOSBAQAogICAvKiBTdGFjazogICAgICAgIGYyNi42IGYyNi42IC0tPiBmMjYuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19BREQoIElOU19BUkcgKQorICBJbnNfQUREKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKLSAgICBET19BREQKKyAgICBhcmdzWzBdICs9IGFyZ3NbMV07CiAgIH0KIAogCkBAIC00MTIyLDkgKzI4ODAsOSBAQAogICAvKiBTdGFjazogICAgICAgIGYyNi42IGYyNi42IC0tPiBmMjYuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19TVUIoIElOU19BUkcgKQorICBJbnNfU1VCKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKLSAgICBET19TVUIKKyAgICBhcmdzWzBdIC09IGFyZ3NbMV07CiAgIH0KIAogCkBAIC00MTM1LDkgKzI4OTMsMTMgQEAKICAgLyogU3RhY2s6ICAgICAgICBmMjYuNiBmMjYuNiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfRElWKCBJTlNfQVJHICkKKyAgSW5zX0RJViggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7Ci0gICAgRE9fRElWCisgICAgaWYgKCBhcmdzWzFdID09IDAgKQorICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBEaXZpZGVfQnlfWmVybyApOworICAgIGVsc2UKKyAgICAgIGFyZ3NbMF0gPSBGVF9NdWxEaXZfTm9fUm91bmQoIGFyZ3NbMF0sIDY0TCwgYXJnc1sxXSApOwogICB9CiAKIApAQCAtNDE0OCw5ICsyOTEwLDkgQEAKICAgLyogU3RhY2s6ICAgICAgICBmMjYuNiBmMjYuNiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfTVVMKCBJTlNfQVJHICkKKyAgSW5zX01VTCggRlRfTG9uZyogIGFyZ3MgKQogICB7Ci0gICAgRE9fTVVMCisgICAgYXJnc1swXSA9IEZUX011bERpdiggYXJnc1swXSwgYXJnc1sxXSwgNjRMICk7CiAgIH0KIAogCkBAIC00MTYxLDkgKzI5MjMsOSBAQAogICAvKiBTdGFjazogICAgICAgIGYyNi42IC0tPiBmMjYuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19BQlMoIElOU19BUkcgKQorICBJbnNfQUJTKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKLSAgICBET19BQlMKKyAgICBhcmdzWzBdID0gRlRfQUJTKCBhcmdzWzBdICk7CiAgIH0KIAogCkBAIC00MTc0LDkgKzI5MzYsOSBAQAogICAvKiBTdGFjazogZjI2LjYgLS0+IGYyNi42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19ORUcoIElOU19BUkcgKQorICBJbnNfTkVHKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKLSAgICBET19ORUcKKyAgICBhcmdzWzBdID0gLWFyZ3NbMF07CiAgIH0KIAogCkBAIC00MTg3LDkgKzI5NDksOSBAQAogICAvKiBTdGFjazogICAgICAgIGYyNi42IC0tPiBmMjYuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19GTE9PUiggSU5TX0FSRyApCisgIEluc19GTE9PUiggRlRfTG9uZyogIGFyZ3MgKQogICB7Ci0gICAgRE9fRkxPT1IKKyAgICBhcmdzWzBdID0gRlRfUElYX0ZMT09SKCBhcmdzWzBdICk7CiAgIH0KIAogCkBAIC00MjAwLDkgKzI5NjIsOSBAQAogICAvKiBTdGFjazogICAgICAgIGYyNi42IC0tPiBmMjYuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19DRUlMSU5HKCBJTlNfQVJHICkKKyAgSW5zX0NFSUxJTkcoIEZUX0xvbmcqICBhcmdzICkKICAgewotICAgIERPX0NFSUxJTkcKKyAgICBhcmdzWzBdID0gRlRfUElYX0NFSUwoIGFyZ3NbMF0gKTsKICAgfQogCiAKQEAgLTQyMTMsOSArMjk3NSw1OSBAQAogICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19SUyggSU5TX0FSRyApCisgIEluc19SUyggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSAgICBET19SUworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworCisgICAgRlRfVUxvbmcgIEkgPSAoRlRfVUxvbmcpYXJnc1swXTsKKworCisgICAgaWYgKCBCT1VORFNMKCBJLCBleGMtPnN0b3JlU2l6ZSApICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIEFSUkFZX0JPVU5EX0VSUk9SOworICAgICAgZWxzZQorICAgICAgICBhcmdzWzBdID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIHN1YnBpeGVsIGhpbnRpbmcgLSBhdm9pZCBUeXBlbWFuIERzdHJva2UgYW5kICovCisgICAgICAvKiBJU3Ryb2tlIGFuZCBWYWN1Zm9ybSByb3VuZHMgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgKCAoIEkgPT0gMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAoIGV4Yy0+ZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgJgorICAgICAgICAgICAgICAgICAoIFNQSF9GREVGX1NQQUNJTkdfMSB8CisgICAgICAgICAgICAgICAgICAgU1BIX0ZERUZfU1BBQ0lOR18yICkgICAgICAgICAgKSApIHx8CisgICAgICAgICAgICAgKCBJID09IDIyICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAoIGV4Yy0+c3BoX2luX2Z1bmNfZmxhZ3MgICAmCisgICAgICAgICAgICAgICAgIFNQSF9GREVGX1RZUEVNQU5fU1RST0tFUyApICkgICAgICAgIHx8CisgICAgICAgICAgICAgKCBJID09IDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgKCBleGMtPmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzICYKKyAgICAgICAgICAgICAgICAgU1BIX0ZERUZfVkFDVUZPUk1fUk9VTkRfMSAgICAgICApICYmCisgICAgICAgICAgICAgICBleGMtPml1cF9jYWxsZWQgICAgICAgICAgICAgICAgICAgICApICkgKQorICAgICAgICBhcmdzWzBdID0gMDsKKyAgICAgIGVsc2UKKyAgICAgICAgYXJnc1swXSA9IGV4Yy0+c3RvcmFnZVtJXTsKKyAgICB9CisKKyNlbHNlIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKworICAgIEZUX1VMb25nICBJID0gKEZUX1VMb25nKWFyZ3NbMF07CisKKworICAgIGlmICggQk9VTkRTTCggSSwgZXhjLT5zdG9yZVNpemUgKSApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBBUlJBWV9CT1VORF9FUlJPUjsKKyAgICAgIGVsc2UKKyAgICAgICAgYXJnc1swXSA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGFyZ3NbMF0gPSBleGMtPnN0b3JhZ2VbSV07CisKKyNlbmRpZiAvKiAhVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCiAgIH0KIAogCkBAIC00MjI2LDkgKzMwMzgsMTkgQEAKICAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfV1MoIElOU19BUkcgKQorICBJbnNfV1MoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7Ci0gICAgRE9fV1MKKyAgICBGVF9VTG9uZyAgSSA9IChGVF9VTG9uZylhcmdzWzBdOworCisKKyAgICBpZiAoIEJPVU5EU0woIEksIGV4Yy0+c3RvcmVTaXplICkgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgQVJSQVlfQk9VTkRfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGV4Yy0+c3RvcmFnZVtJXSA9IGFyZ3NbMV07CiAgIH0KIAogCkBAIC00MjM5LDkgKzMwNjEsMTkgQEAKICAgLyogU3RhY2s6ICAgICAgICBmMjYuNiB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfV0NWVFAoIElOU19BUkcgKQorICBJbnNfV0NWVFAoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7Ci0gICAgRE9fV0NWVFAKKyAgICBGVF9VTG9uZyAgSSA9IChGVF9VTG9uZylhcmdzWzBdOworCisKKyAgICBpZiAoIEJPVU5EU0woIEksIGV4Yy0+Y3Z0U2l6ZSApICkKKyAgICB7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIEFSUkFZX0JPVU5EX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgICBleGMtPmZ1bmNfd3JpdGVfY3Z0KCBleGMsIEksIGFyZ3NbMV0gKTsKICAgfQogCiAKQEAgLTQyNTIsOSArMzA4NCwxOSBAQAogICAvKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19XQ1ZURiggSU5TX0FSRyApCisgIEluc19XQ1ZURiggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSAgICBET19XQ1ZURgorICAgIEZUX1VMb25nICBJID0gKEZUX1VMb25nKWFyZ3NbMF07CisKKworICAgIGlmICggQk9VTkRTTCggSSwgZXhjLT5jdnRTaXplICkgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgQVJSQVlfQk9VTkRfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGV4Yy0+Y3Z0W0ldID0gRlRfTXVsRml4KCBhcmdzWzFdLCBleGMtPnR0X21ldHJpY3Muc2NhbGUgKTsKICAgfQogCiAKQEAgLTQyNjUsOSArMzEwNywyMSBAQAogICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19SQ1ZUKCBJTlNfQVJHICkKKyAgSW5zX1JDVlQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSAgICBET19SQ1ZUCisgICAgRlRfVUxvbmcgIEkgPSAoRlRfVUxvbmcpYXJnc1swXTsKKworCisgICAgaWYgKCBCT1VORFNMKCBJLCBleGMtPmN2dFNpemUgKSApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBBUlJBWV9CT1VORF9FUlJPUjsKKyAgICAgIGVsc2UKKyAgICAgICAgYXJnc1swXSA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGFyZ3NbMF0gPSBleGMtPmZ1bmNfcmVhZF9jdnQoIGV4YywgSSApOwogICB9CiAKIApAQCAtNDI3OCw3ICszMTMyLDcgQEAKICAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfQUEoIElOU19BUkcgKQorICBJbnNfQUEoIHZvaWQgKQogICB7CiAgICAgLyogaW50ZW50aW9uYWxseSBubyBsb25nZXIgc3VwcG9ydGVkICovCiAgIH0KQEAgLTQyOTMsOSArMzE0Nyw5IEBACiAgIC8qIE5vdGU6IFRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiBwb3BzIGEgdmFsdWUgZnJvbSB0aGUgc3RhY2suICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX0RFQlVHKCBJTlNfQVJHICkKKyAgSW5zX0RFQlVHKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewotICAgIERPX0RFQlVHCisgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBEZWJ1Z19PcENvZGUgKTsKICAgfQogCiAKQEAgLTQzMDYsOSArMzE2MCwxMyBAQAogICAvKiBTdGFjazogICAgICAgIGYyNi42IC0tPiBmMjYuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19ST1VORCggSU5TX0FSRyApCisgIEluc19ST1VORCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSAgICBET19ST1VORAorICAgIGFyZ3NbMF0gPSBleGMtPmZ1bmNfcm91bmQoCisgICAgICAgICAgICAgICAgZXhjLAorICAgICAgICAgICAgICAgIGFyZ3NbMF0sCisgICAgICAgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbZXhjLT5vcGNvZGUgLSAweDY4XSApOwogICB9CiAKIApAQCAtNDMxOSw5ICszMTc3LDEzIEBACiAgIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+IGYyNi42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX05ST1VORCggSU5TX0FSRyApCisgIEluc19OUk9VTkQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewotICAgIERPX05ST1VORAorICAgIGFyZ3NbMF0gPSBSb3VuZF9Ob25lKAorICAgICAgICAgICAgICAgIGV4YywKKyAgICAgICAgICAgICAgICBhcmdzWzBdLAorICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zW2V4Yy0+b3Bjb2RlIC0gMHg2Q10gKTsKICAgfQogCiAKQEAgLTQzMzIsOSArMzE5NCwxMCBAQAogICAvKiBTdGFjazogICAgICAgIGludDMyPyBpbnQzMj8gLS0+IGludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19NQVgoIElOU19BUkcgKQorICBJbnNfTUFYKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKLSAgICBET19NQVgKKyAgICBpZiAoIGFyZ3NbMV0gPiBhcmdzWzBdICkKKyAgICAgIGFyZ3NbMF0gPSBhcmdzWzFdOwogICB9CiAKIApAQCAtNDM0NSwyMiArMzIwOCwxMyBAQAogICAvKiBTdGFjazogICAgICAgIGludDMyPyBpbnQzMj8gLS0+IGludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19NSU4oIElOU19BUkcgKQorICBJbnNfTUlOKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKLSAgICBET19NSU4KKyAgICBpZiAoIGFyZ3NbMV0gPCBhcmdzWzBdICkKKyAgICAgIGFyZ3NbMF0gPSBhcmdzWzFdOwogICB9CiAKIAotI2VuZGlmICAvKiAhVFRfQ09ORklHX09QVElPTl9JTlRFUlBSRVRFUl9TV0lUQ0ggKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhcyBpcyB3aXRoaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogTUlOREVYW106ICAgICBNb3ZlIElOREVYZWQgZWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00MzY4LDQ0ICszMjIyLDY5IEBACiAgIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IC0tPiBTdGtFbHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX01JTkRFWCggSU5TX0FSRyApCisgIEluc19NSU5ERVgoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewogICAgIEZUX0xvbmcgIEwsIEs7CiAKIAogICAgIEwgPSBhcmdzWzBdOwogCi0gICAgaWYgKCBMIDw9IDAgfHwgTCA+IENVUi5hcmdzICkKKyAgICBpZiAoIEwgPD0gMCB8fCBMID4gZXhjLT5hcmdzICkKICAgICB7Ci0gICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIEsgPSBDVVIuc3RhY2tbQ1VSLmFyZ3MgLSBMXTsKKyAgICAgIEsgPSBleGMtPnN0YWNrW2V4Yy0+YXJncyAtIExdOwogCi0gICAgICBGVF9BUlJBWV9NT1ZFKCAmQ1VSLnN0YWNrW0NVUi5hcmdzIC0gTCAgICBdLAotICAgICAgICAgICAgICAgICAgICAgJkNVUi5zdGFja1tDVVIuYXJncyAtIEwgKyAxXSwKKyAgICAgIEZUX0FSUkFZX01PVkUoICZleGMtPnN0YWNrW2V4Yy0+YXJncyAtIEwgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICZleGMtPnN0YWNrW2V4Yy0+YXJncyAtIEwgKyAxXSwKICAgICAgICAgICAgICAgICAgICAgICggTCAtIDEgKSApOwogCi0gICAgICBDVVIuc3RhY2tbQ1VSLmFyZ3MgLSAxXSA9IEs7CisgICAgICBleGMtPnN0YWNrW2V4Yy0+YXJncyAtIDFdID0gSzsKICAgICB9CiAgIH0KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogQ0lOREVYW106ICAgICBDb3B5IElOREVYZWQgZWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIGludDMyIC0tPiBTdGtFbHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19DSU5ERVgoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX0xvbmcgIEw7CisKKworICAgIEwgPSBhcmdzWzBdOworCisgICAgaWYgKCBMIDw9IDAgfHwgTCA+IGV4Yy0+YXJncyApCisgICAgeworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBhcmdzWzBdID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAgYXJnc1swXSA9IGV4Yy0+c3RhY2tbZXhjLT5hcmdzIC0gTF07CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogUk9MTFtdOiAgICAgICBST0xMIHRvcCB0aHJlZSBlbGVtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIE9wY29kZSByYW5nZTogMHg4QSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBTdGFjazogICAgICAgIDMgKiBTdGtFbHQgLS0+IDMgKiBTdGtFbHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19ST0xMKCBJTlNfQVJHICkKKyAgSW5zX1JPTEwoIEZUX0xvbmcqICBhcmdzICkKICAgewogICAgIEZUX0xvbmcgIEEsIEIsIEM7CiAKLSAgICBGVF9VTlVTRURfRVhFQzsKLQogCiAgICAgQSA9IGFyZ3NbMl07CiAgICAgQiA9IGFyZ3NbMV07CkBAIC00NDIxLDM0ICszMzAwLDQ5IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBNQU5BR0lORyBUSEUgRkxPVyBPRiBDT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgSW5zdHJ1Y3Rpb25zIGFwcGVhciBpbiB0aGUgc3BlY2lmaWNhdGlvbidzIG9yZGVyLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICBzdGF0aWMgRlRfQm9vbAotICBTa2lwQ29kZSggRVhFQ19PUCApCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU0xPT1BbXTogICAgICBTZXQgTE9PUCB2YXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIGludDMyPyAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19TTE9PUCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSAgICBDVVIuSVAgKz0gQ1VSLmxlbmd0aDsKKyAgICBpZiAoIGFyZ3NbMF0gPCAwICkKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggQmFkX0FyZ3VtZW50ICk7CisgICAgZWxzZQorICAgICAgZXhjLT5HUy5sb29wID0gYXJnc1swXTsKKyAgfQogCi0gICAgaWYgKCBDVVIuSVAgPCBDVVIuY29kZVNpemUgKQorCisgIHN0YXRpYyBGVF9Cb29sCisgIFNraXBDb2RlKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKKyAgeworICAgIGV4Yy0+SVAgKz0gZXhjLT5sZW5ndGg7CisKKyAgICBpZiAoIGV4Yy0+SVAgPCBleGMtPmNvZGVTaXplICkKICAgICB7Ci0gICAgICBDVVIub3Bjb2RlID0gQ1VSLmNvZGVbQ1VSLklQXTsKKyAgICAgIGV4Yy0+b3Bjb2RlID0gZXhjLT5jb2RlW2V4Yy0+SVBdOwogCi0gICAgICBDVVIubGVuZ3RoID0gb3Bjb2RlX2xlbmd0aFtDVVIub3Bjb2RlXTsKLSAgICAgIGlmICggQ1VSLmxlbmd0aCA8IDAgKQorICAgICAgZXhjLT5sZW5ndGggPSBvcGNvZGVfbGVuZ3RoW2V4Yy0+b3Bjb2RlXTsKKyAgICAgIGlmICggZXhjLT5sZW5ndGggPCAwICkKICAgICAgIHsKLSAgICAgICAgaWYgKCBDVVIuSVAgKyAxID49IENVUi5jb2RlU2l6ZSApCisgICAgICAgIGlmICggZXhjLT5JUCArIDEgPj0gZXhjLT5jb2RlU2l6ZSApCiAgICAgICAgICAgZ290byBGYWlsX092ZXJmbG93OwotICAgICAgICBDVVIubGVuZ3RoID0gMiAtIENVUi5sZW5ndGggKiBDVVIuY29kZVtDVVIuSVAgKyAxXTsKKyAgICAgICAgZXhjLT5sZW5ndGggPSAyIC0gZXhjLT5sZW5ndGggKiBleGMtPmNvZGVbZXhjLT5JUCArIDFdOwogICAgICAgfQogCi0gICAgICBpZiAoIENVUi5JUCArIENVUi5sZW5ndGggPD0gQ1VSLmNvZGVTaXplICkKKyAgICAgIGlmICggZXhjLT5JUCArIGV4Yy0+bGVuZ3RoIDw9IGV4Yy0+Y29kZVNpemUgKQogICAgICAgICByZXR1cm4gU1VDQ0VTUzsKICAgICB9CiAKICAgRmFpbF9PdmVyZmxvdzoKLSAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggQ29kZV9PdmVyZmxvdyApOworICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggQ29kZV9PdmVyZmxvdyApOwogICAgIHJldHVybiBGQUlMVVJFOwogICB9CiAKQEAgLTQ0NjAsNyArMzM1NCw4IEBACiAgIC8qIFN0YWNrOiAgICAgICAgU3RrRWx0IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX0lGKCBJTlNfQVJHICkKKyAgSW5zX0lGKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewogICAgIEZUX0ludCAgIG5JZnM7CiAgICAgRlRfQm9vbCAgT3V0OwpAQCAtNDQ3NCwxMCArMzM2OSwxMCBAQAogCiAgICAgZG8KICAgICB7Ci0gICAgICBpZiAoIFNLSVBfQ29kZSgpID09IEZBSUxVUkUgKQorICAgICAgaWYgKCBTa2lwQ29kZSggZXhjICkgPT0gRkFJTFVSRSApCiAgICAgICAgIHJldHVybjsKIAotICAgICAgc3dpdGNoICggQ1VSLm9wY29kZSApCisgICAgICBzd2l0Y2ggKCBleGMtPm9wY29kZSApCiAgICAgICB7CiAgICAgICBjYXNlIDB4NTg6ICAgICAgLyogSUYgKi8KICAgICAgICAgbklmcysrOwpAQCAtNDUwMywyMSArMzM5OCwxOSBAQAogICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19FTFNFKCBJTlNfQVJHICkKKyAgSW5zX0VMU0UoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7CiAgICAgRlRfSW50ICBuSWZzOwogCi0gICAgRlRfVU5VU0VEX0FSRzsKLQogCiAgICAgbklmcyA9IDE7CiAKICAgICBkbwogICAgIHsKLSAgICAgIGlmICggU0tJUF9Db2RlKCkgPT0gRkFJTFVSRSApCisgICAgICBpZiAoIFNraXBDb2RlKCBleGMgKSA9PSBGQUlMVVJFICkKICAgICAgICAgcmV0dXJuOwogCi0gICAgICBzd2l0Y2ggKCBDVVIub3Bjb2RlICkKKyAgICAgIHN3aXRjaCAoIGV4Yy0+b3Bjb2RlICkKICAgICAgIHsKICAgICAgIGNhc2UgMHg1ODogICAgLyogSUYgKi8KICAgICAgICAgbklmcysrOwpAQCAtNDUzMyw5ICszNDI2LDcxIEBACiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBERUZJTklORyBBTkQgVVNJTkcgRlVOQ1RJT05TIEFORCBJTlNUUlVDVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRUlGW106ICAgICAgICBFbmQgSUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg1OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgSW5zdHJ1Y3Rpb25zIGFwcGVhciBpbiB0aGUgc3BlY2lmaWNhdGlvbidzIG9yZGVyLiAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfRUlGKCB2b2lkICkKKyAgeworICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBKTVBSW106ICAgICAgIEp1TVAgUmVsYXRpdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgaW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0pNUFIoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBpZiAoIGFyZ3NbMF0gPT0gMCAmJiBleGMtPmFyZ3MgPT0gMCApCisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEJhZF9Bcmd1bWVudCApOworICAgIGV4Yy0+SVAgKz0gYXJnc1swXTsKKyAgICBpZiAoIGV4Yy0+SVAgPCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICggZXhjLT5jYWxsVG9wID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+SVAgPiBleGMtPmNhbGxTdGFja1tleGMtPmNhbGxUb3AgLSAxXS5EZWYtPmVuZCApICkKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggQmFkX0FyZ3VtZW50ICk7CisgICAgZXhjLT5zdGVwX2lucyA9IEZBTFNFOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEpST1RbXTogICAgICAgSnVtcCBSZWxhdGl2ZSBPbiBUcnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBTdGtFbHQgaW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfSlJPVCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGlmICggYXJnc1sxXSAhPSAwICkKKyAgICAgIEluc19KTVBSKCBleGMsIGFyZ3MgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBKUk9GW106ICAgICAgIEp1bXAgUmVsYXRpdmUgT24gRmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDc5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgU3RrRWx0IGludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0pST0YoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBpZiAoIGFyZ3NbMV0gPT0gMCApCisgICAgICBJbnNfSk1QUiggZXhjLCBhcmdzICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogREVGSU5JTkcgQU5EIFVTSU5HIEZVTkNUSU9OUyBBTkQgSU5TVFJVQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNDU0Nyw3ICszNTAyLDggQEAKICAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfRkRFRiggSU5TX0FSRyApCisgIEluc19GREVGKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7CiAgICAgRlRfVUxvbmcgICAgICAgbjsKICAgICBUVF9EZWZSZWNvcmQqICByZWM7CkBAIC00NjU3LDkgKzM2MTMsOSBAQAogICAgIC8qIHNvbWUgZm9udCBwcm9ncmFtcyBhcmUgYnJva2VuIGVub3VnaCB0byByZWRlZmluZSBmdW5jdGlvbnMhICovCiAgICAgLyogV2Ugd2lsbCB0aGVuIHBhcnNlIHRoZSBjdXJyZW50IHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgIHJlYyAgID0gQ1VSLkZEZWZzOwotICAgIGxpbWl0ID0gcmVjICsgQ1VSLm51bUZEZWZzOwotICAgIG4gICAgID0gYXJnc1swXTsKKyAgICByZWMgICA9IGV4Yy0+RkRlZnM7CisgICAgbGltaXQgPSByZWMgKyBleGMtPm51bUZEZWZzOworICAgIG4gICAgID0gKEZUX1VMb25nKWFyZ3NbMF07CiAKICAgICBmb3IgKCA7IHJlYyA8IGxpbWl0OyByZWMrKyApCiAgICAgewpAQCAtNDY3MCwzMSArMzYyNiwzMSBAQAogICAgIGlmICggcmVjID09IGxpbWl0ICkKICAgICB7CiAgICAgICAvKiBjaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCByb29tIGZvciBuZXcgZnVuY3Rpb25zICovCi0gICAgICBpZiAoIENVUi5udW1GRGVmcyA+PSBDVVIubWF4RkRlZnMgKQorICAgICAgaWYgKCBleGMtPm51bUZEZWZzID49IGV4Yy0+bWF4RkRlZnMgKQogICAgICAgewotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggVG9vX01hbnlfRnVuY3Rpb25fRGVmcyApOworICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIFRvb19NYW55X0Z1bmN0aW9uX0RlZnMgKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgfQotICAgICAgQ1VSLm51bUZEZWZzKys7CisgICAgICBleGMtPm51bUZEZWZzKys7CiAgICAgfQogCiAgICAgLyogQWx0aG91Z2ggRkRFRiB0YWtlcyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciwgICovCiAgICAgLyogZnVuYyAjIG11c3QgYmUgd2l0aGluIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyICovCiAgICAgaWYgKCBuID4gMHhGRkZGVSApCiAgICAgewotICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIFRvb19NYW55X0Z1bmN0aW9uX0RlZnMgKTsKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggVG9vX01hbnlfRnVuY3Rpb25fRGVmcyApOwogICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJlYy0+cmFuZ2UgICAgICAgICAgPSBDVVIuY3VyUmFuZ2U7CisgICAgcmVjLT5yYW5nZSAgICAgICAgICA9IGV4Yy0+Y3VyUmFuZ2U7CiAgICAgcmVjLT5vcGMgICAgICAgICAgICA9IChGVF9VSW50MTYpbjsKLSAgICByZWMtPnN0YXJ0ICAgICAgICAgID0gQ1VSLklQICsgMTsKKyAgICByZWMtPnN0YXJ0ICAgICAgICAgID0gZXhjLT5JUCArIDE7CiAgICAgcmVjLT5hY3RpdmUgICAgICAgICA9IFRSVUU7CiAgICAgcmVjLT5pbmxpbmVfZGVsdGEgICA9IEZBTFNFOwogICAgIHJlYy0+c3BoX2ZkZWZfZmxhZ3MgPSAweDAwMDA7CiAKLSAgICBpZiAoIG4gPiBDVVIubWF4RnVuYyApCi0gICAgICBDVVIubWF4RnVuYyA9IChGVF9VSW50MTYpbjsKKyAgICBpZiAoIG4gPiBleGMtPm1heEZ1bmMgKQorICAgICAgZXhjLT5tYXhGdW5jID0gKEZUX1VJbnQxNiluOwogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCiAgICAgLyogV2UgZG9uJ3Qga25vdyBmb3Igc3VyZSB0aGVzZSBhcmUgdHlwZW1hbiBmdW5jdGlvbnMsICovCkBAIC00NzA2LDcgKzM2NjIsNyBAQAogICAgIC8qIE5vdyBza2lwIHRoZSB3aG9sZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAqLwogICAgIC8qIFdlIGRvbid0IGFsbG93IG5lc3RlZCBJREVGUyAmIEZERUZzLiAgICAqLwogCi0gICAgd2hpbGUgKCBTS0lQX0NvZGUoKSA9PSBTVUNDRVNTICkKKyAgICB3aGlsZSAoIFNraXBDb2RlKCBleGMgKSA9PSBTVUNDRVNTICkKICAgICB7CiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKQEAgLTQ3MTUsMjggKzM2NzEsMjggQEAKICAgICAgIHsKICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBvcGNvZGVfcGF0dGVybnM7IGkrKyApCiAgICAgICAgIHsKLSAgICAgICAgICBpZiAoIG9wY29kZV9wb2ludGVyW2ldIDwgb3Bjb2RlX3NpemVbaV0gICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgICBDVVIub3Bjb2RlID09IG9wY29kZV9wYXR0ZXJuW2ldW29wY29kZV9wb2ludGVyW2ldXSApCisgICAgICAgICAgaWYgKCBvcGNvZGVfcG9pbnRlcltpXSA8IG9wY29kZV9zaXplW2ldICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgIGV4Yy0+b3Bjb2RlID09IG9wY29kZV9wYXR0ZXJuW2ldW29wY29kZV9wb2ludGVyW2ldXSApCiAgICAgICAgICAgewogICAgICAgICAgICAgb3Bjb2RlX3BvaW50ZXJbaV0gKz0gMTsKIAogICAgICAgICAgICAgaWYgKCBvcGNvZGVfcG9pbnRlcltpXSA9PSBvcGNvZGVfc2l6ZVtpXSApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZUX1RSQUNFNygoICJzcGg6IEZ1bmN0aW9uICVkLCBvcGNvZGUgcHRybjogJWQsICVzICVzXG4iLAorICAgICAgICAgICAgICBGVF9UUkFDRTYoKCAic3BoOiBGdW5jdGlvbiAlZCwgb3Bjb2RlIHB0cm46ICVkLCAlcyAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSLmZhY2UtPnJvb3QuZmFtaWx5X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENVUi5mYWNlLT5yb290LnN0eWxlX25hbWUgKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+ZmFjZS0+cm9vdC5mYW1pbHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5mYWNlLT5yb290LnN0eWxlX25hbWUgKSk7CiAKICAgICAgICAgICAgICAgc3dpdGNoICggaSApCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIHJlYy0+c3BoX2ZkZWZfZmxhZ3MgICAgICAgICAgICB8PSBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMTsKLSAgICAgICAgICAgICAgICBDVVIuZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgfD0gU1BIX0ZERUZfSU5MSU5FX0RFTFRBXzE7CisgICAgICAgICAgICAgICAgcmVjLT5zcGhfZmRlZl9mbGFncyAgICAgICAgICAgICB8PSBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMTsKKyAgICAgICAgICAgICAgICBleGMtPmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzIHw9IFNQSF9GREVGX0lOTElORV9ERUxUQV8xOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICByZWMtPnNwaF9mZGVmX2ZsYWdzICAgICAgICAgICAgfD0gU1BIX0ZERUZfSU5MSU5FX0RFTFRBXzI7Ci0gICAgICAgICAgICAgICAgQ1VSLmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzIHw9IFNQSF9GREVGX0lOTElORV9ERUxUQV8yOworICAgICAgICAgICAgICAgIHJlYy0+c3BoX2ZkZWZfZmxhZ3MgICAgICAgICAgICAgfD0gU1BIX0ZERUZfSU5MSU5FX0RFTFRBXzI7CisgICAgICAgICAgICAgICAgZXhjLT5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyB8PSBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMjsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICBjYXNlIDI6CkBAIC00NzQ0LDggKzM3MDAsOCBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIC8qIG5lZWRzIHRvIGJlIGltcGxlbWVudGVkIHN0aWxsICovCiAgICAgICAgICAgICAgICAgY2FzZSA1ODoKLSAgICAgICAgICAgICAgICAgIHJlYy0+c3BoX2ZkZWZfZmxhZ3MgICAgICAgICAgICB8PSBTUEhfRkRFRl9ESUFHT05BTF9TVFJPS0U7Ci0gICAgICAgICAgICAgICAgICBDVVIuZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgfD0gU1BIX0ZERUZfRElBR09OQUxfU1RST0tFOworICAgICAgICAgICAgICAgICAgcmVjLT5zcGhfZmRlZl9mbGFncyAgICAgICAgICAgICB8PSBTUEhfRkRFRl9ESUFHT05BTF9TVFJPS0U7CisgICAgICAgICAgICAgICAgICBleGMtPmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzIHw9IFNQSF9GREVGX0RJQUdPTkFMX1NUUk9LRTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTQ3NTMsMTUgKzM3MDksMTUgQEAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKCBuICkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgcmVjLT5zcGhfZmRlZl9mbGFncyAgICAgICAgICAgIHw9IFNQSF9GREVGX1ZBQ1VGT1JNX1JPVU5EXzE7Ci0gICAgICAgICAgICAgICAgICBDVVIuZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgfD0gU1BIX0ZERUZfVkFDVUZPUk1fUk9VTkRfMTsKKyAgICAgICAgICAgICAgICAgIHJlYy0+c3BoX2ZkZWZfZmxhZ3MgICAgICAgICAgICAgfD0gU1BIX0ZERUZfVkFDVUZPUk1fUk9VTkRfMTsKKyAgICAgICAgICAgICAgICAgIGV4Yy0+ZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgfD0gU1BIX0ZERUZfVkFDVUZPUk1fUk9VTkRfMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgIC8qIHByb2JhYmx5IG5vdCBuZWNlc3NhcnkgdG8gZGV0ZWN0IGFueW1vcmUgKi8KLSAgICAgICAgICAgICAgICByZWMtPnNwaF9mZGVmX2ZsYWdzICAgICAgICAgICAgfD0gU1BIX0ZERUZfVFRGQVVUT0hJTlRfMTsKLSAgICAgICAgICAgICAgICBDVVIuZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgfD0gU1BIX0ZERUZfVFRGQVVUT0hJTlRfMTsKKyAgICAgICAgICAgICAgICByZWMtPnNwaF9mZGVmX2ZsYWdzICAgICAgICAgICAgIHw9IFNQSF9GREVGX1RURkFVVE9ISU5UXzE7CisgICAgICAgICAgICAgICAgZXhjLT5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyB8PSBTUEhfRkRFRl9UVEZBVVRPSElOVF8xOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgIGNhc2UgNToKQEAgLTQ3NzMsOCArMzcyOSw4IEBACiAgICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgIGNhc2UgNzoKICAgICAgICAgICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAgICAgICAgICByZWMtPnNwaF9mZGVmX2ZsYWdzICAgICAgICAgICAgfD0gU1BIX0ZERUZfU1BBQ0lOR18xOwotICAgICAgICAgICAgICAgICAgQ1VSLmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzIHw9IFNQSF9GREVGX1NQQUNJTkdfMTsKKyAgICAgICAgICAgICAgICAgIHJlYy0+c3BoX2ZkZWZfZmxhZ3MgICAgICAgICAgICAgfD0gU1BIX0ZERUZfU1BBQ0lOR18xOworICAgICAgICAgICAgICAgICAgZXhjLT5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyB8PSBTUEhfRkRFRl9TUEFDSU5HXzE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC00Nzg3LDIwICszNzQzLDIwIEBACiAgICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgIGNhc2UgNzoKICAgICAgICAgICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAgICAgICAgICByZWMtPnNwaF9mZGVmX2ZsYWdzICAgICAgICAgICAgfD0gU1BIX0ZERUZfU1BBQ0lOR18yOwotICAgICAgICAgICAgICAgICAgQ1VSLmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzIHw9IFNQSF9GREVGX1NQQUNJTkdfMjsKKyAgICAgICAgICAgICAgICAgIHJlYy0+c3BoX2ZkZWZfZmxhZ3MgICAgICAgICAgICAgfD0gU1BIX0ZERUZfU1BBQ0lOR18yOworICAgICAgICAgICAgICAgICAgZXhjLT5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyB8PSBTUEhfRkRFRl9TUEFDSU5HXzI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICAgICAgIHJlYy0+c3BoX2ZkZWZfZmxhZ3MgICAgICAgICAgICB8PSBTUEhfRkRFRl9UWVBFTUFOX0RJQUdFTkRDVFJMOwotICAgICAgICAgICAgICAgICBDVVIuZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgfD0gU1BIX0ZERUZfVFlQRU1BTl9ESUFHRU5EQ1RSTDsKKyAgICAgICAgICAgICAgICAgcmVjLT5zcGhfZmRlZl9mbGFncyAgICAgICAgICAgICB8PSBTUEhfRkRFRl9UWVBFTUFOX0RJQUdFTkRDVFJMOworICAgICAgICAgICAgICAgICBleGMtPmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzIHw9IFNQSF9GREVGX1RZUEVNQU5fRElBR0VORENUUkw7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICBjYXNlIDg6CiAjaWYgMAotICAgICAgICAgICAgICAgICByZWMtPnNwaF9mZGVmX2ZsYWdzICAgICAgICAgICAgfD0gU1BIX0ZERUZfVFlQRU1BTl9ESUFHRU5EQ1RSTDsKLSAgICAgICAgICAgICAgICAgQ1VSLmZhY2UtPnNwaF9mb3VuZF9mdW5jX2ZsYWdzIHw9IFNQSF9GREVGX1RZUEVNQU5fRElBR0VORENUUkw7CisgICAgICAgICAgICAgICAgIHJlYy0+c3BoX2ZkZWZfZmxhZ3MgICAgICAgICAgICAgfD0gU1BIX0ZERUZfVFlQRU1BTl9ESUFHRU5EQ1RSTDsKKyAgICAgICAgICAgICAgICAgZXhjLT5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyB8PSBTUEhfRkRFRl9UWVBFTUFOX0RJQUdFTkRDVFJMOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICB9CkBAIC00ODEzLDIyICszNzY5LDIyIEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBTZXQgc3BoX2NvbXBhdGliaWxpdHlfbW9kZSBvbmx5IHdoZW4gZGVsdGFzIGFyZSBkZXRlY3RlZCAqLwotICAgICAgICBDVVIuZmFjZS0+c3BoX2NvbXBhdGliaWxpdHlfbW9kZSA9Ci0gICAgICAgICAgKCAoIENVUi5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyAmIFNQSF9GREVGX0lOTElORV9ERUxUQV8xICkgfAotICAgICAgICAgICAgKCBDVVIuZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgJiBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMiApICk7CisgICAgICAgIGV4Yy0+ZmFjZS0+c3BoX2NvbXBhdGliaWxpdHlfbW9kZSA9CisgICAgICAgICAgKCAoIGV4Yy0+ZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgJiBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMSApIHwKKyAgICAgICAgICAgICggZXhjLT5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyAmIFNQSF9GREVGX0lOTElORV9ERUxUQV8yICkgKTsKICAgICAgIH0KIAogI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLwogCi0gICAgICBzd2l0Y2ggKCBDVVIub3Bjb2RlICkKKyAgICAgIHN3aXRjaCAoIGV4Yy0+b3Bjb2RlICkKICAgICAgIHsKICAgICAgIGNhc2UgMHg4OTogICAgLyogSURFRiAqLwogICAgICAgY2FzZSAweDJDOiAgICAvKiBGREVGICovCi0gICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBOZXN0ZWRfREVGUyApOworICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIE5lc3RlZF9ERUZTICk7CiAgICAgICAgIHJldHVybjsKIAogICAgICAgY2FzZSAweDJEOiAgIC8qIEVOREYgKi8KLSAgICAgICAgcmVjLT5lbmQgPSBDVVIuSVA7CisgICAgICAgIHJlYy0+ZW5kID0gZXhjLT5JUDsKICAgICAgICAgcmV0dXJuOwogICAgICAgfQogICAgIH0KQEAgLTQ4NDIsNDAgKzM3OTgsMzcgQEAKICAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfRU5ERiggSU5TX0FSRyApCisgIEluc19FTkRGKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewogICAgIFRUX0NhbGxSZWMqICBwUmVjOwogCi0gICAgRlRfVU5VU0VEX0FSRzsKLQogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgQ1VSLnNwaF9pbl9mdW5jX2ZsYWdzID0gMHgwMDAwOworICAgIGV4Yy0+c3BoX2luX2Z1bmNfZmxhZ3MgPSAweDAwMDA7CiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCiAKLSAgICBpZiAoIENVUi5jYWxsVG9wIDw9IDAgKSAgICAgLyogV2UgZW5jb3VudGVyZWQgYW4gRU5ERiB3aXRob3V0IGEgY2FsbCAqLworICAgIGlmICggZXhjLT5jYWxsVG9wIDw9IDAgKSAgICAgLyogV2UgZW5jb3VudGVyZWQgYW4gRU5ERiB3aXRob3V0IGEgY2FsbCAqLwogICAgIHsKLSAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBFTkRGX0luX0V4ZWNfU3RyZWFtICk7CisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEVOREZfSW5fRXhlY19TdHJlYW0gKTsKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDVVIuY2FsbFRvcC0tOworICAgIGV4Yy0+Y2FsbFRvcC0tOwogCi0gICAgcFJlYyA9ICZDVVIuY2FsbFN0YWNrW0NVUi5jYWxsVG9wXTsKKyAgICBwUmVjID0gJmV4Yy0+Y2FsbFN0YWNrW2V4Yy0+Y2FsbFRvcF07CiAKICAgICBwUmVjLT5DdXJfQ291bnQtLTsKIAotICAgIENVUi5zdGVwX2lucyA9IEZBTFNFOworICAgIGV4Yy0+c3RlcF9pbnMgPSBGQUxTRTsKIAogICAgIGlmICggcFJlYy0+Q3VyX0NvdW50ID4gMCApCiAgICAgewotICAgICAgQ1VSLmNhbGxUb3ArKzsKLSAgICAgIENVUi5JUCA9IHBSZWMtPkRlZi0+c3RhcnQ7CisgICAgICBleGMtPmNhbGxUb3ArKzsKKyAgICAgIGV4Yy0+SVAgPSBwUmVjLT5EZWYtPnN0YXJ0OwogICAgIH0KICAgICBlbHNlCiAgICAgICAvKiBMb29wIHRocm91Z2ggdGhlIGN1cnJlbnQgZnVuY3Rpb24gKi8KLSAgICAgIElOU19Hb3RvX0NvZGVSYW5nZSggcFJlYy0+Q2FsbGVyX1JhbmdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwUmVjLT5DYWxsZXJfSVAgKTsKKyAgICAgIEluc19Hb3RvX0NvZGVSYW5nZSggZXhjLCBwUmVjLT5DYWxsZXJfUmFuZ2UsIHBSZWMtPkNhbGxlcl9JUCApOwogCiAgICAgLyogRXhpdCB0aGUgY3VycmVudCBjYWxsIGZyYW1lLiAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC00ODk0LDcgKzM4NDcsOCBAQAogICAvKiBTdGFjazogICAgICAgIHVpbnQzMj8gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19DQUxMKCBJTlNfQVJHICkKKyAgSW5zX0NBTEwoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBGVF9VTG9uZyAgICAgICBGOwogICAgIFRUX0NhbGxSZWMqICAgIHBDcmVjOwpAQCAtNDkwMywyOCArMzg1NywyOCBAQAogCiAgICAgLyogZmlyc3Qgb2YgYWxsLCBjaGVjayB0aGUgaW5kZXggKi8KIAotICAgIEYgPSBhcmdzWzBdOwotICAgIGlmICggQk9VTkRTTCggRiwgQ1VSLm1heEZ1bmMgKyAxICkgKQorICAgIEYgPSAoRlRfVUxvbmcpYXJnc1swXTsKKyAgICBpZiAoIEJPVU5EU0woIEYsIGV4Yy0+bWF4RnVuYyArIDEgKSApCiAgICAgICBnb3RvIEZhaWw7CiAKICAgICAvKiBFeGNlcHQgZm9yIHNvbWUgb2xkIEFwcGxlIGZvbnRzLCBhbGwgZnVuY3Rpb25zIGluIGEgVHJ1ZVR5cGUgKi8KICAgICAvKiBmb250IGFyZSBkZWZpbmVkIGluIGluY3JlYXNpbmcgb3JkZXIsIHN0YXJ0aW5nIGZyb20gMC4gIFRoaXMgKi8KICAgICAvKiBtZWFucyB0aGF0IHdlIG5vcm1hbGx5IGhhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgICBDVVIubWF4RnVuYysxID09IENVUi5udW1GRGVmcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgICBDVVIuRkRlZnNbbl0ub3BjID09IG4gZm9yIG4gaW4gMC4uQ1VSLm1heEZ1bmMgICAgICAgICAgICAgKi8KKyAgICAvKiAgICBleGMtPm1heEZ1bmMrMSA9PSBleGMtPm51bUZEZWZzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICBleGMtPkZEZWZzW25dLm9wYyA9PSBuIGZvciBuIGluIDAuLmV4Yy0+bWF4RnVuYyAgICAgICAgICAgKi8KICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiBJZiB0aGlzIGlzbid0IHRydWUsIHdlIG5lZWQgdG8gbG9vayB1cCB0aGUgZnVuY3Rpb24gdGFibGUuICAgKi8KIAotICAgIGRlZiA9IENVUi5GRGVmcyArIEY7Ci0gICAgaWYgKCBDVVIubWF4RnVuYyArIDEgIT0gQ1VSLm51bUZEZWZzIHx8IGRlZi0+b3BjICE9IEYgKQorICAgIGRlZiA9IGV4Yy0+RkRlZnMgKyBGOworICAgIGlmICggZXhjLT5tYXhGdW5jICsgMSAhPSBleGMtPm51bUZEZWZzIHx8IGRlZi0+b3BjICE9IEYgKQogICAgIHsKICAgICAgIC8qIGxvb2sgdXAgdGhlIEZEZWZzIHRhYmxlICovCiAgICAgICBUVF9EZWZSZWNvcmQqICBsaW1pdDsKIAogCi0gICAgICBkZWYgICA9IENVUi5GRGVmczsKLSAgICAgIGxpbWl0ID0gZGVmICsgQ1VSLm51bUZEZWZzOworICAgICAgZGVmICAgPSBleGMtPkZEZWZzOworICAgICAgbGltaXQgPSBkZWYgKyBleGMtPm51bUZEZWZzOwogCiAgICAgICB3aGlsZSAoIGRlZiA8IGxpbWl0ICYmIGRlZi0+b3BjICE9IEYgKQogICAgICAgICBkZWYrKzsKQEAgLTQ5MzgsNDEgKzM4OTIsNDAgQEAKICAgICAgIGdvdG8gRmFpbDsKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgQ1VSLmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgKCAoIENVUi5pdXBfY2FsbGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgKCBDVVIuc3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX05PX0NBTExfQUZURVJfSVVQICkgKSB8fAotICAgICAgICAgICAoIGRlZi0+c3BoX2ZkZWZfZmxhZ3MgJiBTUEhfRkRFRl9WQUNVRk9STV9ST1VORF8xICkgICAgICAgKSApCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICggKCBleGMtPml1cF9jYWxsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX05PX0NBTExfQUZURVJfSVVQICkgKSB8fAorICAgICAgICAgICAoIGRlZi0+c3BoX2ZkZWZfZmxhZ3MgJiBTUEhfRkRFRl9WQUNVRk9STV9ST1VORF8xICkgICAgICAgICkgKQogICAgICAgZ290byBGYWlsOwogICAgIGVsc2UKLSAgICAgIENVUi5zcGhfaW5fZnVuY19mbGFncyA9IGRlZi0+c3BoX2ZkZWZfZmxhZ3M7CisgICAgICBleGMtPnNwaF9pbl9mdW5jX2ZsYWdzID0gZGVmLT5zcGhfZmRlZl9mbGFnczsKICNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KIAogICAgIC8qIGNoZWNrIHRoZSBjYWxsIHN0YWNrICovCi0gICAgaWYgKCBDVVIuY2FsbFRvcCA+PSBDVVIuY2FsbFNpemUgKQorICAgIGlmICggZXhjLT5jYWxsVG9wID49IGV4Yy0+Y2FsbFNpemUgKQogICAgIHsKLSAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBTdGFja19PdmVyZmxvdyApOworICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBTdGFja19PdmVyZmxvdyApOwogICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHBDcmVjID0gQ1VSLmNhbGxTdGFjayArIENVUi5jYWxsVG9wOworICAgIHBDcmVjID0gZXhjLT5jYWxsU3RhY2sgKyBleGMtPmNhbGxUb3A7CiAKLSAgICBwQ3JlYy0+Q2FsbGVyX1JhbmdlID0gQ1VSLmN1clJhbmdlOwotICAgIHBDcmVjLT5DYWxsZXJfSVAgICAgPSBDVVIuSVAgKyAxOworICAgIHBDcmVjLT5DYWxsZXJfUmFuZ2UgPSBleGMtPmN1clJhbmdlOworICAgIHBDcmVjLT5DYWxsZXJfSVAgICAgPSBleGMtPklQICsgMTsKICAgICBwQ3JlYy0+Q3VyX0NvdW50ICAgID0gMTsKICAgICBwQ3JlYy0+RGVmICAgICAgICAgID0gZGVmOwogCi0gICAgQ1VSLmNhbGxUb3ArKzsKKyAgICBleGMtPmNhbGxUb3ArKzsKIAotICAgIElOU19Hb3RvX0NvZGVSYW5nZSggZGVmLT5yYW5nZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZi0+c3RhcnQgKTsKKyAgICBJbnNfR290b19Db2RlUmFuZ2UoIGV4YywgZGVmLT5yYW5nZSwgZGVmLT5zdGFydCApOwogCi0gICAgQ1VSLnN0ZXBfaW5zID0gRkFMU0U7CisgICAgZXhjLT5zdGVwX2lucyA9IEZBTFNFOwogCiAgICAgcmV0dXJuOwogCiAgIEZhaWw6Ci0gICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICB9CiAKIApAQCAtNDk4Myw3ICszOTM2LDggQEAKICAgLyogU3RhY2s6ICAgICAgICB1aW50MzI/IEVpbnQxNj8gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfTE9PUENBTEwoIElOU19BUkcgKQorICBJbnNfTE9PUENBTEwoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7CiAgICAgRlRfVUxvbmcgICAgICAgRjsKICAgICBUVF9DYWxsUmVjKiAgICBwQ3JlYzsKQEAgLTQ5OTEsMjggKzM5NDUsMjggQEAKIAogCiAgICAgLyogZmlyc3Qgb2YgYWxsLCBjaGVjayB0aGUgaW5kZXggKi8KLSAgICBGID0gYXJnc1sxXTsKLSAgICBpZiAoIEJPVU5EU0woIEYsIENVUi5tYXhGdW5jICsgMSApICkKKyAgICBGID0gKEZUX1VMb25nKWFyZ3NbMV07CisgICAgaWYgKCBCT1VORFNMKCBGLCBleGMtPm1heEZ1bmMgKyAxICkgKQogICAgICAgZ290byBGYWlsOwogCiAgICAgLyogRXhjZXB0IGZvciBzb21lIG9sZCBBcHBsZSBmb250cywgYWxsIGZ1bmN0aW9ucyBpbiBhIFRydWVUeXBlICovCiAgICAgLyogZm9udCBhcmUgZGVmaW5lZCBpbiBpbmNyZWFzaW5nIG9yZGVyLCBzdGFydGluZyBmcm9tIDAuICBUaGlzICovCiAgICAgLyogbWVhbnMgdGhhdCB3ZSBub3JtYWxseSBoYXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogICAgQ1VSLm1heEZ1bmMrMSA9PSBDVVIubnVtRkRlZnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogICAgQ1VSLkZEZWZzW25dLm9wYyA9PSBuIGZvciBuIGluIDAuLkNVUi5tYXhGdW5jICAgICAgICAgICAgICovCisgICAgLyogICAgZXhjLT5tYXhGdW5jKzEgPT0gZXhjLT5udW1GRGVmcyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAgZXhjLT5GRGVmc1tuXS5vcGMgPT0gbiBmb3IgbiBpbiAwLi5leGMtPm1heEZ1bmMgICAgICAgICAgICovCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgLyogSWYgdGhpcyBpc24ndCB0cnVlLCB3ZSBuZWVkIHRvIGxvb2sgdXAgdGhlIGZ1bmN0aW9uIHRhYmxlLiAgICovCiAKLSAgICBkZWYgPSBDVVIuRkRlZnMgKyBGOwotICAgIGlmICggQ1VSLm1heEZ1bmMgKyAxICE9IENVUi5udW1GRGVmcyB8fCBkZWYtPm9wYyAhPSBGICkKKyAgICBkZWYgPSBleGMtPkZEZWZzICsgRjsKKyAgICBpZiAoIGV4Yy0+bWF4RnVuYyArIDEgIT0gZXhjLT5udW1GRGVmcyB8fCBkZWYtPm9wYyAhPSBGICkKICAgICB7CiAgICAgICAvKiBsb29rIHVwIHRoZSBGRGVmcyB0YWJsZSAqLwogICAgICAgVFRfRGVmUmVjb3JkKiAgbGltaXQ7CiAKIAotICAgICAgZGVmICAgPSBDVVIuRkRlZnM7Ci0gICAgICBsaW1pdCA9IGRlZiArIENVUi5udW1GRGVmczsKKyAgICAgIGRlZiAgID0gZXhjLT5GRGVmczsKKyAgICAgIGxpbWl0ID0gZGVmICsgZXhjLT5udW1GRGVmczsKIAogICAgICAgd2hpbGUgKCBkZWYgPCBsaW1pdCAmJiBkZWYtPm9wYyAhPSBGICkKICAgICAgICAgZGVmKys7CkBAIC01MDI3LDQwICszOTgxLDQwIEBACiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgQ1VSLmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICggZGVmLT5zcGhfZmRlZl9mbGFncyAmIFNQSF9GREVGX1ZBQ1VGT1JNX1JPVU5EXzEgKSApCiAgICAgICBnb3RvIEZhaWw7CiAgICAgZWxzZQotICAgICAgQ1VSLnNwaF9pbl9mdW5jX2ZsYWdzID0gZGVmLT5zcGhfZmRlZl9mbGFnczsKKyAgICAgIGV4Yy0+c3BoX2luX2Z1bmNfZmxhZ3MgPSBkZWYtPnNwaF9mZGVmX2ZsYWdzOwogI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLwogCiAgICAgLyogY2hlY2sgc3RhY2sgKi8KLSAgICBpZiAoIENVUi5jYWxsVG9wID49IENVUi5jYWxsU2l6ZSApCisgICAgaWYgKCBleGMtPmNhbGxUb3AgPj0gZXhjLT5jYWxsU2l6ZSApCiAgICAgewotICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIFN0YWNrX092ZXJmbG93ICk7CisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIFN0YWNrX092ZXJmbG93ICk7CiAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCBhcmdzWzBdID4gMCApCiAgICAgewotICAgICAgcENyZWMgPSBDVVIuY2FsbFN0YWNrICsgQ1VSLmNhbGxUb3A7CisgICAgICBwQ3JlYyA9IGV4Yy0+Y2FsbFN0YWNrICsgZXhjLT5jYWxsVG9wOwogCi0gICAgICBwQ3JlYy0+Q2FsbGVyX1JhbmdlID0gQ1VSLmN1clJhbmdlOwotICAgICAgcENyZWMtPkNhbGxlcl9JUCAgICA9IENVUi5JUCArIDE7CisgICAgICBwQ3JlYy0+Q2FsbGVyX1JhbmdlID0gZXhjLT5jdXJSYW5nZTsKKyAgICAgIHBDcmVjLT5DYWxsZXJfSVAgICAgPSBleGMtPklQICsgMTsKICAgICAgIHBDcmVjLT5DdXJfQ291bnQgICAgPSAoRlRfSW50KWFyZ3NbMF07CiAgICAgICBwQ3JlYy0+RGVmICAgICAgICAgID0gZGVmOwogCi0gICAgICBDVVIuY2FsbFRvcCsrOworICAgICAgZXhjLT5jYWxsVG9wKys7CiAKLSAgICAgIElOU19Hb3RvX0NvZGVSYW5nZSggZGVmLT5yYW5nZSwgZGVmLT5zdGFydCApOworICAgICAgSW5zX0dvdG9fQ29kZVJhbmdlKCBleGMsIGRlZi0+cmFuZ2UsIGRlZi0+c3RhcnQgKTsKIAotICAgICAgQ1VSLnN0ZXBfaW5zID0gRkFMU0U7CisgICAgICBleGMtPnN0ZXBfaW5zID0gRkFMU0U7CiAgICAgfQogCiAgICAgcmV0dXJuOwogCiAgIEZhaWw6Ci0gICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICB9CiAKIApAQCAtNTA3MSw3ICs0MDI1LDggQEAKICAgLyogU3RhY2s6ICAgICAgICBFaW50OCAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfSURFRiggSU5TX0FSRyApCisgIEluc19JREVGKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7CiAgICAgVFRfRGVmUmVjb3JkKiAgZGVmOwogICAgIFRUX0RlZlJlY29yZCogIGxpbWl0OwpAQCAtNTA3OSw4ICs0MDM0LDggQEAKIAogICAgIC8qICBGaXJzdCBvZiBhbGwsIGxvb2sgZm9yIHRoZSBzYW1lIGZ1bmN0aW9uIGluIG91ciB0YWJsZSAqLwogCi0gICAgZGVmICAgPSBDVVIuSURlZnM7Ci0gICAgbGltaXQgPSBkZWYgKyBDVVIubnVtSURlZnM7CisgICAgZGVmICAgPSBleGMtPklEZWZzOworICAgIGxpbWl0ID0gZGVmICsgZXhjLT5udW1JRGVmczsKIAogICAgIGZvciAoIDsgZGVmIDwgbGltaXQ7IGRlZisrICkKICAgICAgIGlmICggZGVmLT5vcGMgPT0gKEZUX1VMb25nKWFyZ3NbMF0gKQpAQCAtNTA4OSwzOSArNDA0NCwzOSBAQAogICAgIGlmICggZGVmID09IGxpbWl0ICkKICAgICB7CiAgICAgICAvKiBjaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCByb29tIGZvciBhIG5ldyBpbnN0cnVjdGlvbiAqLwotICAgICAgaWYgKCBDVVIubnVtSURlZnMgPj0gQ1VSLm1heElEZWZzICkKKyAgICAgIGlmICggZXhjLT5udW1JRGVmcyA+PSBleGMtPm1heElEZWZzICkKICAgICAgIHsKLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIFRvb19NYW55X0luc3RydWN0aW9uX0RlZnMgKTsKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBUb29fTWFueV9JbnN0cnVjdGlvbl9EZWZzICk7CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KLSAgICAgIENVUi5udW1JRGVmcysrOworICAgICAgZXhjLT5udW1JRGVmcysrOwogICAgIH0KIAogICAgIC8qIG9wY29kZSBtdXN0IGJlIHVuc2lnbmVkIDgtYml0IGludGVnZXIgKi8KICAgICBpZiAoIDAgPiBhcmdzWzBdIHx8IGFyZ3NbMF0gPiAweDAwRkYgKQogICAgIHsKLSAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBUb29fTWFueV9JbnN0cnVjdGlvbl9EZWZzICk7CisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIFRvb19NYW55X0luc3RydWN0aW9uX0RlZnMgKTsKICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBkZWYtPm9wYyAgICA9IChGVF9CeXRlKWFyZ3NbMF07Ci0gICAgZGVmLT5zdGFydCAgPSBDVVIuSVAgKyAxOwotICAgIGRlZi0+cmFuZ2UgID0gQ1VSLmN1clJhbmdlOworICAgIGRlZi0+c3RhcnQgID0gZXhjLT5JUCArIDE7CisgICAgZGVmLT5yYW5nZSAgPSBleGMtPmN1clJhbmdlOwogICAgIGRlZi0+YWN0aXZlID0gVFJVRTsKIAotICAgIGlmICggKEZUX1VMb25nKWFyZ3NbMF0gPiBDVVIubWF4SW5zICkKLSAgICAgIENVUi5tYXhJbnMgPSAoRlRfQnl0ZSlhcmdzWzBdOworICAgIGlmICggKEZUX1VMb25nKWFyZ3NbMF0gPiBleGMtPm1heElucyApCisgICAgICBleGMtPm1heElucyA9IChGVF9CeXRlKWFyZ3NbMF07CiAKICAgICAvKiBOb3cgc2tpcCB0aGUgd2hvbGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gKi8KICAgICAvKiBXZSBkb24ndCBhbGxvdyBuZXN0ZWQgSURFRnMgJiBGREVGcy4gICAgKi8KIAotICAgIHdoaWxlICggU0tJUF9Db2RlKCkgPT0gU1VDQ0VTUyApCisgICAgd2hpbGUgKCBTa2lwQ29kZSggZXhjICkgPT0gU1VDQ0VTUyApCiAgICAgewotICAgICAgc3dpdGNoICggQ1VSLm9wY29kZSApCisgICAgICBzd2l0Y2ggKCBleGMtPm9wY29kZSApCiAgICAgICB7CiAgICAgICBjYXNlIDB4ODk6ICAgLyogSURFRiAqLwogICAgICAgY2FzZSAweDJDOiAgIC8qIEZERUYgKi8KLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIE5lc3RlZF9ERUZTICk7CisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggTmVzdGVkX0RFRlMgKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgY2FzZSAweDJEOiAgIC8qIEVOREYgKi8KICAgICAgICAgcmV0dXJuOwpAQCAtNTEzNCw4ICs0MDg5LDYgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFBVU0hJTkcgREFUQSBPTlRPIFRIRSBJTlRFUlBSRVRFUiBTVEFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBJbnN0cnVjdGlvbnMgYXBwZWFyIGluIHRoZSBzcGVjaWZpY2F0aW9uJ3Mgb3JkZXIuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCkBAIC01MTQ2LDIzICs0MDk5LDI0IEBACiAgIC8qIFN0YWNrOiAgICAgICAgLS0+IHVpbnQzMi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX05QVVNIQiggSU5TX0FSRyApCisgIEluc19OUFVTSEIoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewogICAgIEZUX1VTaG9ydCAgTCwgSzsKIAogCi0gICAgTCA9IChGVF9VU2hvcnQpQ1VSLmNvZGVbQ1VSLklQICsgMV07CisgICAgTCA9IChGVF9VU2hvcnQpZXhjLT5jb2RlW2V4Yy0+SVAgKyAxXTsKIAotICAgIGlmICggQk9VTkRTKCBMLCBDVVIuc3RhY2tTaXplICsgMSAtIENVUi50b3AgKSApCisgICAgaWYgKCBCT1VORFMoIEwsIGV4Yy0+c3RhY2tTaXplICsgMSAtIGV4Yy0+dG9wICkgKQogICAgIHsKLSAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBTdGFja19PdmVyZmxvdyApOworICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBTdGFja19PdmVyZmxvdyApOwogICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGZvciAoIEsgPSAxOyBLIDw9IEw7IEsrKyApCi0gICAgICBhcmdzW0sgLSAxXSA9IENVUi5jb2RlW0NVUi5JUCArIEsgKyAxXTsKKyAgICAgIGFyZ3NbSyAtIDFdID0gZXhjLT5jb2RlW2V4Yy0+SVAgKyBLICsgMV07CiAKLSAgICBDVVIubmV3X3RvcCArPSBMOworICAgIGV4Yy0+bmV3X3RvcCArPSBMOwogICB9CiAKIApAQCAtNTE3MywyNiArNDEyNywyNyBAQAogICAvKiBTdGFjazogICAgICAgIC0tPiBpbnQzMi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19OUFVTSFcoIElOU19BUkcgKQorICBJbnNfTlBVU0hXKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBGVF9VU2hvcnQgIEwsIEs7CiAKIAotICAgIEwgPSAoRlRfVVNob3J0KUNVUi5jb2RlW0NVUi5JUCArIDFdOworICAgIEwgPSAoRlRfVVNob3J0KWV4Yy0+Y29kZVtleGMtPklQICsgMV07CiAKLSAgICBpZiAoIEJPVU5EUyggTCwgQ1VSLnN0YWNrU2l6ZSArIDEgLSBDVVIudG9wICkgKQorICAgIGlmICggQk9VTkRTKCBMLCBleGMtPnN0YWNrU2l6ZSArIDEgLSBleGMtPnRvcCApICkKICAgICB7Ci0gICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggU3RhY2tfT3ZlcmZsb3cgKTsKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggU3RhY2tfT3ZlcmZsb3cgKTsKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDVVIuSVAgKz0gMjsKKyAgICBleGMtPklQICs9IDI7CiAKICAgICBmb3IgKCBLID0gMDsgSyA8IEw7IEsrKyApCi0gICAgICBhcmdzW0tdID0gR0VUX1Nob3J0SW5zKCk7CisgICAgICBhcmdzW0tdID0gR2V0U2hvcnRJbnMoIGV4YyApOwogCi0gICAgQ1VSLnN0ZXBfaW5zID0gRkFMU0U7Ci0gICAgQ1VSLm5ld190b3AgKz0gTDsKKyAgICBleGMtPnN0ZXBfaW5zID0gRkFMU0U7CisgICAgZXhjLT5uZXdfdG9wICs9IEw7CiAgIH0KIAogCkBAIC01MjAzLDIxICs0MTU4LDIyIEBACiAgIC8qIFN0YWNrOiAgICAgICAgLS0+IHVpbnQzMi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX1BVU0hCKCBJTlNfQVJHICkKKyAgSW5zX1BVU0hCKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewogICAgIEZUX1VTaG9ydCAgTCwgSzsKIAogCi0gICAgTCA9IChGVF9VU2hvcnQpKCBDVVIub3Bjb2RlIC0gMHhCMCArIDEgKTsKKyAgICBMID0gKEZUX1VTaG9ydCkoIGV4Yy0+b3Bjb2RlIC0gMHhCMCArIDEgKTsKIAotICAgIGlmICggQk9VTkRTKCBMLCBDVVIuc3RhY2tTaXplICsgMSAtIENVUi50b3AgKSApCisgICAgaWYgKCBCT1VORFMoIEwsIGV4Yy0+c3RhY2tTaXplICsgMSAtIGV4Yy0+dG9wICkgKQogICAgIHsKLSAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBTdGFja19PdmVyZmxvdyApOworICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBTdGFja19PdmVyZmxvdyApOwogICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGZvciAoIEsgPSAxOyBLIDw9IEw7IEsrKyApCi0gICAgICBhcmdzW0sgLSAxXSA9IENVUi5jb2RlW0NVUi5JUCArIEtdOworICAgICAgYXJnc1tLIC0gMV0gPSBleGMtPmNvZGVbZXhjLT5JUCArIEtdOwogICB9CiAKIApAQCAtNTIyOCwyNSArNDE4NCwyNiBAQAogICAvKiBTdGFjazogICAgICAgIC0tPiBpbnQzMi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19QVVNIVyggSU5TX0FSRyApCisgIEluc19QVVNIVyggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBGVF9VU2hvcnQgIEwsIEs7CiAKIAotICAgIEwgPSAoRlRfVVNob3J0KSggQ1VSLm9wY29kZSAtIDB4QjggKyAxICk7CisgICAgTCA9IChGVF9VU2hvcnQpKCBleGMtPm9wY29kZSAtIDB4QjggKyAxICk7CiAKLSAgICBpZiAoIEJPVU5EUyggTCwgQ1VSLnN0YWNrU2l6ZSArIDEgLSBDVVIudG9wICkgKQorICAgIGlmICggQk9VTkRTKCBMLCBleGMtPnN0YWNrU2l6ZSArIDEgLSBleGMtPnRvcCApICkKICAgICB7Ci0gICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggU3RhY2tfT3ZlcmZsb3cgKTsKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggU3RhY2tfT3ZlcmZsb3cgKTsKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDVVIuSVArKzsKKyAgICBleGMtPklQKys7CiAKICAgICBmb3IgKCBLID0gMDsgSyA8IEw7IEsrKyApCi0gICAgICBhcmdzW0tdID0gR0VUX1Nob3J0SW5zKCk7CisgICAgICBhcmdzW0tdID0gR2V0U2hvcnRJbnMoIGV4YyApOwogCi0gICAgQ1VSLnN0ZXBfaW5zID0gRkFMU0U7CisgICAgZXhjLT5zdGVwX2lucyA9IEZBTFNFOwogICB9CiAKIApAQCAtNTI1NCwxMSArNDIxMSw1NjEgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIE1BTkFHSU5HIFRIRSBHUkFQSElDUyBTVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIEluc3RydWN0aW9ucyBhcHBlYXIgaW4gdGhlIHNwZWNzJyBvcmRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCisgIHN0YXRpYyBGVF9Cb29sCisgIEluc19TeFZUTCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICAgYUlkeDEsCisgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgIGFJZHgyLAorICAgICAgICAgICAgIEZUX1VuaXRWZWN0b3IqICBWZWMgKQorICB7CisgICAgRlRfTG9uZyAgICAgQSwgQiwgQzsKKyAgICBGVF9WZWN0b3IqICBwMTsKKyAgICBGVF9WZWN0b3IqICBwMjsKKworICAgIEZUX0J5dGUgIG9wY29kZSA9IGV4Yy0+b3Bjb2RlOworCisKKyAgICBpZiAoIEJPVU5EUyggYUlkeDEsIGV4Yy0+enAyLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EUyggYUlkeDIsIGV4Yy0+enAxLm5fcG9pbnRzICkgKQorICAgIHsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgcmV0dXJuIEZBSUxVUkU7CisgICAgfQorCisgICAgcDEgPSBleGMtPnpwMS5jdXIgKyBhSWR4MjsKKyAgICBwMiA9IGV4Yy0+enAyLmN1ciArIGFJZHgxOworCisgICAgQSA9IHAxLT54IC0gcDItPng7CisgICAgQiA9IHAxLT55IC0gcDItPnk7CisKKyAgICAvKiBJZiBwMSA9PSBwMiwgU1B2VEwgYW5kIFNGdlRMIGJlaGF2ZSB0aGUgc2FtZSBhcyAqLworICAgIC8qIFNQdlRDQVtYXSBhbmQgU0Z2VENBW1hdLCByZXNwZWN0aXZlbHkuICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBDb25maXJtZWQgYnkgR3JlZyBIaXRjaGNvY2suICAgICAgICAgICAgICAgICAgICAqLworCisgICAgaWYgKCBBID09IDAgJiYgQiA9PSAwICkKKyAgICB7CisgICAgICBBICAgICAgPSAweDQwMDA7CisgICAgICBvcGNvZGUgPSAwOworICAgIH0KKworICAgIGlmICggKCBvcGNvZGUgJiAxICkgIT0gMCApCisgICAgeworICAgICAgQyA9ICBCOyAgIC8qIGNvdW50ZXIgY2xvY2t3aXNlIHJvdGF0aW9uICovCisgICAgICBCID0gIEE7CisgICAgICBBID0gLUM7CisgICAgfQorCisgICAgTm9ybWFsaXplKCBBLCBCLCBWZWMgKTsKKworICAgIHJldHVybiBTVUNDRVNTOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNWVENBW2FdOiAgICAgU2V0IChGIGFuZCBQKSBWZWN0b3JzIHRvIENvb3JkaW5hdGUgQXhpcyAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MDAtMHgwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTUHZUQ0FbYV06ICAgIFNldCBQVmVjdG9yIHRvIENvb3JkaW5hdGUgQXhpcyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDAyLTB4MDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU0Z2VENBW2FdOiAgICBTZXQgRlZlY3RvciB0byBDb29yZGluYXRlIEF4aXMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgwNC0weDA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19TeHlUQ0EoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQorICB7CisgICAgRlRfU2hvcnQgIEFBLCBCQjsKKworICAgIEZUX0J5dGUgIG9wY29kZSA9IGV4Yy0+b3Bjb2RlOworCisKKyAgICBBQSA9IChGVF9TaG9ydCkoICggb3Bjb2RlICYgMSApIDw8IDE0ICk7CisgICAgQkIgPSAoRlRfU2hvcnQpKCBBQSBeIDB4NDAwMCApOworCisgICAgaWYgKCBvcGNvZGUgPCA0ICkKKyAgICB7CisgICAgICBleGMtPkdTLnByb2pWZWN0b3IueCA9IEFBOworICAgICAgZXhjLT5HUy5wcm9qVmVjdG9yLnkgPSBCQjsKKworICAgICAgZXhjLT5HUy5kdWFsVmVjdG9yLnggPSBBQTsKKyAgICAgIGV4Yy0+R1MuZHVhbFZlY3Rvci55ID0gQkI7CisgICAgfQorICAgIGVsc2UKKyAgICAgIEdVRVNTX1ZFQ1RPUiggcHJvalZlY3RvciApOworCisgICAgaWYgKCAoIG9wY29kZSAmIDIgKSA9PSAwICkKKyAgICB7CisgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCA9IEFBOworICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnkgPSBCQjsKKyAgICB9CisgICAgZWxzZQorICAgICAgR1VFU1NfVkVDVE9SKCBmcmVlVmVjdG9yICk7CisKKyAgICBDb21wdXRlX0Z1bmNzKCBleGMgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTUHZUTFthXTogICAgIFNldCBQVmVjdG9yIFRvIExpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDA2LTB4MDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NQVlRMKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGlmICggSW5zX1N4VlRMKCBleGMsCisgICAgICAgICAgICAgICAgICAgIChGVF9VU2hvcnQpYXJnc1sxXSwKKyAgICAgICAgICAgICAgICAgICAgKEZUX1VTaG9ydClhcmdzWzBdLAorICAgICAgICAgICAgICAgICAgICAmZXhjLT5HUy5wcm9qVmVjdG9yICkgPT0gU1VDQ0VTUyApCisgICAgeworICAgICAgZXhjLT5HUy5kdWFsVmVjdG9yID0gZXhjLT5HUy5wcm9qVmVjdG9yOworICAgICAgR1VFU1NfVkVDVE9SKCBmcmVlVmVjdG9yICk7CisgICAgICBDb21wdXRlX0Z1bmNzKCBleGMgKTsKKyAgICB9CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU0Z2VExbYV06ICAgICBTZXQgRlZlY3RvciBUbyBMaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgwOC0weDA5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19TRlZUTCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBpZiAoIEluc19TeFZUTCggZXhjLAorICAgICAgICAgICAgICAgICAgICAoRlRfVVNob3J0KWFyZ3NbMV0sCisgICAgICAgICAgICAgICAgICAgIChGVF9VU2hvcnQpYXJnc1swXSwKKyAgICAgICAgICAgICAgICAgICAgJmV4Yy0+R1MuZnJlZVZlY3RvciApID09IFNVQ0NFU1MgKQorICAgIHsKKyAgICAgIEdVRVNTX1ZFQ1RPUiggcHJvalZlY3RvciApOworICAgICAgQ29tcHV0ZV9GdW5jcyggZXhjICk7CisgICAgfQorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNGdlRQdltdOiAgICAgU2V0IEZWZWN0b3IgVG8gUFZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU0ZWVFBWKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKKyAgeworICAgIEdVRVNTX1ZFQ1RPUiggcHJvalZlY3RvciApOworICAgIGV4Yy0+R1MuZnJlZVZlY3RvciA9IGV4Yy0+R1MucHJvalZlY3RvcjsKKyAgICBDb21wdXRlX0Z1bmNzKCBleGMgKTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTUHZGU1tdOiAgICAgIFNldCBQVmVjdG9yIEZyb20gU3RhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgZjIuMTQgZjIuMTQgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NQVkZTKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIEZUX1Nob3J0ICBTOworICAgIEZUX0xvbmcgICBYLCBZOworCisKKyAgICAvKiBPbmx5IHVzZSBsb3cgMTZiaXRzLCB0aGVuIHNpZ24gZXh0ZW5kICovCisgICAgUyA9IChGVF9TaG9ydClhcmdzWzFdOworICAgIFkgPSAoRlRfTG9uZylTOworICAgIFMgPSAoRlRfU2hvcnQpYXJnc1swXTsKKyAgICBYID0gKEZUX0xvbmcpUzsKKworICAgIE5vcm1hbGl6ZSggWCwgWSwgJmV4Yy0+R1MucHJvalZlY3RvciApOworCisgICAgZXhjLT5HUy5kdWFsVmVjdG9yID0gZXhjLT5HUy5wcm9qVmVjdG9yOworICAgIEdVRVNTX1ZFQ1RPUiggZnJlZVZlY3RvciApOworICAgIENvbXB1dGVfRnVuY3MoIGV4YyApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNGdkZTW106ICAgICAgU2V0IEZWZWN0b3IgRnJvbSBTdGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBmMi4xNCBmMi4xNCAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU0ZWRlMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgRlRfU2hvcnQgIFM7CisgICAgRlRfTG9uZyAgIFgsIFk7CisKKworICAgIC8qIE9ubHkgdXNlIGxvdyAxNmJpdHMsIHRoZW4gc2lnbiBleHRlbmQgKi8KKyAgICBTID0gKEZUX1Nob3J0KWFyZ3NbMV07CisgICAgWSA9IChGVF9Mb25nKVM7CisgICAgUyA9IChGVF9TaG9ydClhcmdzWzBdOworICAgIFggPSBTOworCisgICAgTm9ybWFsaXplKCBYLCBZLCAmZXhjLT5HUy5mcmVlVmVjdG9yICk7CisgICAgR1VFU1NfVkVDVE9SKCBwcm9qVmVjdG9yICk7CisgICAgQ29tcHV0ZV9GdW5jcyggZXhjICk7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogR1B2W106ICAgICAgICBHZXQgUHJvamVjdGlvbiBWZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgwQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIGVmMi4xNCAtLT4gZWYyLjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19HUFYoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCisgICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCisgICAgeworICAgICAgYXJnc1swXSA9IGV4Yy0+R1MuYm90aF94X2F4aXMgPyAweDQwMDAgOiAwOworICAgICAgYXJnc1sxXSA9IGV4Yy0+R1MuYm90aF94X2F4aXMgPyAwIDogMHg0MDAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgYXJnc1swXSA9IGV4Yy0+R1MucHJvalZlY3Rvci54OworICAgICAgYXJnc1sxXSA9IGV4Yy0+R1MucHJvalZlY3Rvci55OworICAgIH0KKyNlbHNlCisgICAgYXJnc1swXSA9IGV4Yy0+R1MucHJvalZlY3Rvci54OworICAgIGFyZ3NbMV0gPSBleGMtPkdTLnByb2pWZWN0b3IueTsKKyNlbmRpZgorICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEdGdltdOiAgICAgICAgR2V0IEZyZWVkb20gVmVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBlZjIuMTQgLS0+IGVmMi4xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfR0ZWKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORworICAgIGlmICggZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKQorICAgIHsKKyAgICAgIGFyZ3NbMF0gPSBleGMtPkdTLmJvdGhfeF9heGlzID8gMHg0MDAwIDogMDsKKyAgICAgIGFyZ3NbMV0gPSBleGMtPkdTLmJvdGhfeF9heGlzID8gMCA6IDB4NDAwMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGFyZ3NbMF0gPSBleGMtPkdTLmZyZWVWZWN0b3IueDsKKyAgICAgIGFyZ3NbMV0gPSBleGMtPkdTLmZyZWVWZWN0b3IueTsKKyAgICB9CisjZWxzZQorICAgIGFyZ3NbMF0gPSBleGMtPkdTLmZyZWVWZWN0b3IueDsKKyAgICBhcmdzWzFdID0gZXhjLT5HUy5mcmVlVmVjdG9yLnk7CisjZW5kaWYKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTUlAwW106ICAgICAgIFNldCBSZWZlcmVuY2UgUG9pbnQgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NSUDAoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBleGMtPkdTLnJwMCA9IChGVF9VU2hvcnQpYXJnc1swXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTUlAxW106ICAgICAgIFNldCBSZWZlcmVuY2UgUG9pbnQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NSUDEoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBleGMtPkdTLnJwMSA9IChGVF9VU2hvcnQpYXJnc1swXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTUlAyW106ICAgICAgIFNldCBSZWZlcmVuY2UgUG9pbnQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NSUDIoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBleGMtPkdTLnJwMiA9IChGVF9VU2hvcnQpYXJnc1swXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTTURbXTogICAgICAgIFNldCBNaW5pbXVtIERpc3RhbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDFBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NNRCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgZXhjLT5HUy5taW5pbXVtX2Rpc3RhbmNlID0gYXJnc1swXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTQ1ZUQ0lbXTogICAgIFNldCBDb250cm9sIFZhbHVlIFRhYmxlIEN1dCBJbiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NDVlRDSSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgZXhjLT5HUy5jb250cm9sX3ZhbHVlX2N1dGluID0gKEZUX0YyNkRvdDYpYXJnc1swXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTU1dDSVtdOiAgICAgIFNldCBTaW5nbGUgV2lkdGggQ3V0IEluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDFFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NTV0NJKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGV4Yy0+R1Muc2luZ2xlX3dpZHRoX2N1dGluID0gKEZUX0YyNkRvdDYpYXJnc1swXTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTU1dbXTogICAgICAgIFNldCBTaW5nbGUgV2lkdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDFGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NTVyggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQorICB7CisgICAgZXhjLT5HUy5zaW5nbGVfd2lkdGhfdmFsdWUgPSBGVF9NdWxGaXgoIGFyZ3NbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5zY2FsZSApOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEZMSVBPTltdOiAgICAgU2V0IGF1dG8tRkxJUCB0byBPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfRkxJUE9OKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKKyAgeworICAgIGV4Yy0+R1MuYXV0b19mbGlwID0gVFJVRTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGTElQT0ZGW106ICAgIFNldCBhdXRvLUZMSVAgdG8gT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX0ZMSVBPRkYoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQorICB7CisgICAgZXhjLT5HUy5hdXRvX2ZsaXAgPSBGQUxTRTsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTQU5HV1tdOiAgICAgIFNldCBBTkdsZSBXZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1NBTkdXKCB2b2lkICkKKyAgeworICAgIC8qIGluc3RydWN0aW9uIG5vdCBzdXBwb3J0ZWQgYW55bW9yZSAqLworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNEQltdOiAgICAgICAgU2V0IERlbHRhIEJhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU0RCKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBleGMtPkdTLmRlbHRhX2Jhc2UgPSAoRlRfVVNob3J0KWFyZ3NbMF07CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU0RTW106ICAgICAgICBTZXQgRGVsdGEgU2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg1RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19TRFMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIGlmICggKEZUX1VMb25nKWFyZ3NbMF0gPiA2VUwgKQorICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBCYWRfQXJndW1lbnQgKTsKKyAgICBlbHNlCisgICAgICBleGMtPkdTLmRlbHRhX3NoaWZ0ID0gKEZUX1VTaG9ydClhcmdzWzBdOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFJUSEdbXTogICAgICAgUm91bmQgVG8gSGFsZiBHcmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4MTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfUlRIRyggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICBleGMtPkdTLnJvdW5kX3N0YXRlID0gVFRfUm91bmRfVG9fSGFsZl9HcmlkOworICAgIGV4Yy0+ZnVuY19yb3VuZCAgICAgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9Ub19IYWxmX0dyaWQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogUlRHW106ICAgICAgICBSb3VuZCBUbyBHcmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHgxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19SVEcoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQorICB7CisgICAgZXhjLT5HUy5yb3VuZF9zdGF0ZSA9IFRUX1JvdW5kX1RvX0dyaWQ7CisgICAgZXhjLT5mdW5jX3JvdW5kICAgICA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX1RvX0dyaWQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiBSVERHW106ICAgICAgIFJvdW5kIFRvIERvdWJsZSBHcmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1JUREcoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQorICB7CisgICAgZXhjLT5HUy5yb3VuZF9zdGF0ZSA9IFRUX1JvdW5kX1RvX0RvdWJsZV9HcmlkOworICAgIGV4Yy0+ZnVuY19yb3VuZCAgICAgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9Ub19Eb3VibGVfR3JpZDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qIFJVVEdbXTogICAgICAgUm91bmQgVXAgVG8gR3JpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4N0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfUlVURyggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICBleGMtPkdTLnJvdW5kX3N0YXRlID0gVFRfUm91bmRfVXBfVG9fR3JpZDsKKyAgICBleGMtPmZ1bmNfcm91bmQgICAgID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfVXBfVG9fR3JpZDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBSRFRHW106ICAgICAgIFJvdW5kIERvd24gVG8gR3JpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDdEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1JEVEcoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQorICB7CisgICAgZXhjLT5HUy5yb3VuZF9zdGF0ZSA9IFRUX1JvdW5kX0Rvd25fVG9fR3JpZDsKKyAgICBleGMtPmZ1bmNfcm91bmQgICAgID0gKFRUX1JvdW5kX0Z1bmMpUm91bmRfRG93bl9Ub19HcmlkOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFJPRkZbXTogICAgICAgUm91bmQgT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4N0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfUk9GRiggVFRfRXhlY0NvbnRleHQgIGV4YyApCisgIHsKKyAgICBleGMtPkdTLnJvdW5kX3N0YXRlID0gVFRfUm91bmRfT2ZmOworICAgIGV4Yy0+ZnVuY19yb3VuZCAgICAgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9Ob25lOworICB9CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFNST1VORFtdOiAgICAgU3VwZXIgUk9VTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBPcGNvZGUgcmFuZ2U6IDB4NzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogU3RhY2s6ICAgICAgICBFaW50OCAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfU1JPVU5EKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBTZXRTdXBlclJvdW5kKCBleGMsIDB4NDAwMCwgYXJnc1swXSApOworCisgICAgZXhjLT5HUy5yb3VuZF9zdGF0ZSA9IFRUX1JvdW5kX1N1cGVyOworICAgIGV4Yy0+ZnVuY19yb3VuZCAgICAgPSAoVFRfUm91bmRfRnVuYylSb3VuZF9TdXBlcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTNDVST1VORFtdOiAgIFN1cGVyIFJPVU5EIDQ1IGRlZ3JlZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDc3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgSW5zX1M0NVJPVU5EKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKKyAgeworICAgIFNldFN1cGVyUm91bmQoIGV4YywgMHgyRDQxLCBhcmdzWzBdICk7CisKKyAgICBleGMtPkdTLnJvdW5kX3N0YXRlID0gVFRfUm91bmRfU3VwZXJfNDU7CisgICAgZXhjLT5mdW5jX3JvdW5kICAgICA9IChUVF9Sb3VuZF9GdW5jKVJvdW5kX1N1cGVyXzQ1OworICB9CisKKwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIEdDW2FdOiAgICAgICAgR2V0IENvb3JkaW5hdGUgcHJvamVjdGVkIG9udG8gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNTI2OSw3ICs0Nzc2LDggQEAKICAgLyogICAgICBhbG9uZyB0aGUgZHVhbCBwcm9qZWN0aW9uIHZlY3RvciEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfR0MoIElOU19BUkcgKQorICBJbnNfR0MoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7CiAgICAgRlRfVUxvbmcgICAgTDsKICAgICBGVF9GMjZEb3Q2ICBSOwpAQCAtNTI3NywxOCArNDc4NSwxOCBAQAogCiAgICAgTCA9IChGVF9VTG9uZylhcmdzWzBdOwogCi0gICAgaWYgKCBCT1VORFNMKCBMLCBDVVIuenAyLm5fcG9pbnRzICkgKQorICAgIGlmICggQk9VTkRTTCggTCwgZXhjLT56cDIubl9wb2ludHMgKSApCiAgICAgewotICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApCi0gICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CiAgICAgICBSID0gMDsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGlmICggQ1VSLm9wY29kZSAmIDEgKQotICAgICAgICBSID0gQ1VSX2Zhc3RfZHVhbHByb2ooICZDVVIuenAyLm9yZ1tMXSApOworICAgICAgaWYgKCBleGMtPm9wY29kZSAmIDEgKQorICAgICAgICBSID0gRkFTVF9EVUFMUFJPSiggJmV4Yy0+enAyLm9yZ1tMXSApOwogICAgICAgZWxzZQotICAgICAgICBSID0gQ1VSX2Zhc3RfcHJvamVjdCggJkNVUi56cDIuY3VyW0xdICk7CisgICAgICAgIFIgPSBGQVNUX1BST0pFQ1QoICZleGMtPnpwMi5jdXJbTF0gKTsKICAgICB9CiAKICAgICBhcmdzWzBdID0gUjsKQEAgLTUzMDYsNyArNDgxNCw4IEBACiAgIC8qICAgT0EgOj0gT0EgKyAoIHZhbHVlIC0gT0EucCApLyggZi5wICkgKiBmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX1NDRlMoIElOU19BUkcgKQorICBJbnNfU0NGUyggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewogICAgIEZUX0xvbmcgICAgSzsKICAgICBGVF9VU2hvcnQgIEw7CkBAIC01MzE0LDIxICs0ODIzLDIxIEBACiAKICAgICBMID0gKEZUX1VTaG9ydClhcmdzWzBdOwogCi0gICAgaWYgKCBCT1VORFMoIEwsIENVUi56cDIubl9wb2ludHMgKSApCisgICAgaWYgKCBCT1VORFMoIEwsIGV4Yy0+enAyLm5fcG9pbnRzICkgKQogICAgIHsKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEsgPSBDVVJfZmFzdF9wcm9qZWN0KCAmQ1VSLnpwMi5jdXJbTF0gKTsKKyAgICBLID0gRkFTVF9QUk9KRUNUKCAmZXhjLT56cDIuY3VyW0xdICk7CiAKLSAgICBDVVJfRnVuY19tb3ZlKCAmQ1VSLnpwMiwgTCwgYXJnc1sxXSAtIEsgKTsKKyAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDIsIEwsIGFyZ3NbMV0gLSBLICk7CiAKICAgICAvKiBVTkRPQ1VNRU5URUQhICBUaGUgTVMgcmFzdGVyaXplciBkb2VzIHRoYXQgd2l0aCAqLwogICAgIC8qIHR3aWxpZ2h0IHBvaW50cyAoY29uZmlybWVkIGJ5IEdyZWcgSGl0Y2hjb2NrKSAgICovCi0gICAgaWYgKCBDVVIuR1MuZ2VwMiA9PSAwICkKLSAgICAgIENVUi56cDIub3JnW0xdID0gQ1VSLnpwMi5jdXJbTF07CisgICAgaWYgKCBleGMtPkdTLmdlcDIgPT0gMCApCisgICAgICBleGMtPnpwMi5vcmdbTF0gPSBleGMtPnpwMi5jdXJbTF07CiAgIH0KIAogCkBAIC01MzQ4LDcgKzQ4NTcsOCBAQAogICAvKiBYWFg6IFVORE9DVU1FTlRFRDogYHpwMCAtIHpwMScsIGFuZCBub3QgYHpwMiAtIHpwMSEgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19NRCggSU5TX0FSRyApCisgIEluc19NRCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBGVF9VU2hvcnQgICBLLCBMOwogICAgIEZUX0YyNkRvdDYgIEQ7CkBAIC01MzU3LDUwICs0ODY3LDUwIEBACiAgICAgSyA9IChGVF9VU2hvcnQpYXJnc1sxXTsKICAgICBMID0gKEZUX1VTaG9ydClhcmdzWzBdOwogCi0gICAgaWYgKCBCT1VORFMoIEwsIENVUi56cDAubl9wb2ludHMgKSB8fAotICAgICAgICAgQk9VTkRTKCBLLCBDVVIuenAxLm5fcG9pbnRzICkgKQorICAgIGlmICggQk9VTkRTKCBMLCBleGMtPnpwMC5uX3BvaW50cyApIHx8CisgICAgICAgICBCT1VORFMoIEssIGV4Yy0+enAxLm5fcG9pbnRzICkgKQogICAgIHsKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgRCA9IDA7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBpZiAoIENVUi5vcGNvZGUgJiAxICkKLSAgICAgICAgRCA9IENVUl9GdW5jX3Byb2plY3QoIENVUi56cDAuY3VyICsgTCwgQ1VSLnpwMS5jdXIgKyBLICk7CisgICAgICBpZiAoIGV4Yy0+b3Bjb2RlICYgMSApCisgICAgICAgIEQgPSBQUk9KRUNUKCBleGMtPnpwMC5jdXIgKyBMLCBleGMtPnpwMS5jdXIgKyBLICk7CiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIC8qIFhYWDogVU5ET0NVTUVOVEVEOiB0d2lsaWdodCB6b25lIHNwZWNpYWwgY2FzZSAqLwogCi0gICAgICAgIGlmICggQ1VSLkdTLmdlcDAgPT0gMCB8fCBDVVIuR1MuZ2VwMSA9PSAwICkKKyAgICAgICAgaWYgKCBleGMtPkdTLmdlcDAgPT0gMCB8fCBleGMtPkdTLmdlcDEgPT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9WZWN0b3IqICB2ZWMxID0gQ1VSLnpwMC5vcmcgKyBMOwotICAgICAgICAgIEZUX1ZlY3RvciogIHZlYzIgPSBDVVIuenAxLm9yZyArIEs7CisgICAgICAgICAgRlRfVmVjdG9yKiAgdmVjMSA9IGV4Yy0+enAwLm9yZyArIEw7CisgICAgICAgICAgRlRfVmVjdG9yKiAgdmVjMiA9IGV4Yy0+enAxLm9yZyArIEs7CiAKIAotICAgICAgICAgIEQgPSBDVVJfRnVuY19kdWFscHJvaiggdmVjMSwgdmVjMiApOworICAgICAgICAgIEQgPSBEVUFMUFJPSiggdmVjMSwgdmVjMiApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgIEZUX1ZlY3RvciogIHZlYzEgPSBDVVIuenAwLm9ydXMgKyBMOwotICAgICAgICAgIEZUX1ZlY3RvciogIHZlYzIgPSBDVVIuenAxLm9ydXMgKyBLOworICAgICAgICAgIEZUX1ZlY3RvciogIHZlYzEgPSBleGMtPnpwMC5vcnVzICsgTDsKKyAgICAgICAgICBGVF9WZWN0b3IqICB2ZWMyID0gZXhjLT56cDEub3J1cyArIEs7CiAKIAotICAgICAgICAgIGlmICggQ1VSLm1ldHJpY3MueF9zY2FsZSA9PSBDVVIubWV0cmljcy55X3NjYWxlICkKKyAgICAgICAgICBpZiAoIGV4Yy0+bWV0cmljcy54X3NjYWxlID09IGV4Yy0+bWV0cmljcy55X3NjYWxlICkKICAgICAgICAgICB7CiAgICAgICAgICAgICAvKiB0aGlzIHNob3VsZCBiZSBmYXN0ZXIgKi8KLSAgICAgICAgICAgIEQgPSBDVVJfRnVuY19kdWFscHJvaiggdmVjMSwgdmVjMiApOwotICAgICAgICAgICAgRCA9IEZUX011bEZpeCggRCwgQ1VSLm1ldHJpY3MueF9zY2FsZSApOworICAgICAgICAgICAgRCA9IERVQUxQUk9KKCB2ZWMxLCB2ZWMyICk7CisgICAgICAgICAgICBEID0gRlRfTXVsRml4KCBELCBleGMtPm1ldHJpY3MueF9zY2FsZSApOwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAgICAgICAgICAgewogICAgICAgICAgICAgRlRfVmVjdG9yICB2ZWM7CiAKIAotICAgICAgICAgICAgdmVjLnggPSBGVF9NdWxGaXgoIHZlYzEtPnggLSB2ZWMyLT54LCBDVVIubWV0cmljcy54X3NjYWxlICk7Ci0gICAgICAgICAgICB2ZWMueSA9IEZUX011bEZpeCggdmVjMS0+eSAtIHZlYzItPnksIENVUi5tZXRyaWNzLnlfc2NhbGUgKTsKKyAgICAgICAgICAgIHZlYy54ID0gRlRfTXVsRml4KCB2ZWMxLT54IC0gdmVjMi0+eCwgZXhjLT5tZXRyaWNzLnhfc2NhbGUgKTsKKyAgICAgICAgICAgIHZlYy55ID0gRlRfTXVsRml4KCB2ZWMxLT55IC0gdmVjMi0+eSwgZXhjLT5tZXRyaWNzLnlfc2NhbGUgKTsKIAotICAgICAgICAgICAgRCA9IENVUl9mYXN0X2R1YWxwcm9qKCAmdmVjICk7CisgICAgICAgICAgICBEID0gRkFTVF9EVUFMUFJPSiggJnZlYyApOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtNTQwOCw4ICs0OTE4LDkgQEAKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwogICAgIC8qIERpc2FibGUgVHlwZSAyIFZhY3Vmb3JtIFJvdW5kcyAtIGUuZy4gQXJpYWwgTmFycm93ICovCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgQ1VSLmlnbm9yZV94X21vZGUgJiYgRlRfQUJTKCBEICkgPT0gNjQgKQorICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICYmCisgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgJiYKKyAgICAgICAgIEZUX0FCUyggRCApID09IDY0ICApCiAgICAgICBEICs9IDE7CiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCiAKQEAgLTU0MTksNjEgKzQ5MzAsNjMgQEAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNEUFZUTFthXTogICAgU2V0IER1YWwgUFZlY3RvciB0byBMaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTRFB2VExbYV06ICAgIFNldCBEdWFsIFBWZWN0b3IgdG8gTGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogT3Bjb2RlIHJhbmdlOiAweDg2LTB4ODcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX1NEUFZUTCggSU5TX0FSRyApCisgIEluc19TRFBWVEwoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewogICAgIEZUX0xvbmcgICAgQSwgQiwgQzsKICAgICBGVF9VU2hvcnQgIHAxLCBwMjsgICAgICAgICAgICAvKiB3YXMgRlRfSW50IGluIHBhcyB0eXBlIEVSUk9SICovCi0gICAgRlRfSW50ICAgICBhT3BjID0gQ1VSLm9wY29kZTsKKworICAgIEZUX0J5dGUgIG9wY29kZSA9IGV4Yy0+b3Bjb2RlOwogCiAKICAgICBwMSA9IChGVF9VU2hvcnQpYXJnc1sxXTsKICAgICBwMiA9IChGVF9VU2hvcnQpYXJnc1swXTsKIAotICAgIGlmICggQk9VTkRTKCBwMiwgQ1VSLnpwMS5uX3BvaW50cyApIHx8Ci0gICAgICAgICBCT1VORFMoIHAxLCBDVVIuenAyLm5fcG9pbnRzICkgKQorICAgIGlmICggQk9VTkRTKCBwMiwgZXhjLT56cDEubl9wb2ludHMgKSB8fAorICAgICAgICAgQk9VTkRTKCBwMSwgZXhjLT56cDIubl9wb2ludHMgKSApCiAgICAgewotICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApCi0gICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CiAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgewotICAgICAgRlRfVmVjdG9yKiB2MSA9IENVUi56cDEub3JnICsgcDI7Ci0gICAgICBGVF9WZWN0b3IqIHYyID0gQ1VSLnpwMi5vcmcgKyBwMTsKKyAgICAgIEZUX1ZlY3RvciogdjEgPSBleGMtPnpwMS5vcmcgKyBwMjsKKyAgICAgIEZUX1ZlY3RvciogdjIgPSBleGMtPnpwMi5vcmcgKyBwMTsKIAogCiAgICAgICBBID0gdjEtPnggLSB2Mi0+eDsKICAgICAgIEIgPSB2MS0+eSAtIHYyLT55OwogCi0gICAgICAvKiBJZiB2MSA9PSB2MiwgU0RQVlRMIGJlaGF2ZXMgdGhlIHNhbWUgYXMgKi8KKyAgICAgIC8qIElmIHYxID09IHYyLCBTRFB2VEwgYmVoYXZlcyB0aGUgc2FtZSBhcyAqLwogICAgICAgLyogU1ZUQ0FbWF0sIHJlc3BlY3RpdmVseS4gICAgICAgICAgICAgICAgICovCiAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgIC8qIENvbmZpcm1lZCBieSBHcmVnIEhpdGNoY29jay4gICAgICAgICAgICAqLwogCiAgICAgICBpZiAoIEEgPT0gMCAmJiBCID09IDAgKQogICAgICAgewotICAgICAgICBBICAgID0gMHg0MDAwOwotICAgICAgICBhT3BjID0gMDsKKyAgICAgICAgQSAgICAgID0gMHg0MDAwOworICAgICAgICBvcGNvZGUgPSAwOwogICAgICAgfQogICAgIH0KIAotICAgIGlmICggKCBhT3BjICYgMSApICE9IDAgKQorICAgIGlmICggKCBvcGNvZGUgJiAxICkgIT0gMCApCiAgICAgewogICAgICAgQyA9ICBCOyAgIC8qIGNvdW50ZXIgY2xvY2t3aXNlIHJvdGF0aW9uICovCiAgICAgICBCID0gIEE7CiAgICAgICBBID0gLUM7CiAgICAgfQogCi0gICAgTk9STWFsaXplKCBBLCBCLCAmQ1VSLkdTLmR1YWxWZWN0b3IgKTsKKyAgICBOb3JtYWxpemUoIEEsIEIsICZleGMtPkdTLmR1YWxWZWN0b3IgKTsKIAogICAgIHsKLSAgICAgIEZUX1ZlY3RvciogIHYxID0gQ1VSLnpwMS5jdXIgKyBwMjsKLSAgICAgIEZUX1ZlY3RvciogIHYyID0gQ1VSLnpwMi5jdXIgKyBwMTsKKyAgICAgIEZUX1ZlY3RvciogIHYxID0gZXhjLT56cDEuY3VyICsgcDI7CisgICAgICBGVF9WZWN0b3IqICB2MiA9IGV4Yy0+enAyLmN1ciArIHAxOwogCiAKICAgICAgIEEgPSB2MS0+eCAtIHYyLT54OwpAQCAtNTQ4MSwyMyArNDk5NCwyMSBAQAogCiAgICAgICBpZiAoIEEgPT0gMCAmJiBCID09IDAgKQogICAgICAgewotICAgICAgICBBICAgID0gMHg0MDAwOwotICAgICAgICBhT3BjID0gMDsKKyAgICAgICAgQSAgICAgID0gMHg0MDAwOworICAgICAgICBvcGNvZGUgPSAwOwogICAgICAgfQogICAgIH0KIAotICAgIGlmICggKCBhT3BjICYgMSApICE9IDAgKQorICAgIGlmICggKCBvcGNvZGUgJiAxICkgIT0gMCApCiAgICAgewogICAgICAgQyA9ICBCOyAgIC8qIGNvdW50ZXIgY2xvY2t3aXNlIHJvdGF0aW9uICovCiAgICAgICBCID0gIEE7CiAgICAgICBBID0gLUM7CiAgICAgfQogCi0gICAgTk9STWFsaXplKCBBLCBCLCAmQ1VSLkdTLnByb2pWZWN0b3IgKTsKLQorICAgIE5vcm1hbGl6ZSggQSwgQiwgJmV4Yy0+R1MucHJvalZlY3RvciApOwogICAgIEdVRVNTX1ZFQ1RPUiggZnJlZVZlY3RvciApOwotCi0gICAgQ09NUFVURV9GdW5jcygpOworICAgIENvbXB1dGVfRnVuY3MoIGV4YyApOwogICB9CiAKIApAQCAtNTUwOCwyNSArNTAxOSwyNiBAQAogICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19TWlAwKCBJTlNfQVJHICkKKyAgSW5zX1NaUDAoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBzd2l0Y2ggKCAoRlRfSW50KWFyZ3NbMF0gKQogICAgIHsKICAgICBjYXNlIDA6Ci0gICAgICBDVVIuenAwID0gQ1VSLnR3aWxpZ2h0OworICAgICAgZXhjLT56cDAgPSBleGMtPnR3aWxpZ2h0OwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDE6Ci0gICAgICBDVVIuenAwID0gQ1VSLnB0czsKKyAgICAgIGV4Yy0+enAwID0gZXhjLT5wdHM7CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6Ci0gICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDVVIuR1MuZ2VwMCA9IChGVF9VU2hvcnQpYXJnc1swXTsKKyAgICBleGMtPkdTLmdlcDAgPSAoRlRfVVNob3J0KWFyZ3NbMF07CiAgIH0KIAogCkBAIC01NTM3LDI1ICs1MDQ5LDI2IEBACiAgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX1NaUDEoIElOU19BUkcgKQorICBJbnNfU1pQMSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewogICAgIHN3aXRjaCAoIChGVF9JbnQpYXJnc1swXSApCiAgICAgewogICAgIGNhc2UgMDoKLSAgICAgIENVUi56cDEgPSBDVVIudHdpbGlnaHQ7CisgICAgICBleGMtPnpwMSA9IGV4Yy0+dHdpbGlnaHQ7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgMToKLSAgICAgIENVUi56cDEgPSBDVVIucHRzOworICAgICAgZXhjLT56cDEgPSBleGMtPnB0czsKICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENVUi5HUy5nZXAxID0gKEZUX1VTaG9ydClhcmdzWzBdOworICAgIGV4Yy0+R1MuZ2VwMSA9IChGVF9VU2hvcnQpYXJnc1swXTsKICAgfQogCiAKQEAgLTU1NjYsMjUgKzUwNzksMjYgQEAKICAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfU1pQMiggSU5TX0FSRyApCisgIEluc19TWlAyKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7CiAgICAgc3dpdGNoICggKEZUX0ludClhcmdzWzBdICkKICAgICB7CiAgICAgY2FzZSAwOgotICAgICAgQ1VSLnpwMiA9IENVUi50d2lsaWdodDsKKyAgICAgIGV4Yy0+enAyID0gZXhjLT50d2lsaWdodDsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAxOgotICAgICAgQ1VSLnpwMiA9IENVUi5wdHM7CisgICAgICBleGMtPnpwMiA9IGV4Yy0+cHRzOwogICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgotICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApCi0gICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CiAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ1VSLkdTLmdlcDIgPSAoRlRfVVNob3J0KWFyZ3NbMF07CisgICAgZXhjLT5HUy5nZXAyID0gKEZUX1VTaG9ydClhcmdzWzBdOwogICB9CiAKIApAQCAtNTU5NSw2MCArNTEwOSw4MiBAQAogICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19TWlBTKCBJTlNfQVJHICkKKyAgSW5zX1NaUFMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBzd2l0Y2ggKCAoRlRfSW50KWFyZ3NbMF0gKQogICAgIHsKICAgICBjYXNlIDA6Ci0gICAgICBDVVIuenAwID0gQ1VSLnR3aWxpZ2h0OworICAgICAgZXhjLT56cDAgPSBleGMtPnR3aWxpZ2h0OwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDE6Ci0gICAgICBDVVIuenAwID0gQ1VSLnB0czsKKyAgICAgIGV4Yy0+enAwID0gZXhjLT5wdHM7CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6Ci0gICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDVVIuenAxID0gQ1VSLnpwMDsKLSAgICBDVVIuenAyID0gQ1VSLnpwMDsKKyAgICBleGMtPnpwMSA9IGV4Yy0+enAwOworICAgIGV4Yy0+enAyID0gZXhjLT56cDA7CiAKLSAgICBDVVIuR1MuZ2VwMCA9IChGVF9VU2hvcnQpYXJnc1swXTsKLSAgICBDVVIuR1MuZ2VwMSA9IChGVF9VU2hvcnQpYXJnc1swXTsKLSAgICBDVVIuR1MuZ2VwMiA9IChGVF9VU2hvcnQpYXJnc1swXTsKKyAgICBleGMtPkdTLmdlcDAgPSAoRlRfVVNob3J0KWFyZ3NbMF07CisgICAgZXhjLT5HUy5nZXAxID0gKEZUX1VTaG9ydClhcmdzWzBdOworICAgIGV4Yy0+R1MuZ2VwMiA9IChGVF9VU2hvcnQpYXJnc1swXTsKICAgfQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBJTlNUQ1RSTFtdOiAgIElOU1RydWN0aW9uIENvblRSb0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDhlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg4RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBTdGFjazogICAgICAgIGludDMyIGludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19JTlNUQ1RSTCggSU5TX0FSRyApCisgIEluc19JTlNUQ1RSTCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSAgICBGVF9Mb25nICBLLCBMOworICAgIEZUX1VMb25nICBLLCBMLCBLZjsKIAogCi0gICAgSyA9IGFyZ3NbMV07Ci0gICAgTCA9IGFyZ3NbMF07CisgICAgSyA9IChGVF9VTG9uZylhcmdzWzFdOworICAgIEwgPSAoRlRfVUxvbmcpYXJnc1swXTsKIAotICAgIGlmICggSyA8IDEgfHwgSyA+IDIgKQorICAgIC8qIHNlbGVjdG9yIHZhbHVlcyBjYW5ub3QgYmUgYE9SJ2VkOyAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiB0aGV5IGFyZSBpbmRpY2VzIHN0YXJ0aW5nIHdpdGggaW5kZXggMSwgbm90IGZsYWdzICovCisgICAgaWYgKCBLIDwgMSB8fCBLID4gMyApCiAgICAgewotICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApCi0gICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CiAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCBMICE9IDAgKQotICAgICAgICBMID0gSzsKKyAgICAvKiBjb252ZXJ0IGluZGV4IHRvIGZsYWcgdmFsdWUgKi8KKyAgICBLZiA9IDEgPDwgKCBLIC0gMSApOwogCi0gICAgQ1VSLkdTLmluc3RydWN0X2NvbnRyb2wgPSBGVF9CT09MKAotICAgICAgKCAoRlRfQnl0ZSlDVVIuR1MuaW5zdHJ1Y3RfY29udHJvbCAmIH4oRlRfQnl0ZSlLICkgfCAoRlRfQnl0ZSlMICk7CisgICAgaWYgKCBMICE9IDAgKQorICAgIHsKKyAgICAgIC8qIGFyZ3VtZW50cyB0byBzZWxlY3RvcnMgbG9vayBsaWtlIGZsYWcgdmFsdWVzICovCisgICAgICBpZiAoIEwgIT0gS2YgKQorICAgICAgeworICAgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgZXhjLT5HUy5pbnN0cnVjdF9jb250cm9sICY9IH4oRlRfQnl0ZSlLZjsKKyAgICBleGMtPkdTLmluc3RydWN0X2NvbnRyb2wgfD0gKEZUX0J5dGUpTDsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworICAgIC8qIElOU1RDVFJMIG1vZGlmeWluZyBmbGFnIDMgYWxzbyBoYXMgYW4gZWZmZWN0ICovCisgICAgLyogb3V0c2lkZSBvZiB0aGUgQ1ZUIHByb2dyYW0gICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIEsgPT0gMyApCisgICAgICBleGMtPmlnbm9yZV94X21vZGUgPSBGVF9CT09MKCBMID09IDQgKTsKKyNlbmRpZgogICB9CiAKIApAQCAtNTY1OSw3ICs1MTk1LDggQEAKICAgLyogU3RhY2s6ICAgICAgICB1aW50MzI/IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfU0NBTkNUUkwoIElOU19BUkcgKQorICBJbnNfU0NBTkNUUkwoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7CiAgICAgRlRfSW50ICBBOwogCkBAIC01NjY5LDMyICs1MjA2LDMyIEBACiAKICAgICBpZiAoIEEgPT0gMHhGRiApCiAgICAgewotICAgICAgQ1VSLkdTLnNjYW5fY29udHJvbCA9IFRSVUU7CisgICAgICBleGMtPkdTLnNjYW5fY29udHJvbCA9IFRSVUU7CiAgICAgICByZXR1cm47CiAgICAgfQogICAgIGVsc2UgaWYgKCBBID09IDAgKQogICAgIHsKLSAgICAgIENVUi5HUy5zY2FuX2NvbnRyb2wgPSBGQUxTRTsKKyAgICAgIGV4Yy0+R1Muc2Nhbl9jb250cm9sID0gRkFMU0U7CiAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCAoIGFyZ3NbMF0gJiAweDEwMCApICE9IDAgJiYgQ1VSLnR0X21ldHJpY3MucHBlbSA8PSBBICkKLSAgICAgIENVUi5HUy5zY2FuX2NvbnRyb2wgPSBUUlVFOworICAgIGlmICggKCBhcmdzWzBdICYgMHgxMDAgKSAhPSAwICYmIGV4Yy0+dHRfbWV0cmljcy5wcGVtIDw9IEEgKQorICAgICAgZXhjLT5HUy5zY2FuX2NvbnRyb2wgPSBUUlVFOwogCi0gICAgaWYgKCAoIGFyZ3NbMF0gJiAweDIwMCApICE9IDAgJiYgQ1VSLnR0X21ldHJpY3Mucm90YXRlZCApCi0gICAgICBDVVIuR1Muc2Nhbl9jb250cm9sID0gVFJVRTsKKyAgICBpZiAoICggYXJnc1swXSAmIDB4MjAwICkgIT0gMCAmJiBleGMtPnR0X21ldHJpY3Mucm90YXRlZCApCisgICAgICBleGMtPkdTLnNjYW5fY29udHJvbCA9IFRSVUU7CiAKLSAgICBpZiAoICggYXJnc1swXSAmIDB4NDAwICkgIT0gMCAmJiBDVVIudHRfbWV0cmljcy5zdHJldGNoZWQgKQotICAgICAgQ1VSLkdTLnNjYW5fY29udHJvbCA9IFRSVUU7CisgICAgaWYgKCAoIGFyZ3NbMF0gJiAweDQwMCApICE9IDAgJiYgZXhjLT50dF9tZXRyaWNzLnN0cmV0Y2hlZCApCisgICAgICBleGMtPkdTLnNjYW5fY29udHJvbCA9IFRSVUU7CiAKLSAgICBpZiAoICggYXJnc1swXSAmIDB4ODAwICkgIT0gMCAmJiBDVVIudHRfbWV0cmljcy5wcGVtID4gQSApCi0gICAgICBDVVIuR1Muc2Nhbl9jb250cm9sID0gRkFMU0U7CisgICAgaWYgKCAoIGFyZ3NbMF0gJiAweDgwMCApICE9IDAgJiYgZXhjLT50dF9tZXRyaWNzLnBwZW0gPiBBICkKKyAgICAgIGV4Yy0+R1Muc2Nhbl9jb250cm9sID0gRkFMU0U7CiAKLSAgICBpZiAoICggYXJnc1swXSAmIDB4MTAwMCApICE9IDAgJiYgQ1VSLnR0X21ldHJpY3Mucm90YXRlZCApCi0gICAgICBDVVIuR1Muc2Nhbl9jb250cm9sID0gRkFMU0U7CisgICAgaWYgKCAoIGFyZ3NbMF0gJiAweDEwMDAgKSAhPSAwICYmIGV4Yy0+dHRfbWV0cmljcy5yb3RhdGVkICkKKyAgICAgIGV4Yy0+R1Muc2Nhbl9jb250cm9sID0gRkFMU0U7CiAKLSAgICBpZiAoICggYXJnc1swXSAmIDB4MjAwMCApICE9IDAgJiYgQ1VSLnR0X21ldHJpY3Muc3RyZXRjaGVkICkKLSAgICAgIENVUi5HUy5zY2FuX2NvbnRyb2wgPSBGQUxTRTsKKyAgICBpZiAoICggYXJnc1swXSAmIDB4MjAwMCApICE9IDAgJiYgZXhjLT50dF9tZXRyaWNzLnN0cmV0Y2hlZCApCisgICAgICBleGMtPkdTLnNjYW5fY29udHJvbCA9IEZBTFNFOwogICB9CiAKIApAQCAtNTcwNSwxMCArNTI0MiwxMSBAQAogICAvKiBTdGFjazogICAgICAgIHVpbnQzMj8gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19TQ0FOVFlQRSggSU5TX0FSRyApCisgIEluc19TQ0FOVFlQRSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBpZiAoIGFyZ3NbMF0gPj0gMCApCi0gICAgICBDVVIuR1Muc2Nhbl90eXBlID0gKEZUX0ludClhcmdzWzBdOworICAgICAgZXhjLT5HUy5zY2FuX3R5cGUgPSAoRlRfSW50KWFyZ3NbMF07CiAgIH0KIAogCkBAIC01NzE2LDggKzUyNTQsNiBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogTUFOQUdJTkcgT1VUTElORVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEluc3RydWN0aW9ucyBhcHBlYXIgaW4gdGhlIHNwZWNpZmljYXRpb24ncyBvcmRlci4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKQEAgLTU3MjgsNDMgKzUyNjQsNDEgQEAKICAgLyogU3RhY2s6ICAgICAgICB1aW50MzIuLi4gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfRkxJUFBUKCBJTlNfQVJHICkKKyAgSW5zX0ZMSVBQVCggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKICAgICBGVF9VU2hvcnQgIHBvaW50OwogCi0gICAgRlRfVU5VU0VEX0FSRzsKIAotCi0gICAgaWYgKCBDVVIudG9wIDwgQ1VSLkdTLmxvb3AgKQorICAgIGlmICggZXhjLT50b3AgPCBleGMtPkdTLmxvb3AgKQogICAgIHsKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggVG9vX0Zld19Bcmd1bWVudHMgKTsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBUb29fRmV3X0FyZ3VtZW50cyApOwogICAgICAgZ290byBGYWlsOwogICAgIH0KIAotICAgIHdoaWxlICggQ1VSLkdTLmxvb3AgPiAwICkKKyAgICB3aGlsZSAoIGV4Yy0+R1MubG9vcCA+IDAgKQogICAgIHsKLSAgICAgIENVUi5hcmdzLS07CisgICAgICBleGMtPmFyZ3MtLTsKIAotICAgICAgcG9pbnQgPSAoRlRfVVNob3J0KUNVUi5zdGFja1tDVVIuYXJnc107CisgICAgICBwb2ludCA9IChGVF9VU2hvcnQpZXhjLT5zdGFja1tleGMtPmFyZ3NdOwogCi0gICAgICBpZiAoIEJPVU5EUyggcG9pbnQsIENVUi5wdHMubl9wb2ludHMgKSApCisgICAgICBpZiAoIEJPVU5EUyggcG9pbnQsIGV4Yy0+cHRzLm5fcG9pbnRzICkgKQogICAgICAgewotICAgICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQogICAgICAgICB7Ci0gICAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZQotICAgICAgICBDVVIucHRzLnRhZ3NbcG9pbnRdIF49IEZUX0NVUlZFX1RBR19PTjsKKyAgICAgICAgZXhjLT5wdHMudGFnc1twb2ludF0gXj0gRlRfQ1VSVkVfVEFHX09OOwogCi0gICAgICBDVVIuR1MubG9vcC0tOworICAgICAgZXhjLT5HUy5sb29wLS07CiAgICAgfQogCiAgIEZhaWw6Ci0gICAgQ1VSLkdTLmxvb3AgPSAxOwotICAgIENVUi5uZXdfdG9wID0gQ1VSLmFyZ3M7CisgICAgZXhjLT5HUy5sb29wID0gMTsKKyAgICBleGMtPm5ld190b3AgPSBleGMtPmFyZ3M7CiAgIH0KIAogCkBAIC01Nzc1LDcgKzUzMDksOCBAQAogICAvKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19GTElQUkdPTiggSU5TX0FSRyApCisgIEluc19GTElQUkdPTiggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBGVF9VU2hvcnQgIEksIEssIEw7CiAKQEAgLTU3ODMsMTYgKzUzMTgsMTYgQEAKICAgICBLID0gKEZUX1VTaG9ydClhcmdzWzFdOwogICAgIEwgPSAoRlRfVVNob3J0KWFyZ3NbMF07CiAKLSAgICBpZiAoIEJPVU5EUyggSywgQ1VSLnB0cy5uX3BvaW50cyApIHx8Ci0gICAgICAgICBCT1VORFMoIEwsIENVUi5wdHMubl9wb2ludHMgKSApCisgICAgaWYgKCBCT1VORFMoIEssIGV4Yy0+cHRzLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EUyggTCwgZXhjLT5wdHMubl9wb2ludHMgKSApCiAgICAgewotICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApCi0gICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CiAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZm9yICggSSA9IEw7IEkgPD0gSzsgSSsrICkKLSAgICAgIENVUi5wdHMudGFnc1tJXSB8PSBGVF9DVVJWRV9UQUdfT047CisgICAgICBleGMtPnB0cy50YWdzW0ldIHw9IEZUX0NVUlZFX1RBR19PTjsKICAgfQogCiAKQEAgLTU4MDMsNyArNTMzOCw4IEBACiAgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX0ZMSVBSR09GRiggSU5TX0FSRyApCisgIEluc19GTElQUkdPRkYoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewogICAgIEZUX1VTaG9ydCAgSSwgSywgTDsKIApAQCAtNTgxMSw0NSArNTM0Nyw0NiBAQAogICAgIEsgPSAoRlRfVVNob3J0KWFyZ3NbMV07CiAgICAgTCA9IChGVF9VU2hvcnQpYXJnc1swXTsKIAotICAgIGlmICggQk9VTkRTKCBLLCBDVVIucHRzLm5fcG9pbnRzICkgfHwKLSAgICAgICAgIEJPVU5EUyggTCwgQ1VSLnB0cy5uX3BvaW50cyApICkKKyAgICBpZiAoIEJPVU5EUyggSywgZXhjLT5wdHMubl9wb2ludHMgKSB8fAorICAgICAgICAgQk9VTkRTKCBMLCBleGMtPnB0cy5uX3BvaW50cyApICkKICAgICB7Ci0gICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBmb3IgKCBJID0gTDsgSSA8PSBLOyBJKysgKQotICAgICAgQ1VSLnB0cy50YWdzW0ldICY9IH5GVF9DVVJWRV9UQUdfT047CisgICAgICBleGMtPnB0cy50YWdzW0ldICY9IH5GVF9DVVJWRV9UQUdfT047CiAgIH0KIAogCiAgIHN0YXRpYyBGVF9Cb29sCi0gIENvbXB1dGVfUG9pbnRfRGlzcGxhY2VtZW50KCBFWEVDX09QXyBGVF9GMjZEb3Q2KiAgIHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2KiAgIHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9HbHlwaFpvbmUgIHpvbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgIHJlZnAgKQorICBDb21wdXRlX1BvaW50X0Rpc3BsYWNlbWVudCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYqICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiogICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9HbHlwaFpvbmUgICAgem9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgICByZWZwICkKICAgewogICAgIFRUX0dseXBoWm9uZVJlYyAgenA7CiAgICAgRlRfVVNob3J0ICAgICAgICBwOwogICAgIEZUX0YyNkRvdDYgICAgICAgZDsKIAogCi0gICAgaWYgKCBDVVIub3Bjb2RlICYgMSApCisgICAgaWYgKCBleGMtPm9wY29kZSAmIDEgKQogICAgIHsKLSAgICAgIHpwID0gQ1VSLnpwMDsKLSAgICAgIHAgID0gQ1VSLkdTLnJwMTsKKyAgICAgIHpwID0gZXhjLT56cDA7CisgICAgICBwICA9IGV4Yy0+R1MucnAxOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgenAgPSBDVVIuenAxOwotICAgICAgcCAgPSBDVVIuR1MucnAyOworICAgICAgenAgPSBleGMtPnpwMTsKKyAgICAgIHAgID0gZXhjLT5HUy5ycDI7CiAgICAgfQogCiAgICAgaWYgKCBCT1VORFMoIHAsIHpwLm5fcG9pbnRzICkgKQogICAgIHsKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgKnJlZnAgPSAwOwogICAgICAgcmV0dXJuIEZBSUxVUkU7CiAgICAgfQpAQCAtNTg1NywxMiArNTM5NCwxMiBAQAogICAgICp6b25lID0genA7CiAgICAgKnJlZnAgPSBwOwogCi0gICAgZCA9IENVUl9GdW5jX3Byb2plY3QoIHpwLmN1ciArIHAsIHpwLm9yZyArIHAgKTsKKyAgICBkID0gUFJPSkVDVCggenAuY3VyICsgcCwgenAub3JnICsgcCApOwogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICBpZiAoIENVUi5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKQorICAgIGlmICggZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKQogICAgIHsKLSAgICAgIGlmICggQ1VSLkdTLmJvdGhfeF9heGlzICkKKyAgICAgIGlmICggZXhjLT5HUy5ib3RoX3hfYXhpcyApCiAgICAgICB7CiAgICAgICAgICp4ID0gZDsKICAgICAgICAgKnkgPSAwOwpAQCAtNTg3Niw4ICs1NDEzLDggQEAKICAgICBlbHNlCiAjZW5kaWYKICAgICB7Ci0gICAgICAqeCA9IEZUX011bERpdiggZCwgKEZUX0xvbmcpQ1VSLkdTLmZyZWVWZWN0b3IueCwgQ1VSLkZfZG90X1AgKTsKLSAgICAgICp5ID0gRlRfTXVsRGl2KCBkLCAoRlRfTG9uZylDVVIuR1MuZnJlZVZlY3Rvci55LCBDVVIuRl9kb3RfUCApOworICAgICAgKnggPSBGVF9NdWxEaXYoIGQsIChGVF9Mb25nKWV4Yy0+R1MuZnJlZVZlY3Rvci54LCBleGMtPkZfZG90X1AgKTsKKyAgICAgICp5ID0gRlRfTXVsRGl2KCBkLCAoRlRfTG9uZylleGMtPkdTLmZyZWVWZWN0b3IueSwgZXhjLT5GX2RvdF9QICk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNVQ0NFU1M7CkBAIC01ODg1LDQyICs1NDIyLDQzIEBACiAKIAogICBzdGF0aWMgdm9pZAotICBNb3ZlX1pwMl9Qb2ludCggRVhFQ19PUF8gRlRfVVNob3J0ICAgcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICBkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgIGR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgdG91Y2ggKQorICBNb3ZlX1pwMl9Qb2ludCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgICBwb2ludCwKKyAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkeCwKKyAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkeSwKKyAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgICB0b3VjaCApCiAgIHsKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIGlmICggQ1VSLmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCisgICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCiAgICAgewotICAgICAgaWYgKCBDVVIuR1MuYm90aF94X2F4aXMgKQorICAgICAgaWYgKCBleGMtPkdTLmJvdGhfeF9heGlzICkKICAgICAgIHsKLSAgICAgICAgQ1VSLnpwMi5jdXJbcG9pbnRdLnggKz0gZHg7CisgICAgICAgIGV4Yy0+enAyLmN1cltwb2ludF0ueCArPSBkeDsKICAgICAgICAgaWYgKCB0b3VjaCApCi0gICAgICAgICAgQ1VSLnpwMi50YWdzW3BvaW50XSB8PSBGVF9DVVJWRV9UQUdfVE9VQ0hfWDsKKyAgICAgICAgICBleGMtPnpwMi50YWdzW3BvaW50XSB8PSBGVF9DVVJWRV9UQUdfVE9VQ0hfWDsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgQ1VSLnpwMi5jdXJbcG9pbnRdLnkgKz0gZHk7CisgICAgICAgIGV4Yy0+enAyLmN1cltwb2ludF0ueSArPSBkeTsKICAgICAgICAgaWYgKCB0b3VjaCApCi0gICAgICAgICAgQ1VSLnpwMi50YWdzW3BvaW50XSB8PSBGVF9DVVJWRV9UQUdfVE9VQ0hfWTsKKyAgICAgICAgICBleGMtPnpwMi50YWdzW3BvaW50XSB8PSBGVF9DVVJWRV9UQUdfVE9VQ0hfWTsKICAgICAgIH0KICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIGlmICggQ1VSLkdTLmZyZWVWZWN0b3IueCAhPSAwICkKKyAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgKQogICAgIHsKLSAgICAgIENVUi56cDIuY3VyW3BvaW50XS54ICs9IGR4OworICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS54ICs9IGR4OwogICAgICAgaWYgKCB0b3VjaCApCi0gICAgICAgIENVUi56cDIudGFnc1twb2ludF0gfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1g7CisgICAgICAgIGV4Yy0+enAyLnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9YOwogICAgIH0KIAotICAgIGlmICggQ1VSLkdTLmZyZWVWZWN0b3IueSAhPSAwICkKKyAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKQogICAgIHsKLSAgICAgIENVUi56cDIuY3VyW3BvaW50XS55ICs9IGR5OworICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS55ICs9IGR5OwogICAgICAgaWYgKCB0b3VjaCApCi0gICAgICAgIENVUi56cDIudGFnc1twb2ludF0gfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1k7CisgICAgICAgIGV4Yy0+enAyLnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9ZOwogICAgIH0KICAgfQogCkBAIC01OTMyLDU3ICs1NDcwLDU0IEBACiAgIC8qIFN0YWNrOiAgICAgICAgdWludDMyLi4uIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX1NIUCggSU5TX0FSRyApCisgIEluc19TSFAoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7CiAgICAgVFRfR2x5cGhab25lUmVjICB6cDsKICAgICBGVF9VU2hvcnQgICAgICAgIHJlZnA7CiAKLSAgICBGVF9GMjZEb3Q2ICAgICAgIGR4LAotICAgICAgICAgICAgICAgICAgICAgZHk7CisgICAgRlRfRjI2RG90NiAgICAgICBkeCwgZHk7CiAgICAgRlRfVVNob3J0ICAgICAgICBwb2ludDsKIAotICAgIEZUX1VOVVNFRF9BUkc7CiAKLQotICAgIGlmICggQ1VSLnRvcCA8IENVUi5HUy5sb29wICkKKyAgICBpZiAoIGV4Yy0+dG9wIDwgZXhjLT5HUy5sb29wICkKICAgICB7Ci0gICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKICAgICAgIGdvdG8gRmFpbDsKICAgICB9CiAKLSAgICBpZiAoIENPTVBVVEVfUG9pbnRfRGlzcGxhY2VtZW50KCAmZHgsICZkeSwgJnpwLCAmcmVmcCApICkKKyAgICBpZiAoIENvbXB1dGVfUG9pbnRfRGlzcGxhY2VtZW50KCBleGMsICZkeCwgJmR5LCAmenAsICZyZWZwICkgKQogICAgICAgcmV0dXJuOwogCi0gICAgd2hpbGUgKCBDVVIuR1MubG9vcCA+IDAgKQorICAgIHdoaWxlICggZXhjLT5HUy5sb29wID4gMCApCiAgICAgewotICAgICAgQ1VSLmFyZ3MtLTsKLSAgICAgIHBvaW50ID0gKEZUX1VTaG9ydClDVVIuc3RhY2tbQ1VSLmFyZ3NdOworICAgICAgZXhjLT5hcmdzLS07CisgICAgICBwb2ludCA9IChGVF9VU2hvcnQpZXhjLT5zdGFja1tleGMtPmFyZ3NdOwogCi0gICAgICBpZiAoIEJPVU5EUyggcG9pbnQsIENVUi56cDIubl9wb2ludHMgKSApCisgICAgICBpZiAoIEJPVU5EUyggcG9pbnQsIGV4Yy0+enAyLm5fcG9pbnRzICkgKQogICAgICAgewotICAgICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQogICAgICAgICB7Ci0gICAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZQogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwogICAgICAgLyogZG9lc24ndCBmb2xsb3cgQ2xlYXJ0eXBlIHNwZWMgYnV0IHByb2R1Y2VzIGJldHRlciByZXN1bHQgKi8KLSAgICAgIGlmICggU1VCUElYRUxfSElOVElORyAgJiYKLSAgICAgICAgICAgQ1VSLmlnbm9yZV94X21vZGUgKQotICAgICAgICBNT1ZFX1pwMl9Qb2ludCggcG9pbnQsIDAsIGR5LCBUUlVFICk7CisgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAmJgorICAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgKQorICAgICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLCBwb2ludCwgMCwgZHksIFRSVUUgKTsKICAgICAgIGVsc2UKICNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KLSAgICAgICAgTU9WRV9acDJfUG9pbnQoIHBvaW50LCBkeCwgZHksIFRSVUUgKTsKKyAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIGR4LCBkeSwgVFJVRSApOwogCi0gICAgICBDVVIuR1MubG9vcC0tOworICAgICAgZXhjLT5HUy5sb29wLS07CiAgICAgfQogCiAgIEZhaWw6Ci0gICAgQ1VSLkdTLmxvb3AgPSAxOwotICAgIENVUi5uZXdfdG9wID0gQ1VSLmFyZ3M7CisgICAgZXhjLT5HUy5sb29wID0gMTsKKyAgICBleGMtPm5ld190b3AgPSBleGMtPmFyZ3M7CiAgIH0KIAogCkBAIC01OTk3LDcgKzU1MzIsOCBAQAogICAvKiAgICAgICAgICAgICAgIHplcm8gd2hpY2ggaW5jbHVkZXMgYWxsIHBvaW50cyBvZiBpdC4gICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19TSEMoIElOU19BUkcgKQorICBJbnNfU0hDKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBUVF9HbHlwaFpvbmVSZWMgIHpwOwogICAgIEZUX1VTaG9ydCAgICAgICAgcmVmcDsKQEAgLTYwMDcsMzYgKzU1NDMsMzYgQEAKICAgICBGVF9VU2hvcnQgICAgICAgIHN0YXJ0LCBsaW1pdCwgaTsKIAogCi0gICAgY29udG91ciA9IChGVF9VU2hvcnQpYXJnc1swXTsKLSAgICBib3VuZHMgID0gKCBDVVIuR1MuZ2VwMiA9PSAwICkgPyAxIDogQ1VSLnpwMi5uX2NvbnRvdXJzOworICAgIGNvbnRvdXIgPSAoRlRfU2hvcnQpYXJnc1swXTsKKyAgICBib3VuZHMgID0gKCBleGMtPkdTLmdlcDIgPT0gMCApID8gMSA6IGV4Yy0+enAyLm5fY29udG91cnM7CiAKICAgICBpZiAoIEJPVU5EUyggY29udG91ciwgYm91bmRzICkgKQogICAgIHsKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICggQ09NUFVURV9Qb2ludF9EaXNwbGFjZW1lbnQoICZkeCwgJmR5LCAmenAsICZyZWZwICkgKQorICAgIGlmICggQ29tcHV0ZV9Qb2ludF9EaXNwbGFjZW1lbnQoIGV4YywgJmR4LCAmZHksICZ6cCwgJnJlZnAgKSApCiAgICAgICByZXR1cm47CiAKICAgICBpZiAoIGNvbnRvdXIgPT0gMCApCiAgICAgICBzdGFydCA9IDA7CiAgICAgZWxzZQotICAgICAgc3RhcnQgPSAoRlRfVVNob3J0KSggQ1VSLnpwMi5jb250b3Vyc1tjb250b3VyIC0gMV0gKyAxIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUi56cDIuZmlyc3RfcG9pbnQgKTsKKyAgICAgIHN0YXJ0ID0gKEZUX1VTaG9ydCkoIGV4Yy0+enAyLmNvbnRvdXJzW2NvbnRvdXIgLSAxXSArIDEgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT56cDIuZmlyc3RfcG9pbnQgKTsKIAogICAgIC8qIHdlIHVzZSB0aGUgbnVtYmVyIG9mIHBvaW50cyBpZiBpbiB0aGUgdHdpbGlnaHQgem9uZSAqLwotICAgIGlmICggQ1VSLkdTLmdlcDIgPT0gMCApCi0gICAgICBsaW1pdCA9IENVUi56cDIubl9wb2ludHM7CisgICAgaWYgKCBleGMtPkdTLmdlcDIgPT0gMCApCisgICAgICBsaW1pdCA9IGV4Yy0+enAyLm5fcG9pbnRzOwogICAgIGVsc2UKLSAgICAgIGxpbWl0ID0gKEZUX1VTaG9ydCkoIENVUi56cDIuY29udG91cnNbY29udG91cl0gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSLnpwMi5maXJzdF9wb2ludCArIDEgKTsKKyAgICAgIGxpbWl0ID0gKEZUX1VTaG9ydCkoIGV4Yy0+enAyLmNvbnRvdXJzW2NvbnRvdXJdIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+enAyLmZpcnN0X3BvaW50ICsgMSApOwogCiAgICAgZm9yICggaSA9IHN0YXJ0OyBpIDwgbGltaXQ7IGkrKyApCiAgICAgewotICAgICAgaWYgKCB6cC5jdXIgIT0gQ1VSLnpwMi5jdXIgfHwgcmVmcCAhPSBpICkKLSAgICAgICAgTU9WRV9acDJfUG9pbnQoIGksIGR4LCBkeSwgVFJVRSApOworICAgICAgaWYgKCB6cC5jdXIgIT0gZXhjLT56cDIuY3VyIHx8IHJlZnAgIT0gaSApCisgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIGksIGR4LCBkeSwgVFJVRSApOwogICAgIH0KICAgfQogCkBAIC02MDQ4LDcgKzU1ODQsOCBAQAogICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19TSFooIElOU19BUkcgKQorICBJbnNfU0haKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBUVF9HbHlwaFpvbmVSZWMgIHpwOwogICAgIEZUX1VTaG9ydCAgICAgICAgcmVmcDsKQEAgLTYwNjAsMzAgKzU1OTcsMzAgQEAKIAogICAgIGlmICggQk9VTkRTKCBhcmdzWzBdLCAyICkgKQogICAgIHsKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICggQ09NUFVURV9Qb2ludF9EaXNwbGFjZW1lbnQoICZkeCwgJmR5LCAmenAsICZyZWZwICkgKQorICAgIGlmICggQ29tcHV0ZV9Qb2ludF9EaXNwbGFjZW1lbnQoIGV4YywgJmR4LCAmZHksICZ6cCwgJnJlZnAgKSApCiAgICAgICByZXR1cm47CiAKICAgICAvKiBYWFg6IFVORE9DVU1FTlRFRCEgU0haIGRvZXNuJ3QgbW92ZSB0aGUgcGhhbnRvbSBwb2ludHMuICAgICAqLwogICAgIC8qICAgICAgVHdpbGlnaHQgem9uZSBoYXMgbm8gcmVhbCBjb250b3Vycywgc28gdXNlIGBuX3BvaW50cycuICovCiAgICAgLyogICAgICBOb3JtYWwgem9uZSdzIGBuX3BvaW50cycgaW5jbHVkZXMgcGhhbnRvbXMsIHNvIG11c3QgICAgKi8KICAgICAvKiAgICAgIHVzZSBlbmQgb2YgbGFzdCBjb250b3VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGlmICggQ1VSLkdTLmdlcDIgPT0gMCApCi0gICAgICBsaW1pdCA9IChGVF9VU2hvcnQpQ1VSLnpwMi5uX3BvaW50czsKLSAgICBlbHNlIGlmICggQ1VSLkdTLmdlcDIgPT0gMSAmJiBDVVIuenAyLm5fY29udG91cnMgPiAwICkKLSAgICAgIGxpbWl0ID0gKEZUX1VTaG9ydCkoIENVUi56cDIuY29udG91cnNbQ1VSLnpwMi5uX2NvbnRvdXJzIC0gMV0gKyAxICk7CisgICAgaWYgKCBleGMtPkdTLmdlcDIgPT0gMCApCisgICAgICBsaW1pdCA9IChGVF9VU2hvcnQpZXhjLT56cDIubl9wb2ludHM7CisgICAgZWxzZSBpZiAoIGV4Yy0+R1MuZ2VwMiA9PSAxICYmIGV4Yy0+enAyLm5fY29udG91cnMgPiAwICkKKyAgICAgIGxpbWl0ID0gKEZUX1VTaG9ydCkoIGV4Yy0+enAyLmNvbnRvdXJzW2V4Yy0+enAyLm5fY29udG91cnMgLSAxXSArIDEgKTsKICAgICBlbHNlCiAgICAgICBsaW1pdCA9IDA7CiAKICAgICAvKiBYWFg6IFVORE9DVU1FTlRFRCEgU0haIGRvZXNuJ3QgdG91Y2ggdGhlIHBvaW50cyAqLwogICAgIGZvciAoIGkgPSAwOyBpIDwgbGltaXQ7IGkrKyApCiAgICAgewotICAgICAgaWYgKCB6cC5jdXIgIT0gQ1VSLnpwMi5jdXIgfHwgcmVmcCAhPSBpICkKLSAgICAgICAgTU9WRV9acDJfUG9pbnQoIGksIGR4LCBkeSwgRkFMU0UgKTsKKyAgICAgIGlmICggenAuY3VyICE9IGV4Yy0+enAyLmN1ciB8fCByZWZwICE9IGkgKQorICAgICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLCBpLCBkeCwgZHksIEZBTFNFICk7CiAgICAgfQogICB9CiAKQEAgLTYwOTUsNyArNTYzMiw4IEBACiAgIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgdWludDMyLi4uIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX1NIUElYKCBJTlNfQVJHICkKKyAgSW5zX1NIUElYKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewogICAgIEZUX0YyNkRvdDYgIGR4LCBkeTsKICAgICBGVF9VU2hvcnQgICBwb2ludDsKQEAgLTYxMDQsMTcgKzU2NDIsMTcgQEAKICNlbmRpZgogCiAKLSAgICBpZiAoIENVUi50b3AgPCBDVVIuR1MubG9vcCArIDEgKQorICAgIGlmICggZXhjLT50b3AgPCBleGMtPkdTLmxvb3AgKyAxICkKICAgICB7Ci0gICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKICAgICAgIGdvdG8gRmFpbDsKICAgICB9CiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIGlmICggQ1VSLmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCisgICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCiAgICAgewotICAgICAgaWYgKCBDVVIuR1MuYm90aF94X2F4aXMgKQorICAgICAgaWYgKCBleGMtPkdTLmJvdGhfeF9heGlzICkKICAgICAgIHsKICAgICAgICAgZHggPSAoRlRfVUludDMyKWFyZ3NbMF07CiAgICAgICAgIGR5ID0gMDsKQEAgLTYxMjgsMTE1ICs1NjY2LDExNSBAQAogICAgIGVsc2UKICNlbmRpZgogICAgIHsKLSAgICAgIGR4ID0gVFRfTXVsRml4MTQoIChGVF9VSW50MzIpYXJnc1swXSwgQ1VSLkdTLmZyZWVWZWN0b3IueCApOwotICAgICAgZHkgPSBUVF9NdWxGaXgxNCggKEZUX1VJbnQzMilhcmdzWzBdLCBDVVIuR1MuZnJlZVZlY3Rvci55ICk7CisgICAgICBkeCA9IFRUX011bEZpeDE0KCBhcmdzWzBdLCBleGMtPkdTLmZyZWVWZWN0b3IueCApOworICAgICAgZHkgPSBUVF9NdWxGaXgxNCggYXJnc1swXSwgZXhjLT5HUy5mcmVlVmVjdG9yLnkgKTsKICAgICB9CiAKLSAgICB3aGlsZSAoIENVUi5HUy5sb29wID4gMCApCisgICAgd2hpbGUgKCBleGMtPkdTLmxvb3AgPiAwICkKICAgICB7Ci0gICAgICBDVVIuYXJncy0tOworICAgICAgZXhjLT5hcmdzLS07CiAKLSAgICAgIHBvaW50ID0gKEZUX1VTaG9ydClDVVIuc3RhY2tbQ1VSLmFyZ3NdOworICAgICAgcG9pbnQgPSAoRlRfVVNob3J0KWV4Yy0+c3RhY2tbZXhjLT5hcmdzXTsKIAotICAgICAgaWYgKCBCT1VORFMoIHBvaW50LCBDVVIuenAyLm5fcG9pbnRzICkgKQorICAgICAgaWYgKCBCT1VORFMoIHBvaW50LCBleGMtPnpwMi5uX3BvaW50cyApICkKICAgICAgIHsKLSAgICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApCisgICAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKICAgICAgICAgewotICAgICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGVsc2UKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKICAgICAgIHsKLSAgICAgICAgLyogIElmIG5vdCB1c2luZyBpZ25vcmVfeF9tb2RlIHJlbmRlcmluZywgYWxsb3cgWlAyIG1vdmUuICAgICAgICAgICovCi0gICAgICAgIC8qICBJZiBpbmxpbmUgZGVsdGFzIGFyZW4ndCBhbGxvd2VkLCBza2lwIFpQMiBtb3ZlLiAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiAgSWYgdXNpbmcgaWdub3JlX3hfbW9kZSByZW5kZXJpbmcsIGFsbG93IFpQMiBwb2ludCBtb3ZlIGlmOiAgICAgKi8KLSAgICAgICAgLyogICAtIGZyZWVkb20gdmVjdG9yIGlzIHkgYW5kIHNwaF9jb21wYXRpYmlsaXR5X21vZGUgaXMgb2ZmICAgICAgICovCi0gICAgICAgIC8qICAgLSB0aGUgZ2x5cGggaXMgY29tcG9zaXRlIGFuZCB0aGUgbW92ZSBpcyBpbiB0aGUgWSBkaXJlY3Rpb24gICAqLwotICAgICAgICAvKiAgIC0gdGhlIGdseXBoIGlzIHNwZWNpZmljYWxseSBzZXQgdG8gYWxsb3cgU0hQSVggbW92ZXMgICAgICAgICAgKi8KLSAgICAgICAgLyogICAtIHRoZSBtb3ZlIGlzIG9uIGEgcHJldmlvdXNseSBZLXRvdWNoZWQgcG9pbnQgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qICBJZiBub3QgdXNpbmcgaWdub3JlX3hfbW9kZSByZW5kZXJpbmcsIGFsbG93IFpQMiBtb3ZlLiAgICAgICAgKi8KKyAgICAgICAgLyogIElmIGlubGluZSBkZWx0YXMgYXJlbid0IGFsbG93ZWQsIHNraXAgWlAyIG1vdmUuICAgICAgICAgICAgICAqLworICAgICAgICAvKiAgSWYgdXNpbmcgaWdub3JlX3hfbW9kZSByZW5kZXJpbmcsIGFsbG93IFpQMiBwb2ludCBtb3ZlIGlmOiAgICovCisgICAgICAgIC8qICAgLSBmcmVlZG9tIHZlY3RvciBpcyB5IGFuZCBzcGhfY29tcGF0aWJpbGl0eV9tb2RlIGlzIG9mZiAgICAgKi8KKyAgICAgICAgLyogICAtIHRoZSBnbHlwaCBpcyBjb21wb3NpdGUgYW5kIHRoZSBtb3ZlIGlzIGluIHRoZSBZIGRpcmVjdGlvbiAqLworICAgICAgICAvKiAgIC0gdGhlIGdseXBoIGlzIHNwZWNpZmljYWxseSBzZXQgdG8gYWxsb3cgU0hQSVggbW92ZXMgICAgICAgICovCisgICAgICAgIC8qICAgLSB0aGUgbW92ZSBpcyBvbiBhIHByZXZpb3VzbHkgWS10b3VjaGVkIHBvaW50ICAgICAgICAgICAgICAgKi8KIAotICAgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICYmCi0gICAgICAgICAgICAgQ1VSLmlnbm9yZV94X21vZGUgKQorICAgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAmJgorICAgICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSApCiAgICAgICAgIHsKICAgICAgICAgICAvKiBzYXZlIHBvaW50IGZvciBsYXRlciBjb21wYXJpc29uICovCi0gICAgICAgICAgaWYgKCBDVVIuR1MuZnJlZVZlY3Rvci55ICE9IDAgKQotICAgICAgICAgICAgQjEgPSBDVVIuenAyLmN1cltwb2ludF0ueTsKKyAgICAgICAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKQorICAgICAgICAgICAgQjEgPSBleGMtPnpwMi5jdXJbcG9pbnRdLnk7CiAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgQjEgPSBDVVIuenAyLmN1cltwb2ludF0ueDsKKyAgICAgICAgICAgIEIxID0gZXhjLT56cDIuY3VyW3BvaW50XS54OwogCi0gICAgICAgICAgaWYgKCAhQ1VSLmZhY2UtPnNwaF9jb21wYXRpYmlsaXR5X21vZGUgJiYKLSAgICAgICAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnkgIT0gMCAgICAgICAgICApCisgICAgICAgICAgaWYgKCAhZXhjLT5mYWNlLT5zcGhfY29tcGF0aWJpbGl0eV9tb2RlICYmCisgICAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBNT1ZFX1pwMl9Qb2ludCggcG9pbnQsIGR4LCBkeSwgVFJVRSApOworICAgICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIGR4LCBkeSwgVFJVRSApOwogCiAgICAgICAgICAgICAvKiBzYXZlIG5ldyBwb2ludCAqLwotICAgICAgICAgICAgaWYgKCBDVVIuR1MuZnJlZVZlY3Rvci55ICE9IDAgKQorICAgICAgICAgICAgaWYgKCBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQjIgPSBDVVIuenAyLmN1cltwb2ludF0ueTsKKyAgICAgICAgICAgICAgQjIgPSBleGMtPnpwMi5jdXJbcG9pbnRdLnk7CiAKICAgICAgICAgICAgICAgLyogcmV2ZXJzZSBhbnkgZGlzYWxsb3dlZCBtb3ZlcyAqLwotICAgICAgICAgICAgICBpZiAoICggQ1VSLnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19TS0lQX05PTlBJWEVMX1lfTU9WRVMgKSAmJgotICAgICAgICAgICAgICAgICAgICggQjEgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICAgICAgICggQjIgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICAgICAgICBCMSAhPSBCMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgTU9WRV9acDJfUG9pbnQoIHBvaW50LCAtZHgsIC1keSwgVFJVRSApOworICAgICAgICAgICAgICBpZiAoICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfU0tJUF9OT05QSVhFTF9ZX01PVkVTICkgJiYKKyAgICAgICAgICAgICAgICAgICAoIEIxICYgNjMgKSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgKCBCMiAmIDYzICkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgICAgIEIxICE9IEIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIHBvaW50LCAtZHgsIC1keSwgVFJVRSApOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIGlmICggQ1VSLmZhY2UtPnNwaF9jb21wYXRpYmlsaXR5X21vZGUgKQorICAgICAgICAgIGVsc2UgaWYgKCBleGMtPmZhY2UtPnNwaF9jb21wYXRpYmlsaXR5X21vZGUgKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICggQ1VSLnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19ST1VORF9OT05QSVhFTF9ZX01PVkVTICkKKyAgICAgICAgICAgIGlmICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfUk9VTkRfTk9OUElYRUxfWV9NT1ZFUyApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGR4ID0gRlRfUElYX1JPVU5EKCBCMSArIGR4ICkgLSBCMTsKICAgICAgICAgICAgICAgZHkgPSBGVF9QSVhfUk9VTkQoIEIxICsgZHkgKSAtIEIxOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBza2lwIHBvc3QtaXVwIGRlbHRhcyAqLwotICAgICAgICAgICAgaWYgKCBDVVIuaXVwX2NhbGxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgICAgICggKCBDVVIuc3BoX2luX2Z1bmNfZmxhZ3MgJiBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMSApIHx8Ci0gICAgICAgICAgICAgICAgICAgKCBDVVIuc3BoX2luX2Z1bmNfZmxhZ3MgJiBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMiApICkgKQorICAgICAgICAgICAgaWYgKCBleGMtPml1cF9jYWxsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgICAoICggZXhjLT5zcGhfaW5fZnVuY19mbGFncyAmIFNQSF9GREVGX0lOTElORV9ERUxUQV8xICkgfHwKKyAgICAgICAgICAgICAgICAgICAoIGV4Yy0+c3BoX2luX2Z1bmNfZmxhZ3MgJiBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMiApICkgKQogICAgICAgICAgICAgICBnb3RvIFNraXA7CiAKLSAgICAgICAgICAgIGlmICggISggQ1VSLnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19BTFdBWVNfU0tJUF9ERUxUQVAgKSAmJgotICAgICAgICAgICAgICAgICAgKCAoIENVUi5pc19jb21wb3NpdGUgJiYgQ1VSLkdTLmZyZWVWZWN0b3IueSAhPSAwICkgfHwKLSAgICAgICAgICAgICAgICAgICAgKCBDVVIuenAyLnRhZ3NbcG9pbnRdICYgRlRfQ1VSVkVfVEFHX1RPVUNIX1kgKSAgIHx8Ci0gICAgICAgICAgICAgICAgICAgICggQ1VSLnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19ET19TSFBJWCApICAgICApICAgKQotICAgICAgICAgICAgICBNT1ZFX1pwMl9Qb2ludCggcG9pbnQsIDAsIGR5LCBUUlVFICk7CisgICAgICAgICAgICBpZiAoICEoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX0FMV0FZU19TS0lQX0RFTFRBUCApICYmCisgICAgICAgICAgICAgICAgICAoICggZXhjLT5pc19jb21wb3NpdGUgJiYgZXhjLT5HUy5mcmVlVmVjdG9yLnkgIT0gMCApIHx8CisgICAgICAgICAgICAgICAgICAgICggZXhjLT56cDIudGFnc1twb2ludF0gJiBGVF9DVVJWRV9UQUdfVE9VQ0hfWSApICAgIHx8CisgICAgICAgICAgICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfRE9fU0hQSVggKSAgICAgICkgICkKKyAgICAgICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIDAsIGR5LCBUUlVFICk7CiAKICAgICAgICAgICAgIC8qIHNhdmUgbmV3IHBvaW50ICovCi0gICAgICAgICAgICBpZiAoIENVUi5HUy5mcmVlVmVjdG9yLnkgIT0gMCApCisgICAgICAgICAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBCMiA9IENVUi56cDIuY3VyW3BvaW50XS55OworICAgICAgICAgICAgICBCMiA9IGV4Yy0+enAyLmN1cltwb2ludF0ueTsKIAogICAgICAgICAgICAgICAvKiByZXZlcnNlIGFueSBkaXNhbGxvd2VkIG1vdmVzICovCiAgICAgICAgICAgICAgIGlmICggKCBCMSAmIDYzICkgPT0gMCAmJgogICAgICAgICAgICAgICAgICAgICggQjIgJiA2MyApICE9IDAgJiYKICAgICAgICAgICAgICAgICAgICBCMSAhPSBCMiAgICAgICAgICkKLSAgICAgICAgICAgICAgICBNT1ZFX1pwMl9Qb2ludCggcG9pbnQsIDAsIC1keSwgVFJVRSApOworICAgICAgICAgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIHBvaW50LCAwLCAtZHksIFRSVUUgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoIENVUi5zcGhfaW5fZnVuY19mbGFncyAmIFNQSF9GREVGX1RZUEVNQU5fRElBR0VORENUUkwgKQotICAgICAgICAgICAgTU9WRV9acDJfUG9pbnQoIHBvaW50LCBkeCwgZHksIFRSVUUgKTsKKyAgICAgICAgICBlbHNlIGlmICggZXhjLT5zcGhfaW5fZnVuY19mbGFncyAmIFNQSF9GREVGX1RZUEVNQU5fRElBR0VORENUUkwgKQorICAgICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIGR4LCBkeSwgVFJVRSApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKLSAgICAgICAgICBNT1ZFX1pwMl9Qb2ludCggcG9pbnQsIGR4LCBkeSwgVFJVRSApOworICAgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIHBvaW50LCBkeCwgZHksIFRSVUUgKTsKICAgICAgIH0KIAogICAgIFNraXA6CiAKICNlbHNlIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KIAotICAgICAgICBNT1ZFX1pwMl9Qb2ludCggcG9pbnQsIGR4LCBkeSwgVFJVRSApOworICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIGR4LCBkeSwgVFJVRSApOwogCiAjZW5kaWYgLyogIVRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLwogCi0gICAgICBDVVIuR1MubG9vcC0tOworICAgICAgZXhjLT5HUy5sb29wLS07CiAgICAgfQogCiAgIEZhaWw6Ci0gICAgQ1VSLkdTLmxvb3AgPSAxOwotICAgIENVUi5uZXdfdG9wID0gQ1VSLmFyZ3M7CisgICAgZXhjLT5HUy5sb29wID0gMTsKKyAgICBleGMtPm5ld190b3AgPSBleGMtPmFyZ3M7CiAgIH0KIAogCkBAIC02MjQ3LDcgKzU3ODUsOCBAQAogICAvKiBTdGFjazogICAgICAgIGYyNi42IHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19NU0lSUCggSU5TX0FSRyApCisgIEluc19NU0lSUCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBGVF9VU2hvcnQgICBwb2ludDsKICAgICBGVF9GMjZEb3Q2ICBkaXN0YW5jZTsKQEAgLTYyNTgsMTEgKzU3OTcsMTEgQEAKIAogICAgIGlmICggU1VCUElYRUxfSElOVElORyApCiAgICAgewotICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IENVUi5HUy5jb250cm9sX3ZhbHVlX2N1dGluOworICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IGV4Yy0+R1MuY29udHJvbF92YWx1ZV9jdXRpbjsKIAotICAgICAgaWYgKCBDVVIuaWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnggIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgISggQ1VSLnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19OT1JNQUxfUk9VTkQgKSApCisgICAgICBpZiAoIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICEoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX05PUk1BTF9ST1VORCApICkKICAgICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IDA7CiAgICAgfQogCkBAIC02MjcwLDQyICs1ODA5LDQxIEBACiAKICAgICBwb2ludCA9IChGVF9VU2hvcnQpYXJnc1swXTsKIAotICAgIGlmICggQk9VTkRTKCBwb2ludCwgICAgICBDVVIuenAxLm5fcG9pbnRzICkgfHwKLSAgICAgICAgIEJPVU5EUyggQ1VSLkdTLnJwMCwgQ1VSLnpwMC5uX3BvaW50cyApICkKKyAgICBpZiAoIEJPVU5EUyggcG9pbnQsICAgICAgIGV4Yy0+enAxLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EUyggZXhjLT5HUy5ycDAsIGV4Yy0+enAwLm5fcG9pbnRzICkgKQogICAgIHsKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8qIFVORE9DVU1FTlRFRCEgIFRoZSBNUyByYXN0ZXJpemVyIGRvZXMgdGhhdCB3aXRoICovCiAgICAgLyogdHdpbGlnaHQgcG9pbnRzIChjb25maXJtZWQgYnkgR3JlZyBIaXRjaGNvY2spICAgKi8KLSAgICBpZiAoIENVUi5HUy5nZXAxID09IDAgKQorICAgIGlmICggZXhjLT5HUy5nZXAxID09IDAgKQogICAgIHsKLSAgICAgIENVUi56cDEub3JnW3BvaW50XSA9IENVUi56cDAub3JnW0NVUi5HUy5ycDBdOwotICAgICAgQ1VSX0Z1bmNfbW92ZV9vcmlnKCAmQ1VSLnpwMSwgcG9pbnQsIGFyZ3NbMV0gKTsKLSAgICAgIENVUi56cDEuY3VyW3BvaW50XSA9IENVUi56cDEub3JnW3BvaW50XTsKKyAgICAgIGV4Yy0+enAxLm9yZ1twb2ludF0gPSBleGMtPnpwMC5vcmdbZXhjLT5HUy5ycDBdOworICAgICAgZXhjLT5mdW5jX21vdmVfb3JpZyggZXhjLCAmZXhjLT56cDEsIHBvaW50LCBhcmdzWzFdICk7CisgICAgICBleGMtPnpwMS5jdXJbcG9pbnRdID0gZXhjLT56cDEub3JnW3BvaW50XTsKICAgICB9CiAKLSAgICBkaXN0YW5jZSA9IENVUl9GdW5jX3Byb2plY3QoIENVUi56cDEuY3VyICsgcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVIuenAwLmN1ciArIENVUi5HUy5ycDAgKTsKKyAgICBkaXN0YW5jZSA9IFBST0pFQ1QoIGV4Yy0+enAxLmN1ciArIHBvaW50LCBleGMtPnpwMC5jdXIgKyBleGMtPkdTLnJwMCApOwogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCiAgICAgLyogc3VicGl4ZWwgaGludGluZyAtIG1ha2UgTVNJUlAgcmVzcGVjdCBDVlQgY3V0LWluOyAqLwogICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBDVVIuaWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnggIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIEZUX0FCUyggZGlzdGFuY2UgLSBhcmdzWzFdICkgPj0gY29udHJvbF92YWx1ZV9jdXRpbiApCiAgICAgICBkaXN0YW5jZSA9IGFyZ3NbMV07CiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCiAKLSAgICBDVVJfRnVuY19tb3ZlKCAmQ1VSLnpwMSwgcG9pbnQsIGFyZ3NbMV0gLSBkaXN0YW5jZSApOworICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMSwgcG9pbnQsIGFyZ3NbMV0gLSBkaXN0YW5jZSApOwogCi0gICAgQ1VSLkdTLnJwMSA9IENVUi5HUy5ycDA7Ci0gICAgQ1VSLkdTLnJwMiA9IHBvaW50OworICAgIGV4Yy0+R1MucnAxID0gZXhjLT5HUy5ycDA7CisgICAgZXhjLT5HUy5ycDIgPSBwb2ludDsKIAotICAgIGlmICggKCBDVVIub3Bjb2RlICYgMSApICE9IDAgKQotICAgICAgQ1VSLkdTLnJwMCA9IHBvaW50OworICAgIGlmICggKCBleGMtPm9wY29kZSAmIDEgKSAhPSAwICkKKyAgICAgIGV4Yy0+R1MucnAwID0gcG9pbnQ7CiAgIH0KIAogCkBAIC02MzE2LDcgKzU4NTQsOCBAQAogICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19NREFQKCBJTlNfQVJHICkKKyAgSW5zX01EQVAoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBGVF9VU2hvcnQgICBwb2ludDsKICAgICBGVF9GMjZEb3Q2ICBjdXJfZGlzdDsKQEAgLTYzMjUsMzYgKzU4NjQsMzggQEAKIAogICAgIHBvaW50ID0gKEZUX1VTaG9ydClhcmdzWzBdOwogCi0gICAgaWYgKCBCT1VORFMoIHBvaW50LCBDVVIuenAwLm5fcG9pbnRzICkgKQorICAgIGlmICggQk9VTkRTKCBwb2ludCwgZXhjLT56cDAubl9wb2ludHMgKSApCiAgICAgewotICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApCi0gICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CiAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCAoIENVUi5vcGNvZGUgJiAxICkgIT0gMCApCisgICAgaWYgKCAoIGV4Yy0+b3Bjb2RlICYgMSApICE9IDAgKQogICAgIHsKLSAgICAgIGN1cl9kaXN0ID0gQ1VSX2Zhc3RfcHJvamVjdCggJkNVUi56cDAuY3VyW3BvaW50XSApOworICAgICAgY3VyX2Rpc3QgPSBGQVNUX1BST0pFQ1QoICZleGMtPnpwMC5jdXJbcG9pbnRdICk7CiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAmJgotICAgICAgICAgICBDVVIuaWdub3JlX3hfbW9kZSAgICAgICAgJiYKLSAgICAgICAgICAgQ1VSLkdTLmZyZWVWZWN0b3IueCAhPSAwICkKLSAgICAgICAgZGlzdGFuY2UgPSBST1VORF9Ob25lKAorICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgJiYKKyAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggIT0gMCApCisgICAgICAgIGRpc3RhbmNlID0gUm91bmRfTm9uZSgKKyAgICAgICAgICAgICAgICAgICAgIGV4YywKICAgICAgICAgICAgICAgICAgICAgIGN1cl9kaXN0LAotICAgICAgICAgICAgICAgICAgICAgQ1VSLnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1swXSApIC0gY3VyX2Rpc3Q7CisgICAgICAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1swXSApIC0gY3VyX2Rpc3Q7CiAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgZGlzdGFuY2UgPSBDVVJfRnVuY19yb3VuZCgKKyAgICAgICAgZGlzdGFuY2UgPSBleGMtPmZ1bmNfcm91bmQoCisgICAgICAgICAgICAgICAgICAgICBleGMsCiAgICAgICAgICAgICAgICAgICAgICBjdXJfZGlzdCwKLSAgICAgICAgICAgICAgICAgICAgIENVUi50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbMF0gKSAtIGN1cl9kaXN0OworICAgICAgICAgICAgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbMF0gKSAtIGN1cl9kaXN0OwogICAgIH0KICAgICBlbHNlCiAgICAgICBkaXN0YW5jZSA9IDA7CiAKLSAgICBDVVJfRnVuY19tb3ZlKCAmQ1VSLnpwMCwgcG9pbnQsIGRpc3RhbmNlICk7CisgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBwb2ludCwgZGlzdGFuY2UgKTsKIAotICAgIENVUi5HUy5ycDAgPSBwb2ludDsKLSAgICBDVVIuR1MucnAxID0gcG9pbnQ7CisgICAgZXhjLT5HUy5ycDAgPSBwb2ludDsKKyAgICBleGMtPkdTLnJwMSA9IHBvaW50OwogICB9CiAKIApAQCAtNjM2NSw3ICs1OTA2LDggQEAKICAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfTUlBUCggSU5TX0FSRyApCisgIEluc19NSUFQKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7CiAgICAgRlRfVUxvbmcgICAgY3Z0RW50cnk7CiAgICAgRlRfVVNob3J0ICAgcG9pbnQ7CkBAIC02Mzc0LDI0ICs1OTE2LDI0IEBACiAgICAgRlRfRjI2RG90NiAgY29udHJvbF92YWx1ZV9jdXRpbjsKIAogCi0gICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IENVUi5HUy5jb250cm9sX3ZhbHVlX2N1dGluOworICAgIGNvbnRyb2xfdmFsdWVfY3V0aW4gPSBleGMtPkdTLmNvbnRyb2xfdmFsdWVfY3V0aW47CiAgICAgY3Z0RW50cnkgICAgICAgICAgICA9IChGVF9VTG9uZylhcmdzWzFdOwogICAgIHBvaW50ICAgICAgICAgICAgICAgPSAoRlRfVVNob3J0KWFyZ3NbMF07CiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnggIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnkgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICEoIENVUi5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQorICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnkgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICEoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX05PUk1BTF9ST1VORCApICkKICAgICAgIGNvbnRyb2xfdmFsdWVfY3V0aW4gPSAwOwogI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLwogCi0gICAgaWYgKCBCT1VORFMoIHBvaW50LCAgICAgQ1VSLnpwMC5uX3BvaW50cyApIHx8Ci0gICAgICAgICBCT1VORFNMKCBjdnRFbnRyeSwgQ1VSLmN2dFNpemUgKSAgICAgICkKKyAgICBpZiAoIEJPVU5EUyggcG9pbnQsICAgICBleGMtPnpwMC5uX3BvaW50cyApIHx8CisgICAgICAgICBCT1VORFNMKCBjdnRFbnRyeSwgZXhjLT5jdnRTaXplICkgICAgICApCiAgICAgewotICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApCi0gICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CiAgICAgICBnb3RvIEZhaWw7CiAgICAgfQogCkBAIC02NDE1LDU2ICs1OTU3LDU4IEBACiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgLyogQ29uZmlybWVkIGJ5IEdyZWcgSGl0Y2hjb2NrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICBkaXN0YW5jZSA9IENVUl9GdW5jX3JlYWRfY3Z0KCBjdnRFbnRyeSApOworICAgIGRpc3RhbmNlID0gZXhjLT5mdW5jX3JlYWRfY3Z0KCBleGMsIGN2dEVudHJ5ICk7CiAKLSAgICBpZiAoIENVUi5HUy5nZXAwID09IDAgKSAgIC8qIElmIGluIHR3aWxpZ2h0IHpvbmUgKi8KKyAgICBpZiAoIGV4Yy0+R1MuZ2VwMCA9PSAwICkgICAvKiBJZiBpbiB0d2lsaWdodCB6b25lICovCiAgICAgewogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwogICAgICAgLyogT25seSBhZGp1c3QgaWYgbm90IGluIHNwaF9jb21wYXRpYmlsaXR5X21vZGUgb3IgaWdub3JlX3hfbW9kZS4gKi8KICAgICAgIC8qIERldGVybWluZWQgdmlhIGV4cGVyaW1lbnRhdGlvbiBhbmQgbWF5IGJlIGluY29ycmVjdC4uLiAgICAgICAgICovCi0gICAgICBpZiAoICFTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgfHwKLSAgICAgICAgICAgKCAhQ1VSLmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgfHwKLSAgICAgICAgICAgICAhQ1VSLmZhY2UtPnNwaF9jb21wYXRpYmlsaXR5X21vZGUgKSApCisgICAgICBpZiAoICFTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICggIWV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICFleGMtPmZhY2UtPnNwaF9jb21wYXRpYmlsaXR5X21vZGUgKSApCiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCi0gICAgICAgIENVUi56cDAub3JnW3BvaW50XS54ID0gVFRfTXVsRml4MTQoIChGVF9VSW50MzIpZGlzdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnggKTsKLSAgICAgIENVUi56cDAub3JnW3BvaW50XS55ID0gVFRfTXVsRml4MTQoIChGVF9VSW50MzIpZGlzdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVIuR1MuZnJlZVZlY3Rvci55ICksCi0gICAgICBDVVIuenAwLmN1cltwb2ludF0gICA9IENVUi56cDAub3JnW3BvaW50XTsKKyAgICAgICAgZXhjLT56cDAub3JnW3BvaW50XS54ID0gVFRfTXVsRml4MTQoIGRpc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggKTsKKyAgICAgIGV4Yy0+enAwLm9yZ1twb2ludF0ueSA9IFRUX011bEZpeDE0KCBkaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSApLAorICAgICAgZXhjLT56cDAuY3VyW3BvaW50XSAgID0gZXhjLT56cDAub3JnW3BvaW50XTsKICAgICB9CiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgKCBDVVIuc3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX01JQVBfSEFDSyApICYmCi0gICAgICAgICBkaXN0YW5jZSA+IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnkgIT0gMCAgICAgICAgICAgICAgICAgICAgICApCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX01JQVBfSEFDSyApICYmCisgICAgICAgICBkaXN0YW5jZSA+IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgIGRpc3RhbmNlID0gMDsKICNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KIAotICAgIG9yZ19kaXN0ID0gQ1VSX2Zhc3RfcHJvamVjdCggJkNVUi56cDAuY3VyW3BvaW50XSApOworICAgIG9yZ19kaXN0ID0gRkFTVF9QUk9KRUNUKCAmZXhjLT56cDAuY3VyW3BvaW50XSApOwogCi0gICAgaWYgKCAoIENVUi5vcGNvZGUgJiAxICkgIT0gMCApICAgLyogcm91bmRpbmcgYW5kIGNvbnRyb2wgY3V0LWluIGZsYWcgKi8KKyAgICBpZiAoICggZXhjLT5vcGNvZGUgJiAxICkgIT0gMCApICAgLyogcm91bmRpbmcgYW5kIGNvbnRyb2wgY3V0LWluIGZsYWcgKi8KICAgICB7CiAgICAgICBpZiAoIEZUX0FCUyggZGlzdGFuY2UgLSBvcmdfZGlzdCApID4gY29udHJvbF92YWx1ZV9jdXRpbiApCiAgICAgICAgIGRpc3RhbmNlID0gb3JnX2Rpc3Q7CiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICYmCi0gICAgICAgICAgIENVUi5pZ25vcmVfeF9tb2RlICAgICAgICAmJgotICAgICAgICAgICBDVVIuR1MuZnJlZVZlY3Rvci54ICE9IDAgKQotICAgICAgICBkaXN0YW5jZSA9IFJPVU5EX05vbmUoIGRpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUi50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbMF0gKTsKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAmJgorICAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgKQorICAgICAgICBkaXN0YW5jZSA9IFJvdW5kX05vbmUoIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1swXSApOwogICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIGRpc3RhbmNlID0gQ1VSX0Z1bmNfcm91bmQoIGRpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVIudHRfbWV0cmljcy5jb21wZW5zYXRpb25zWzBdICk7CisgICAgICAgIGRpc3RhbmNlID0gZXhjLT5mdW5jX3JvdW5kKCBleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zWzBdICk7CiAgICAgfQogCi0gICAgQ1VSX0Z1bmNfbW92ZSggJkNVUi56cDAsIHBvaW50LCBkaXN0YW5jZSAtIG9yZ19kaXN0ICk7CisgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBwb2ludCwgZGlzdGFuY2UgLSBvcmdfZGlzdCApOwogCiAgIEZhaWw6Ci0gICAgQ1VSLkdTLnJwMCA9IHBvaW50OwotICAgIENVUi5HUy5ycDEgPSBwb2ludDsKKyAgICBleGMtPkdTLnJwMCA9IHBvaW50OworICAgIGV4Yy0+R1MucnAxID0gcG9pbnQ7CiAgIH0KIAogCkBAIC02NDc1LDI5ICs2MDE5LDMwIEBACiAgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX01EUlAoIElOU19BUkcgKQorICBJbnNfTURSUCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewogICAgIEZUX1VTaG9ydCAgIHBvaW50OwogICAgIEZUX0YyNkRvdDYgIG9yZ19kaXN0LCBkaXN0YW5jZSwgbWluaW11bV9kaXN0YW5jZTsKIAogCi0gICAgbWluaW11bV9kaXN0YW5jZSA9IENVUi5HUy5taW5pbXVtX2Rpc3RhbmNlOworICAgIG1pbmltdW1fZGlzdGFuY2UgPSBleGMtPkdTLm1pbmltdW1fZGlzdGFuY2U7CiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnggIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICEoIENVUi5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQorICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQogICAgICAgbWluaW11bV9kaXN0YW5jZSA9IDA7CiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCiAKICAgICBwb2ludCA9IChGVF9VU2hvcnQpYXJnc1swXTsKIAotICAgIGlmICggQk9VTkRTKCBwb2ludCwgICAgICBDVVIuenAxLm5fcG9pbnRzICkgfHwKLSAgICAgICAgIEJPVU5EUyggQ1VSLkdTLnJwMCwgQ1VSLnpwMC5uX3BvaW50cyApICkKKyAgICBpZiAoIEJPVU5EUyggcG9pbnQsICAgICAgIGV4Yy0+enAxLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EUyggZXhjLT5HUy5ycDAsIGV4Yy0+enAwLm5fcG9pbnRzICkgKQogICAgIHsKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgZ290byBGYWlsOwogICAgIH0KIApAQCAtNjUwNiw3NCArNjA1MSw3NyBAQAogCiAgICAgLyogWFhYOiBVTkRPQ1VNRU5URUQ6IHR3aWxpZ2h0IHpvbmUgc3BlY2lhbCBjYXNlICovCiAKLSAgICBpZiAoIENVUi5HUy5nZXAwID09IDAgfHwgQ1VSLkdTLmdlcDEgPT0gMCApCisgICAgaWYgKCBleGMtPkdTLmdlcDAgPT0gMCB8fCBleGMtPkdTLmdlcDEgPT0gMCApCiAgICAgewotICAgICAgRlRfVmVjdG9yKiAgdmVjMSA9ICZDVVIuenAxLm9yZ1twb2ludF07Ci0gICAgICBGVF9WZWN0b3IqICB2ZWMyID0gJkNVUi56cDAub3JnW0NVUi5HUy5ycDBdOworICAgICAgRlRfVmVjdG9yKiAgdmVjMSA9ICZleGMtPnpwMS5vcmdbcG9pbnRdOworICAgICAgRlRfVmVjdG9yKiAgdmVjMiA9ICZleGMtPnpwMC5vcmdbZXhjLT5HUy5ycDBdOwogCiAKLSAgICAgIG9yZ19kaXN0ID0gQ1VSX0Z1bmNfZHVhbHByb2ooIHZlYzEsIHZlYzIgKTsKKyAgICAgIG9yZ19kaXN0ID0gRFVBTFBST0ooIHZlYzEsIHZlYzIgKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIEZUX1ZlY3RvciogIHZlYzEgPSAmQ1VSLnpwMS5vcnVzW3BvaW50XTsKLSAgICAgIEZUX1ZlY3RvciogIHZlYzIgPSAmQ1VSLnpwMC5vcnVzW0NVUi5HUy5ycDBdOworICAgICAgRlRfVmVjdG9yKiAgdmVjMSA9ICZleGMtPnpwMS5vcnVzW3BvaW50XTsKKyAgICAgIEZUX1ZlY3RvciogIHZlYzIgPSAmZXhjLT56cDAub3J1c1tleGMtPkdTLnJwMF07CiAKIAotICAgICAgaWYgKCBDVVIubWV0cmljcy54X3NjYWxlID09IENVUi5tZXRyaWNzLnlfc2NhbGUgKQorICAgICAgaWYgKCBleGMtPm1ldHJpY3MueF9zY2FsZSA9PSBleGMtPm1ldHJpY3MueV9zY2FsZSApCiAgICAgICB7CiAgICAgICAgIC8qIHRoaXMgc2hvdWxkIGJlIGZhc3RlciAqLwotICAgICAgICBvcmdfZGlzdCA9IENVUl9GdW5jX2R1YWxwcm9qKCB2ZWMxLCB2ZWMyICk7Ci0gICAgICAgIG9yZ19kaXN0ID0gRlRfTXVsRml4KCBvcmdfZGlzdCwgQ1VSLm1ldHJpY3MueF9zY2FsZSApOworICAgICAgICBvcmdfZGlzdCA9IERVQUxQUk9KKCB2ZWMxLCB2ZWMyICk7CisgICAgICAgIG9yZ19kaXN0ID0gRlRfTXVsRml4KCBvcmdfZGlzdCwgZXhjLT5tZXRyaWNzLnhfc2NhbGUgKTsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgRlRfVmVjdG9yICB2ZWM7CiAKIAotICAgICAgICB2ZWMueCA9IEZUX011bEZpeCggdmVjMS0+eCAtIHZlYzItPngsIENVUi5tZXRyaWNzLnhfc2NhbGUgKTsKLSAgICAgICAgdmVjLnkgPSBGVF9NdWxGaXgoIHZlYzEtPnkgLSB2ZWMyLT55LCBDVVIubWV0cmljcy55X3NjYWxlICk7CisgICAgICAgIHZlYy54ID0gRlRfTXVsRml4KCB2ZWMxLT54IC0gdmVjMi0+eCwgZXhjLT5tZXRyaWNzLnhfc2NhbGUgKTsKKyAgICAgICAgdmVjLnkgPSBGVF9NdWxGaXgoIHZlYzEtPnkgLSB2ZWMyLT55LCBleGMtPm1ldHJpY3MueV9zY2FsZSApOwogCi0gICAgICAgIG9yZ19kaXN0ID0gQ1VSX2Zhc3RfZHVhbHByb2ooICZ2ZWMgKTsKKyAgICAgICAgb3JnX2Rpc3QgPSBGQVNUX0RVQUxQUk9KKCAmdmVjICk7CiAgICAgICB9CiAgICAgfQogCiAgICAgLyogc2luZ2xlIHdpZHRoIGN1dC1pbiB0ZXN0ICovCiAKLSAgICBpZiAoIEZUX0FCUyggb3JnX2Rpc3QgLSBDVVIuR1Muc2luZ2xlX3dpZHRoX3ZhbHVlICkgPAotICAgICAgICAgQ1VSLkdTLnNpbmdsZV93aWR0aF9jdXRpbiApCisgICAgaWYgKCBGVF9BQlMoIG9yZ19kaXN0IC0gZXhjLT5HUy5zaW5nbGVfd2lkdGhfdmFsdWUgKSA8CisgICAgICAgICBleGMtPkdTLnNpbmdsZV93aWR0aF9jdXRpbiApCiAgICAgewogICAgICAgaWYgKCBvcmdfZGlzdCA+PSAwICkKLSAgICAgICAgb3JnX2Rpc3QgPSBDVVIuR1Muc2luZ2xlX3dpZHRoX3ZhbHVlOworICAgICAgICBvcmdfZGlzdCA9IGV4Yy0+R1Muc2luZ2xlX3dpZHRoX3ZhbHVlOwogICAgICAgZWxzZQotICAgICAgICBvcmdfZGlzdCA9IC1DVVIuR1Muc2luZ2xlX3dpZHRoX3ZhbHVlOworICAgICAgICBvcmdfZGlzdCA9IC1leGMtPkdTLnNpbmdsZV93aWR0aF92YWx1ZTsKICAgICB9CiAKICAgICAvKiByb3VuZCBmbGFnICovCiAKLSAgICBpZiAoICggQ1VSLm9wY29kZSAmIDQgKSAhPSAwICkKKyAgICBpZiAoICggZXhjLT5vcGNvZGUgJiA0ICkgIT0gMCApCiAgICAgewogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgJiYKLSAgICAgICAgICAgQ1VSLmlnbm9yZV94X21vZGUgICAgICAgICYmCi0gICAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnggIT0gMCApCi0gICAgICAgIGRpc3RhbmNlID0gUk9VTkRfTm9uZSgKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAmJgorICAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgKQorICAgICAgICBkaXN0YW5jZSA9IFJvdW5kX05vbmUoCisgICAgICAgICAgICAgICAgICAgICBleGMsCiAgICAgICAgICAgICAgICAgICAgICBvcmdfZGlzdCwKLSAgICAgICAgICAgICAgICAgICAgIENVUi50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbQ1VSLm9wY29kZSAmIDNdICk7CisgICAgICAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1tleGMtPm9wY29kZSAmIDNdICk7CiAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgIGRpc3RhbmNlID0gQ1VSX0Z1bmNfcm91bmQoCi0gICAgICAgICAgICAgICAgICAgb3JnX2Rpc3QsCi0gICAgICAgICAgICAgICAgICAgQ1VSLnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1tDVVIub3Bjb2RlICYgM10gKTsKKyAgICAgICAgZGlzdGFuY2UgPSBleGMtPmZ1bmNfcm91bmQoCisgICAgICAgICAgICAgICAgICAgICBleGMsCisgICAgICAgICAgICAgICAgICAgICBvcmdfZGlzdCwKKyAgICAgICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zW2V4Yy0+b3Bjb2RlICYgM10gKTsKICAgICB9CiAgICAgZWxzZQotICAgICAgZGlzdGFuY2UgPSBST1VORF9Ob25lKAorICAgICAgZGlzdGFuY2UgPSBSb3VuZF9Ob25lKAorICAgICAgICAgICAgICAgICAgIGV4YywKICAgICAgICAgICAgICAgICAgICBvcmdfZGlzdCwKLSAgICAgICAgICAgICAgICAgICBDVVIudHRfbWV0cmljcy5jb21wZW5zYXRpb25zW0NVUi5vcGNvZGUgJiAzXSApOworICAgICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zW2V4Yy0+b3Bjb2RlICYgM10gKTsKIAogICAgIC8qIG1pbmltdW0gZGlzdGFuY2UgZmxhZyAqLwogCi0gICAgaWYgKCAoIENVUi5vcGNvZGUgJiA4ICkgIT0gMCApCisgICAgaWYgKCAoIGV4Yy0+b3Bjb2RlICYgOCApICE9IDAgKQogICAgIHsKICAgICAgIGlmICggb3JnX2Rpc3QgPj0gMCApCiAgICAgICB7CkBAIC02NTg5LDE3ICs2MTM3LDE2IEBACiAKICAgICAvKiBub3cgbW92ZSB0aGUgcG9pbnQgKi8KIAotICAgIG9yZ19kaXN0ID0gQ1VSX0Z1bmNfcHJvamVjdCggQ1VSLnpwMS5jdXIgKyBwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUi56cDAuY3VyICsgQ1VSLkdTLnJwMCApOworICAgIG9yZ19kaXN0ID0gUFJPSkVDVCggZXhjLT56cDEuY3VyICsgcG9pbnQsIGV4Yy0+enAwLmN1ciArIGV4Yy0+R1MucnAwICk7CiAKLSAgICBDVVJfRnVuY19tb3ZlKCAmQ1VSLnpwMSwgcG9pbnQsIGRpc3RhbmNlIC0gb3JnX2Rpc3QgKTsKKyAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDEsIHBvaW50LCBkaXN0YW5jZSAtIG9yZ19kaXN0ICk7CiAKICAgRmFpbDoKLSAgICBDVVIuR1MucnAxID0gQ1VSLkdTLnJwMDsKLSAgICBDVVIuR1MucnAyID0gcG9pbnQ7CisgICAgZXhjLT5HUy5ycDEgPSBleGMtPkdTLnJwMDsKKyAgICBleGMtPkdTLnJwMiA9IHBvaW50OwogCi0gICAgaWYgKCAoIENVUi5vcGNvZGUgJiAxNiApICE9IDAgKQotICAgICAgQ1VSLkdTLnJwMCA9IHBvaW50OworICAgIGlmICggKCBleGMtPm9wY29kZSAmIDE2ICkgIT0gMCApCisgICAgICBleGMtPkdTLnJwMCA9IHBvaW50OwogICB9CiAKIApAQCAtNjYxMCw3ICs2MTU3LDggQEAKICAgLyogU3RhY2s6ICAgICAgICBpbnQzMj8gdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfTUlSUCggSU5TX0FSRyApCisgIEluc19NSVJQKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7CiAgICAgRlRfVVNob3J0ICAgcG9pbnQ7CiAgICAgRlRfVUxvbmcgICAgY3Z0RW50cnk7CkBAIC02NjI4LDc3ICs2MTc2LDc1IEBACiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCiAKIAotICAgIG1pbmltdW1fZGlzdGFuY2UgICAgPSBDVVIuR1MubWluaW11bV9kaXN0YW5jZTsKLSAgICBjb250cm9sX3ZhbHVlX2N1dGluID0gQ1VSLkdTLmNvbnRyb2xfdmFsdWVfY3V0aW47CisgICAgbWluaW11bV9kaXN0YW5jZSAgICA9IGV4Yy0+R1MubWluaW11bV9kaXN0YW5jZTsKKyAgICBjb250cm9sX3ZhbHVlX2N1dGluID0gZXhjLT5HUy5jb250cm9sX3ZhbHVlX2N1dGluOwogICAgIHBvaW50ICAgICAgICAgICAgICAgPSAoRlRfVVNob3J0KWFyZ3NbMF07CiAgICAgY3Z0RW50cnkgICAgICAgICAgICA9IChGVF9VTG9uZykoIGFyZ3NbMV0gKyAxICk7CiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnggIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICEoIENVUi5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQorICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQogICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IG1pbmltdW1fZGlzdGFuY2UgPSAwOwogI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLwogCiAgICAgLyogWFhYOiBVTkRPQ1VNRU5URUQhIGN2dFstMV0gPSAwIGFsd2F5cyAqLwogCi0gICAgaWYgKCBCT1VORFMoIHBvaW50LCAgICAgIENVUi56cDEubl9wb2ludHMgKSB8fAotICAgICAgICAgQk9VTkRTTCggY3Z0RW50cnksICBDVVIuY3Z0U2l6ZSArIDEgKSAgfHwKLSAgICAgICAgIEJPVU5EUyggQ1VSLkdTLnJwMCwgQ1VSLnpwMC5uX3BvaW50cyApICkKKyAgICBpZiAoIEJPVU5EUyggcG9pbnQsICAgICAgIGV4Yy0+enAxLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EU0woIGN2dEVudHJ5LCAgIGV4Yy0+Y3Z0U2l6ZSArIDEgKSAgfHwKKyAgICAgICAgIEJPVU5EUyggZXhjLT5HUy5ycDAsIGV4Yy0+enAwLm5fcG9pbnRzICkgKQogICAgIHsKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgZ290byBGYWlsOwogICAgIH0KIAogICAgIGlmICggIWN2dEVudHJ5ICkKICAgICAgIGN2dF9kaXN0ID0gMDsKICAgICBlbHNlCi0gICAgICBjdnRfZGlzdCA9IENVUl9GdW5jX3JlYWRfY3Z0KCBjdnRFbnRyeSAtIDEgKTsKKyAgICAgIGN2dF9kaXN0ID0gZXhjLT5mdW5jX3JlYWRfY3Z0KCBleGMsIGN2dEVudHJ5IC0gMSApOwogCiAgICAgLyogc2luZ2xlIHdpZHRoIHRlc3QgKi8KIAotICAgIGlmICggRlRfQUJTKCBjdnRfZGlzdCAtIENVUi5HUy5zaW5nbGVfd2lkdGhfdmFsdWUgKSA8Ci0gICAgICAgICBDVVIuR1Muc2luZ2xlX3dpZHRoX2N1dGluICkKKyAgICBpZiAoIEZUX0FCUyggY3Z0X2Rpc3QgLSBleGMtPkdTLnNpbmdsZV93aWR0aF92YWx1ZSApIDwKKyAgICAgICAgIGV4Yy0+R1Muc2luZ2xlX3dpZHRoX2N1dGluICkKICAgICB7CiAgICAgICBpZiAoIGN2dF9kaXN0ID49IDAgKQotICAgICAgICBjdnRfZGlzdCA9ICBDVVIuR1Muc2luZ2xlX3dpZHRoX3ZhbHVlOworICAgICAgICBjdnRfZGlzdCA9ICBleGMtPkdTLnNpbmdsZV93aWR0aF92YWx1ZTsKICAgICAgIGVsc2UKLSAgICAgICAgY3Z0X2Rpc3QgPSAtQ1VSLkdTLnNpbmdsZV93aWR0aF92YWx1ZTsKKyAgICAgICAgY3Z0X2Rpc3QgPSAtZXhjLT5HUy5zaW5nbGVfd2lkdGhfdmFsdWU7CiAgICAgfQogCiAgICAgLyogVU5ET0NVTUVOVEVEISAgVGhlIE1TIHJhc3Rlcml6ZXIgZG9lcyB0aGF0IHdpdGggKi8KICAgICAvKiB0d2lsaWdodCBwb2ludHMgKGNvbmZpcm1lZCBieSBHcmVnIEhpdGNoY29jaykgICAqLwotICAgIGlmICggQ1VSLkdTLmdlcDEgPT0gMCApCisgICAgaWYgKCBleGMtPkdTLmdlcDEgPT0gMCApCiAgICAgewotICAgICAgQ1VSLnpwMS5vcmdbcG9pbnRdLnggPSBDVVIuenAwLm9yZ1tDVVIuR1MucnAwXS54ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfTXVsRml4MTQoIChGVF9VSW50MzIpY3Z0X2Rpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVIuR1MuZnJlZVZlY3Rvci54ICk7Ci0gICAgICBDVVIuenAxLm9yZ1twb2ludF0ueSA9IENVUi56cDAub3JnW0NVUi5HUy5ycDBdLnkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9NdWxGaXgxNCggKEZUX1VJbnQzMiljdnRfZGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnkgKTsKLSAgICAgIENVUi56cDEuY3VyW3BvaW50XSAgID0gQ1VSLnpwMS5vcmdbcG9pbnRdOworICAgICAgZXhjLT56cDEub3JnW3BvaW50XS54ID0gZXhjLT56cDAub3JnW2V4Yy0+R1MucnAwXS54ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUX011bEZpeDE0KCBjdnRfZGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCApOworICAgICAgZXhjLT56cDEub3JnW3BvaW50XS55ID0gZXhjLT56cDAub3JnW2V4Yy0+R1MucnAwXS55ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUX011bEZpeDE0KCBjdnRfZGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSApOworICAgICAgZXhjLT56cDEuY3VyW3BvaW50XSAgID0gZXhjLT56cDEub3JnW3BvaW50XTsKICAgICB9CiAKLSAgICBvcmdfZGlzdCA9IENVUl9GdW5jX2R1YWxwcm9qKCAmQ1VSLnpwMS5vcmdbcG9pbnRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDVVIuenAwLm9yZ1tDVVIuR1MucnAwXSApOwotICAgIGN1cl9kaXN0ID0gQ1VSX0Z1bmNfcHJvamVjdCAoICZDVVIuenAxLmN1cltwb2ludF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNVUi56cDAuY3VyW0NVUi5HUy5ycDBdICk7CisgICAgb3JnX2Rpc3QgPSBEVUFMUFJPSiggJmV4Yy0+enAxLm9yZ1twb2ludF0sICZleGMtPnpwMC5vcmdbZXhjLT5HUy5ycDBdICk7CisgICAgY3VyX2Rpc3QgPSBQUk9KRUNUICggJmV4Yy0+enAxLmN1cltwb2ludF0sICZleGMtPnpwMC5jdXJbZXhjLT5HUy5ycDBdICk7CiAKICAgICAvKiBhdXRvLWZsaXAgdGVzdCAqLwogCi0gICAgaWYgKCBDVVIuR1MuYXV0b19mbGlwICkKKyAgICBpZiAoIGV4Yy0+R1MuYXV0b19mbGlwICkKICAgICB7CiAgICAgICBpZiAoICggb3JnX2Rpc3QgXiBjdnRfZGlzdCApIDwgMCApCiAgICAgICAgIGN2dF9kaXN0ID0gLWN2dF9kaXN0OwogICAgIH0KIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBDVVIuR1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgKCBDVVIuc3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX1RJTUVTX05FV19ST01BTl9IQUNLICkgKQorICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19USU1FU19ORVdfUk9NQU5fSEFDSyApICkKICAgICB7CiAgICAgICBpZiAoIGN1cl9kaXN0IDwgLTY0ICkKICAgICAgICAgY3Z0X2Rpc3QgLT0gMTY7CkBAIC02NzA5LDEyICs2MjU1LDEyIEBACiAKICAgICAvKiBjb250cm9sIHZhbHVlIGN1dC1pbiBhbmQgcm91bmQgKi8KIAotICAgIGlmICggKCBDVVIub3Bjb2RlICYgNCApICE9IDAgKQorICAgIGlmICggKCBleGMtPm9wY29kZSAmIDQgKSAhPSAwICkKICAgICB7CiAgICAgICAvKiBYWFg6IFVORE9DVU1FTlRFRCEgIE9ubHkgcGVyZm9ybSBjdXQtaW4gdGVzdCB3aGVuIGJvdGggcG9pbnRzICovCiAgICAgICAvKiAgICAgIHJlZmVyIHRvIHRoZSBzYW1lIHpvbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgIGlmICggQ1VSLkdTLmdlcDAgPT0gQ1VSLkdTLmdlcDEgKQorICAgICAgaWYgKCBleGMtPkdTLmdlcDAgPT0gZXhjLT5HUy5nZXAxICkKICAgICAgIHsKICAgICAgICAgLyogWFhYOiBBY2NvcmRpbmcgdG8gR3JlZyBIaXRjaGNvY2ssIHRoZSBmb2xsb3dpbmcgd29yZGluZyBpcyAqLwogICAgICAgICAvKiAgICAgIHRoZSByaWdodCBvbmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC02NzMyLDMyICs2Mjc4LDM0IEBACiAgICAgICAgICAgY3Z0X2Rpc3QgPSBvcmdfZGlzdDsKICAgICAgIH0KIAotICAgICAgZGlzdGFuY2UgPSBDVVJfRnVuY19yb3VuZCgKKyAgICAgIGRpc3RhbmNlID0gZXhjLT5mdW5jX3JvdW5kKAorICAgICAgICAgICAgICAgICAgIGV4YywKICAgICAgICAgICAgICAgICAgICBjdnRfZGlzdCwKLSAgICAgICAgICAgICAgICAgICBDVVIudHRfbWV0cmljcy5jb21wZW5zYXRpb25zW0NVUi5vcGNvZGUgJiAzXSApOworICAgICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zW2V4Yy0+b3Bjb2RlICYgM10gKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwogICAgICAgLyogZG8gY3Z0IGN1dC1pbiBhbHdheXMgaW4gTUlSUCBmb3Igc3BoICovCi0gICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICYmCi0gICAgICAgICAgIENVUi5pZ25vcmVfeF9tb2RlICAgICAgICAgICYmCi0gICAgICAgICAgIENVUi5HUy5nZXAwID09IENVUi5HUy5nZXAxICkKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAmJgorICAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+R1MuZ2VwMCA9PSBleGMtPkdTLmdlcDEgKQogICAgICAgewogICAgICAgICBpZiAoIEZUX0FCUyggY3Z0X2Rpc3QgLSBvcmdfZGlzdCApID4gY29udHJvbF92YWx1ZV9jdXRpbiApCiAgICAgICAgICAgY3Z0X2Rpc3QgPSBvcmdfZGlzdDsKICAgICAgIH0KICNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KIAotICAgICAgZGlzdGFuY2UgPSBST1VORF9Ob25lKAorICAgICAgZGlzdGFuY2UgPSBSb3VuZF9Ob25lKAorICAgICAgICAgICAgICAgICAgIGV4YywKICAgICAgICAgICAgICAgICAgICBjdnRfZGlzdCwKLSAgICAgICAgICAgICAgICAgICBDVVIudHRfbWV0cmljcy5jb21wZW5zYXRpb25zW0NVUi5vcGNvZGUgJiAzXSApOworICAgICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zW2V4Yy0+b3Bjb2RlICYgM10gKTsKICAgICB9CiAKICAgICAvKiBtaW5pbXVtIGRpc3RhbmNlIHRlc3QgKi8KIAotICAgIGlmICggKCBDVVIub3Bjb2RlICYgOCApICE9IDAgKQorICAgIGlmICggKCBleGMtPm9wY29kZSAmIDggKSAhPSAwICkKICAgICB7CiAgICAgICBpZiAoIG9yZ19kaXN0ID49IDAgKQogICAgICAgewpAQCAtNjc3NCw1OSArNjMyMiw1OSBAQAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwogICAgIGlmICggU1VCUElYRUxfSElOVElORyApCiAgICAgewotICAgICAgQjEgPSBDVVIuenAxLmN1cltwb2ludF0ueTsKKyAgICAgIEIxID0gZXhjLT56cDEuY3VyW3BvaW50XS55OwogCiAgICAgICAvKiBSb3VuZCBtb3ZlcyBpZiBuZWNlc3NhcnkgKi8KLSAgICAgIGlmICggQ1VSLmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICBDVVIuR1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICggQ1VSLnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19ST1VORF9OT05QSVhFTF9ZX01PVkVTICkgKQorICAgICAgaWYgKCBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX1JPVU5EX05PTlBJWEVMX1lfTU9WRVMgKSApCiAgICAgICAgIGRpc3RhbmNlID0gRlRfUElYX1JPVU5EKCBCMSArIGRpc3RhbmNlIC0gY3VyX2Rpc3QgKSAtIEIxICsgY3VyX2Rpc3Q7CiAKLSAgICAgIGlmICggQ1VSLmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAoIENVUi5vcGNvZGUgJiAxNiApID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgKCBDVVIub3Bjb2RlICYgOCApID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICggQ1VSLnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19DT1VSSUVSX05FV18yX0hBQ0sgKSApCisgICAgICBpZiAoIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAoIGV4Yy0+b3Bjb2RlICYgMTYgKSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICggZXhjLT5vcGNvZGUgJiA4ICkgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19DT1VSSUVSX05FV18yX0hBQ0sgKSApCiAgICAgICAgIGRpc3RhbmNlICs9IDY0OwogICAgIH0KICNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KIAotICAgIENVUl9GdW5jX21vdmUoICZDVVIuenAxLCBwb2ludCwgZGlzdGFuY2UgLSBjdXJfZGlzdCApOworICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMSwgcG9pbnQsIGRpc3RhbmNlIC0gY3VyX2Rpc3QgKTsKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwogICAgIGlmICggU1VCUElYRUxfSElOVElORyApCiAgICAgewotICAgICAgQjIgPSBDVVIuenAxLmN1cltwb2ludF0ueTsKKyAgICAgIEIyID0gZXhjLT56cDEuY3VyW3BvaW50XS55OwogCiAgICAgICAvKiBSZXZlcnNlIG1vdmUgaWYgbmVjZXNzYXJ5ICovCi0gICAgICBpZiAoIENVUi5pZ25vcmVfeF9tb2RlICkKKyAgICAgIGlmICggZXhjLT5pZ25vcmVfeF9tb2RlICkKICAgICAgIHsKLSAgICAgICAgaWYgKCBDVVIuZmFjZS0+c3BoX2NvbXBhdGliaWxpdHlfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgICBDVVIuR1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgICAoIEIxICYgNjMgKSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgICAoIEIyICYgNjMgKSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBpZiAoIGV4Yy0+ZmFjZS0+c3BoX2NvbXBhdGliaWxpdHlfbW9kZSAmJgorICAgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAmJgorICAgICAgICAgICAgICggQjEgJiA2MyApID09IDAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICggQjIgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgcmV2ZXJzZV9tb3ZlID0gVFJVRTsKIAotICAgICAgICBpZiAoICggQ1VSLnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19TS0lQX05PTlBJWEVMX1lfTU9WRVMgKSAmJgotICAgICAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICggQjIgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICggQjEgJiA2MyApICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGlmICggKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19TS0lQX05PTlBJWEVMX1lfTU9WRVMgKSAmJgorICAgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAoIEIyICYgNjMgKSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgKCBCMSAmIDYzICkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgcmV2ZXJzZV9tb3ZlID0gVFJVRTsKICAgICAgIH0KIAogICAgICAgaWYgKCByZXZlcnNlX21vdmUgKQotICAgICAgICBDVVJfRnVuY19tb3ZlKCAmQ1VSLnpwMSwgcG9pbnQsIC0oIGRpc3RhbmNlIC0gY3VyX2Rpc3QgKSApOworICAgICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDEsIHBvaW50LCAtKCBkaXN0YW5jZSAtIGN1cl9kaXN0ICkgKTsKICAgICB9CiAKICNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KIAogICBGYWlsOgotICAgIENVUi5HUy5ycDEgPSBDVVIuR1MucnAwOworICAgIGV4Yy0+R1MucnAxID0gZXhjLT5HUy5ycDA7CiAKLSAgICBpZiAoICggQ1VSLm9wY29kZSAmIDE2ICkgIT0gMCApCi0gICAgICBDVVIuR1MucnAwID0gcG9pbnQ7CisgICAgaWYgKCAoIGV4Yy0+b3Bjb2RlICYgMTYgKSAhPSAwICkKKyAgICAgIGV4Yy0+R1MucnAwID0gcG9pbnQ7CiAKLSAgICBDVVIuR1MucnAyID0gcG9pbnQ7CisgICAgZXhjLT5HUy5ycDIgPSBwb2ludDsKICAgfQogCiAKQEAgLTY4MzcsNjEgKzYzODUsNTkgQEAKICAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyLi4uIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfQUxJR05SUCggSU5TX0FSRyApCisgIEluc19BTElHTlJQKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewogICAgIEZUX1VTaG9ydCAgIHBvaW50OwogICAgIEZUX0YyNkRvdDYgIGRpc3RhbmNlOwogCi0gICAgRlRfVU5VU0VEX0FSRzsKLQogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgQ1VSLmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5pdXBfY2FsbGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAoIENVUi5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9fQUxJR05SUF9BRlRFUl9JVVAgKSApCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pdXBfY2FsbGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX05PX0FMSUdOUlBfQUZURVJfSVVQICkgKQogICAgIHsKLSAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgZ290byBGYWlsOwogICAgIH0KICNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KIAotICAgIGlmICggQ1VSLnRvcCA8IENVUi5HUy5sb29wIHx8Ci0gICAgICAgICBCT1VORFMoIENVUi5HUy5ycDAsIENVUi56cDAubl9wb2ludHMgKSApCisgICAgaWYgKCBleGMtPnRvcCA8IGV4Yy0+R1MubG9vcCAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICBCT1VORFMoIGV4Yy0+R1MucnAwLCBleGMtPnpwMC5uX3BvaW50cyApICkKICAgICB7Ci0gICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKICAgICAgIGdvdG8gRmFpbDsKICAgICB9CiAKLSAgICB3aGlsZSAoIENVUi5HUy5sb29wID4gMCApCisgICAgd2hpbGUgKCBleGMtPkdTLmxvb3AgPiAwICkKICAgICB7Ci0gICAgICBDVVIuYXJncy0tOworICAgICAgZXhjLT5hcmdzLS07CiAKLSAgICAgIHBvaW50ID0gKEZUX1VTaG9ydClDVVIuc3RhY2tbQ1VSLmFyZ3NdOworICAgICAgcG9pbnQgPSAoRlRfVVNob3J0KWV4Yy0+c3RhY2tbZXhjLT5hcmdzXTsKIAotICAgICAgaWYgKCBCT1VORFMoIHBvaW50LCBDVVIuenAxLm5fcG9pbnRzICkgKQorICAgICAgaWYgKCBCT1VORFMoIHBvaW50LCBleGMtPnpwMS5uX3BvaW50cyApICkKICAgICAgIHsKLSAgICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApCisgICAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKICAgICAgICAgewotICAgICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgZGlzdGFuY2UgPSBDVVJfRnVuY19wcm9qZWN0KCBDVVIuenAxLmN1ciArIHBvaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUi56cDAuY3VyICsgQ1VSLkdTLnJwMCApOworICAgICAgICBkaXN0YW5jZSA9IFBST0pFQ1QoIGV4Yy0+enAxLmN1ciArIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+enAwLmN1ciArIGV4Yy0+R1MucnAwICk7CiAKLSAgICAgICAgQ1VSX0Z1bmNfbW92ZSggJkNVUi56cDEsIHBvaW50LCAtZGlzdGFuY2UgKTsKKyAgICAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAxLCBwb2ludCwgLWRpc3RhbmNlICk7CiAgICAgICB9CiAKLSAgICAgIENVUi5HUy5sb29wLS07CisgICAgICBleGMtPkdTLmxvb3AtLTsKICAgICB9CiAKICAgRmFpbDoKLSAgICBDVVIuR1MubG9vcCA9IDE7Ci0gICAgQ1VSLm5ld190b3AgPSBDVVIuYXJnczsKKyAgICBleGMtPkdTLmxvb3AgPSAxOworICAgIGV4Yy0+bmV3X3RvcCA9IGV4Yy0+YXJnczsKICAgfQogCiAKQEAgLTY5MDIsNyArNjQ0OCw4IEBACiAgIC8qIFN0YWNrOiAgICAgICAgNSAqIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX0lTRUNUKCBJTlNfQVJHICkKKyAgSW5zX0lTRUNUKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewogICAgIEZUX1VTaG9ydCAgIHBvaW50LAogICAgICAgICAgICAgICAgIGEwLCBhMSwKQEAgLTY5MjYsMjkgKzY0NzMsMjcgQEAKICAgICBiMCA9IChGVF9VU2hvcnQpYXJnc1szXTsKICAgICBiMSA9IChGVF9VU2hvcnQpYXJnc1s0XTsKIAotICAgIGlmICggQk9VTkRTKCBiMCwgQ1VSLnpwMC5uX3BvaW50cyApICB8fAotICAgICAgICAgQk9VTkRTKCBiMSwgQ1VSLnpwMC5uX3BvaW50cyApICB8fAotICAgICAgICAgQk9VTkRTKCBhMCwgQ1VSLnpwMS5uX3BvaW50cyApICB8fAotICAgICAgICAgQk9VTkRTKCBhMSwgQ1VSLnpwMS5uX3BvaW50cyApICB8fAotICAgICAgICAgQk9VTkRTKCBwb2ludCwgQ1VSLnpwMi5uX3BvaW50cyApICkKKyAgICBpZiAoIEJPVU5EUyggYjAsICAgIGV4Yy0+enAwLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EUyggYjEsICAgIGV4Yy0+enAwLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EUyggYTAsICAgIGV4Yy0+enAxLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EUyggYTEsICAgIGV4Yy0+enAxLm5fcG9pbnRzICkgfHwKKyAgICAgICAgIEJPVU5EUyggcG9pbnQsIGV4Yy0+enAyLm5fcG9pbnRzICkgKQogICAgIHsKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8qIENyYW1lcidzIHJ1bGUgKi8KIAotICAgIGRieCA9IENVUi56cDAuY3VyW2IxXS54IC0gQ1VSLnpwMC5jdXJbYjBdLng7Ci0gICAgZGJ5ID0gQ1VSLnpwMC5jdXJbYjFdLnkgLSBDVVIuenAwLmN1cltiMF0ueTsKKyAgICBkYnggPSBleGMtPnpwMC5jdXJbYjFdLnggLSBleGMtPnpwMC5jdXJbYjBdLng7CisgICAgZGJ5ID0gZXhjLT56cDAuY3VyW2IxXS55IC0gZXhjLT56cDAuY3VyW2IwXS55OwogCi0gICAgZGF4ID0gQ1VSLnpwMS5jdXJbYTFdLnggLSBDVVIuenAxLmN1clthMF0ueDsKLSAgICBkYXkgPSBDVVIuenAxLmN1clthMV0ueSAtIENVUi56cDEuY3VyW2EwXS55OworICAgIGRheCA9IGV4Yy0+enAxLmN1clthMV0ueCAtIGV4Yy0+enAxLmN1clthMF0ueDsKKyAgICBkYXkgPSBleGMtPnpwMS5jdXJbYTFdLnkgLSBleGMtPnpwMS5jdXJbYTBdLnk7CiAKLSAgICBkeCA9IENVUi56cDAuY3VyW2IwXS54IC0gQ1VSLnpwMS5jdXJbYTBdLng7Ci0gICAgZHkgPSBDVVIuenAwLmN1cltiMF0ueSAtIENVUi56cDEuY3VyW2EwXS55OwotCi0gICAgQ1VSLnpwMi50YWdzW3BvaW50XSB8PSBGVF9DVVJWRV9UQUdfVE9VQ0hfQk9USDsKKyAgICBkeCA9IGV4Yy0+enAwLmN1cltiMF0ueCAtIGV4Yy0+enAxLmN1clthMF0ueDsKKyAgICBkeSA9IGV4Yy0+enAwLmN1cltiMF0ueSAtIGV4Yy0+enAxLmN1clthMF0ueTsKIAogICAgIGRpc2NyaW1pbmFudCA9IEZUX011bERpdiggZGF4LCAtZGJ5LCAweDQwICkgKwogICAgICAgICAgICAgICAgICAgIEZUX011bERpdiggZGF5LCBkYngsIDB4NDAgKTsKQEAgLTY5NzAsMjIgKzY1MTUsMjQgQEAKICAgICAgIFIueCA9IEZUX011bERpdiggdmFsLCBkYXgsIGRpc2NyaW1pbmFudCApOwogICAgICAgUi55ID0gRlRfTXVsRGl2KCB2YWwsIGRheSwgZGlzY3JpbWluYW50ICk7CiAKLSAgICAgIENVUi56cDIuY3VyW3BvaW50XS54ID0gQ1VSLnpwMS5jdXJbYTBdLnggKyBSLng7Ci0gICAgICBDVVIuenAyLmN1cltwb2ludF0ueSA9IENVUi56cDEuY3VyW2EwXS55ICsgUi55OworICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS54ID0gZXhjLT56cDEuY3VyW2EwXS54ICsgUi54OworICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS55ID0gZXhjLT56cDEuY3VyW2EwXS55ICsgUi55OwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgLyogZWxzZSwgdGFrZSB0aGUgbWlkZGxlIG9mIHRoZSBtaWRkbGVzIG9mIEEgYW5kIEIgKi8KIAotICAgICAgQ1VSLnpwMi5jdXJbcG9pbnRdLnggPSAoIENVUi56cDEuY3VyW2EwXS54ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVIuenAxLmN1clthMV0ueCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSLnpwMC5jdXJbYjBdLnggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUi56cDAuY3VyW2IxXS54ICkgLyA0OwotICAgICAgQ1VSLnpwMi5jdXJbcG9pbnRdLnkgPSAoIENVUi56cDEuY3VyW2EwXS55ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVIuenAxLmN1clthMV0ueSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSLnpwMC5jdXJbYjBdLnkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUi56cDAuY3VyW2IxXS55ICkgLyA0OworICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS54ID0gKCBleGMtPnpwMS5jdXJbYTBdLnggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMS5jdXJbYTFdLnggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMC5jdXJbYjBdLnggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMC5jdXJbYjFdLnggKSAvIDQ7CisgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnkgPSAoIGV4Yy0+enAxLmN1clthMF0ueSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+enAxLmN1clthMV0ueSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+enAwLmN1cltiMF0ueSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+enAwLmN1cltiMV0ueSApIC8gNDsKICAgICB9CisKKyAgICBleGMtPnpwMi50YWdzW3BvaW50XSB8PSBGVF9DVVJWRV9UQUdfVE9VQ0hfQk9USDsKICAgfQogCiAKQEAgLTY5OTYsNyArNjU0Myw4IEBACiAgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX0FMSUdOUFRTKCBJTlNfQVJHICkKKyAgSW5zX0FMSUdOUFRTKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewogICAgIEZUX1VTaG9ydCAgIHAxLCBwMjsKICAgICBGVF9GMjZEb3Q2ICBkaXN0YW5jZTsKQEAgLTcwMDUsMTkgKzY1NTMsMTggQEAKICAgICBwMSA9IChGVF9VU2hvcnQpYXJnc1swXTsKICAgICBwMiA9IChGVF9VU2hvcnQpYXJnc1sxXTsKIAotICAgIGlmICggQk9VTkRTKCBwMSwgQ1VSLnpwMS5uX3BvaW50cyApIHx8Ci0gICAgICAgICBCT1VORFMoIHAyLCBDVVIuenAwLm5fcG9pbnRzICkgKQorICAgIGlmICggQk9VTkRTKCBwMSwgZXhjLT56cDEubl9wb2ludHMgKSB8fAorICAgICAgICAgQk9VTkRTKCBwMiwgZXhjLT56cDAubl9wb2ludHMgKSApCiAgICAgewotICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApCi0gICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CiAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZGlzdGFuY2UgPSBDVVJfRnVuY19wcm9qZWN0KCBDVVIuenAwLmN1ciArIHAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSLnpwMS5jdXIgKyBwMSApIC8gMjsKKyAgICBkaXN0YW5jZSA9IFBST0pFQ1QoIGV4Yy0+enAwLmN1ciArIHAyLCBleGMtPnpwMS5jdXIgKyBwMSApIC8gMjsKIAotICAgIENVUl9GdW5jX21vdmUoICZDVVIuenAxLCBwMSwgZGlzdGFuY2UgKTsKLSAgICBDVVJfRnVuY19tb3ZlKCAmQ1VSLnpwMCwgcDIsIC1kaXN0YW5jZSApOworICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMSwgcDEsIGRpc3RhbmNlICk7CisgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBwMiwgLWRpc3RhbmNlICk7CiAgIH0KIAogCkBAIC03MDMxLDUwICs2NTc4LDQ4IEBACiAgIC8qIFNPTUVUSU1FUywgRFVNQkVSIENPREUgSVMgQkVUVEVSIENPREUgKi8KIAogICBzdGF0aWMgdm9pZAotICBJbnNfSVAoIElOU19BUkcgKQorICBJbnNfSVAoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7CiAgICAgRlRfRjI2RG90NiAgb2xkX3JhbmdlLCBjdXJfcmFuZ2U7CiAgICAgRlRfVmVjdG9yKiAgb3J1c19iYXNlOwogICAgIEZUX1ZlY3RvciogIGN1cl9iYXNlOwogICAgIEZUX0ludCAgICAgIHR3aWxpZ2h0OwogCi0gICAgRlRfVU5VU0VEX0FSRzsKIAotCi0gICAgaWYgKCBDVVIudG9wIDwgQ1VSLkdTLmxvb3AgKQorICAgIGlmICggZXhjLT50b3AgPCBleGMtPkdTLmxvb3AgKQogICAgIHsKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgZ290byBGYWlsOwogICAgIH0KIAogICAgIC8qCiAgICAgICogV2UgbmVlZCB0byBkZWFsIGluIGEgc3BlY2lhbCB3YXkgd2l0aCB0aGUgdHdpbGlnaHQgem9uZS4KLSAgICAgKiBPdGhlcndpc2UsIGJ5IGRlZmluaXRpb24sIHRoZSB2YWx1ZSBvZiBDVVIudHdpbGlnaHQub3J1c1tuXSBpcyAoMCwwKSwKKyAgICAgKiBPdGhlcndpc2UsIGJ5IGRlZmluaXRpb24sIHRoZSB2YWx1ZSBvZiBleGMtPnR3aWxpZ2h0Lm9ydXNbbl0gaXMgKDAsMCksCiAgICAgICogZm9yIGV2ZXJ5IG4uCiAgICAgICovCi0gICAgdHdpbGlnaHQgPSBDVVIuR1MuZ2VwMCA9PSAwIHx8IENVUi5HUy5nZXAxID09IDAgfHwgQ1VSLkdTLmdlcDIgPT0gMDsKKyAgICB0d2lsaWdodCA9IGV4Yy0+R1MuZ2VwMCA9PSAwIHx8IGV4Yy0+R1MuZ2VwMSA9PSAwIHx8IGV4Yy0+R1MuZ2VwMiA9PSAwOwogCi0gICAgaWYgKCBCT1VORFMoIENVUi5HUy5ycDEsIENVUi56cDAubl9wb2ludHMgKSApCisgICAgaWYgKCBCT1VORFMoIGV4Yy0+R1MucnAxLCBleGMtPnpwMC5uX3BvaW50cyApICkKICAgICB7Ci0gICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKICAgICAgIGdvdG8gRmFpbDsKICAgICB9CiAKICAgICBpZiAoIHR3aWxpZ2h0ICkKLSAgICAgIG9ydXNfYmFzZSA9ICZDVVIuenAwLm9yZ1tDVVIuR1MucnAxXTsKKyAgICAgIG9ydXNfYmFzZSA9ICZleGMtPnpwMC5vcmdbZXhjLT5HUy5ycDFdOwogICAgIGVsc2UKLSAgICAgIG9ydXNfYmFzZSA9ICZDVVIuenAwLm9ydXNbQ1VSLkdTLnJwMV07CisgICAgICBvcnVzX2Jhc2UgPSAmZXhjLT56cDAub3J1c1tleGMtPkdTLnJwMV07CiAKLSAgICBjdXJfYmFzZSA9ICZDVVIuenAwLmN1cltDVVIuR1MucnAxXTsKKyAgICBjdXJfYmFzZSA9ICZleGMtPnpwMC5jdXJbZXhjLT5HUy5ycDFdOwogCiAgICAgLyogWFhYOiBUaGVyZSBhcmUgc29tZSBnbHlwaHMgaW4gc29tZSBicmFpbmRlYWQgYnV0IHBvcHVsYXIgKi8KICAgICAvKiAgICAgIGZvbnRzIG91dCB0aGVyZSAoZS5nLiBbYWV1XWdyYXZlIGluIG1vbm90eXBlLnR0ZikgICAqLwogICAgIC8qICAgICAgY2FsbGluZyBJUFtdIHdpdGggYmFkIHZhbHVlcyBvZiBycFsxMl0uICAgICAgICAgICAgICovCiAgICAgLyogICAgICBEbyBzb21ldGhpbmcgc2FuZSB3aGVuIHRoaXMgb2RkIHRoaW5nIGhhcHBlbnMuICAgICAgKi8KLSAgICBpZiAoIEJPVU5EUyggQ1VSLkdTLnJwMSwgQ1VSLnpwMC5uX3BvaW50cyApIHx8Ci0gICAgICAgICBCT1VORFMoIENVUi5HUy5ycDIsIENVUi56cDEubl9wb2ludHMgKSApCisgICAgaWYgKCBCT1VORFMoIGV4Yy0+R1MucnAxLCBleGMtPnpwMC5uX3BvaW50cyApIHx8CisgICAgICAgICBCT1VORFMoIGV4Yy0+R1MucnAyLCBleGMtPnpwMS5uX3BvaW50cyApICkKICAgICB7CiAgICAgICBvbGRfcmFuZ2UgPSAwOwogICAgICAgY3VyX3JhbmdlID0gMDsKQEAgLTcwODIsNjIgKzY2MjcsNjAgQEAKICAgICBlbHNlCiAgICAgewogICAgICAgaWYgKCB0d2lsaWdodCApCi0gICAgICAgIG9sZF9yYW5nZSA9IENVUl9GdW5jX2R1YWxwcm9qKCAmQ1VSLnpwMS5vcmdbQ1VSLkdTLnJwMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnVzX2Jhc2UgKTsKLSAgICAgIGVsc2UgaWYgKCBDVVIubWV0cmljcy54X3NjYWxlID09IENVUi5tZXRyaWNzLnlfc2NhbGUgKQotICAgICAgICBvbGRfcmFuZ2UgPSBDVVJfRnVuY19kdWFscHJvaiggJkNVUi56cDEub3J1c1tDVVIuR1MucnAyXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ydXNfYmFzZSApOworICAgICAgICBvbGRfcmFuZ2UgPSBEVUFMUFJPSiggJmV4Yy0+enAxLm9yZ1tleGMtPkdTLnJwMl0sIG9ydXNfYmFzZSApOworICAgICAgZWxzZSBpZiAoIGV4Yy0+bWV0cmljcy54X3NjYWxlID09IGV4Yy0+bWV0cmljcy55X3NjYWxlICkKKyAgICAgICAgb2xkX3JhbmdlID0gRFVBTFBST0ooICZleGMtPnpwMS5vcnVzW2V4Yy0+R1MucnAyXSwgb3J1c19iYXNlICk7CiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIEZUX1ZlY3RvciAgdmVjOwogCiAKLSAgICAgICAgdmVjLnggPSBGVF9NdWxGaXgoIENVUi56cDEub3J1c1tDVVIuR1MucnAyXS54IC0gb3J1c19iYXNlLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSLm1ldHJpY3MueF9zY2FsZSApOwotICAgICAgICB2ZWMueSA9IEZUX011bEZpeCggQ1VSLnpwMS5vcnVzW0NVUi5HUy5ycDJdLnkgLSBvcnVzX2Jhc2UtPnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDVVIubWV0cmljcy55X3NjYWxlICk7CisgICAgICAgIHZlYy54ID0gRlRfTXVsRml4KCBleGMtPnpwMS5vcnVzW2V4Yy0+R1MucnAyXS54IC0gb3J1c19iYXNlLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5tZXRyaWNzLnhfc2NhbGUgKTsKKyAgICAgICAgdmVjLnkgPSBGVF9NdWxGaXgoIGV4Yy0+enAxLm9ydXNbZXhjLT5HUy5ycDJdLnkgLSBvcnVzX2Jhc2UtPnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPm1ldHJpY3MueV9zY2FsZSApOwogCi0gICAgICAgIG9sZF9yYW5nZSA9IENVUl9mYXN0X2R1YWxwcm9qKCAmdmVjICk7CisgICAgICAgIG9sZF9yYW5nZSA9IEZBU1RfRFVBTFBST0ooICZ2ZWMgKTsKICAgICAgIH0KIAotICAgICAgY3VyX3JhbmdlID0gQ1VSX0Z1bmNfcHJvamVjdCAoICZDVVIuenAxLmN1cltDVVIuR1MucnAyXSwgY3VyX2Jhc2UgKTsKKyAgICAgIGN1cl9yYW5nZSA9IFBST0pFQ1QoICZleGMtPnpwMS5jdXJbZXhjLT5HUy5ycDJdLCBjdXJfYmFzZSApOwogICAgIH0KIAotICAgIGZvciAoIDsgQ1VSLkdTLmxvb3AgPiAwOyAtLUNVUi5HUy5sb29wICkKKyAgICBmb3IgKCA7IGV4Yy0+R1MubG9vcCA+IDA7IC0tZXhjLT5HUy5sb29wICkKICAgICB7Ci0gICAgICBGVF9VSW50ICAgICBwb2ludCA9IChGVF9VSW50KUNVUi5zdGFja1stLUNVUi5hcmdzXTsKKyAgICAgIEZUX1VJbnQgICAgIHBvaW50ID0gKEZUX1VJbnQpZXhjLT5zdGFja1stLWV4Yy0+YXJnc107CiAgICAgICBGVF9GMjZEb3Q2ICBvcmdfZGlzdCwgY3VyX2Rpc3QsIG5ld19kaXN0OwogCiAKICAgICAgIC8qIGNoZWNrIHBvaW50IGJvdW5kcyAqLwotICAgICAgaWYgKCBCT1VORFMoIHBvaW50LCBDVVIuenAyLm5fcG9pbnRzICkgKQorICAgICAgaWYgKCBCT1VORFMoIHBvaW50LCBleGMtPnpwMi5uX3BvaW50cyApICkKICAgICAgIHsKLSAgICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApCisgICAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKICAgICAgICAgewotICAgICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAKICAgICAgIGlmICggdHdpbGlnaHQgKQotICAgICAgICBvcmdfZGlzdCA9IENVUl9GdW5jX2R1YWxwcm9qKCAmQ1VSLnpwMi5vcmdbcG9pbnRdLCBvcnVzX2Jhc2UgKTsKLSAgICAgIGVsc2UgaWYgKCBDVVIubWV0cmljcy54X3NjYWxlID09IENVUi5tZXRyaWNzLnlfc2NhbGUgKQotICAgICAgICBvcmdfZGlzdCA9IENVUl9GdW5jX2R1YWxwcm9qKCAmQ1VSLnpwMi5vcnVzW3BvaW50XSwgb3J1c19iYXNlICk7CisgICAgICAgIG9yZ19kaXN0ID0gRFVBTFBST0ooICZleGMtPnpwMi5vcmdbcG9pbnRdLCBvcnVzX2Jhc2UgKTsKKyAgICAgIGVsc2UgaWYgKCBleGMtPm1ldHJpY3MueF9zY2FsZSA9PSBleGMtPm1ldHJpY3MueV9zY2FsZSApCisgICAgICAgIG9yZ19kaXN0ID0gRFVBTFBST0ooICZleGMtPnpwMi5vcnVzW3BvaW50XSwgb3J1c19iYXNlICk7CiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIEZUX1ZlY3RvciAgdmVjOwogCiAKLSAgICAgICAgdmVjLnggPSBGVF9NdWxGaXgoIENVUi56cDIub3J1c1twb2ludF0ueCAtIG9ydXNfYmFzZS0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUi5tZXRyaWNzLnhfc2NhbGUgKTsKLSAgICAgICAgdmVjLnkgPSBGVF9NdWxGaXgoIENVUi56cDIub3J1c1twb2ludF0ueSAtIG9ydXNfYmFzZS0+eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUi5tZXRyaWNzLnlfc2NhbGUgKTsKKyAgICAgICAgdmVjLnggPSBGVF9NdWxGaXgoIGV4Yy0+enAyLm9ydXNbcG9pbnRdLnggLSBvcnVzX2Jhc2UtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPm1ldHJpY3MueF9zY2FsZSApOworICAgICAgICB2ZWMueSA9IEZUX011bEZpeCggZXhjLT56cDIub3J1c1twb2ludF0ueSAtIG9ydXNfYmFzZS0+eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+bWV0cmljcy55X3NjYWxlICk7CiAKLSAgICAgICAgb3JnX2Rpc3QgPSBDVVJfZmFzdF9kdWFscHJvaiggJnZlYyApOworICAgICAgICBvcmdfZGlzdCA9IEZBU1RfRFVBTFBST0ooICZ2ZWMgKTsKICAgICAgIH0KIAotICAgICAgY3VyX2Rpc3QgPSBDVVJfRnVuY19wcm9qZWN0KCAmQ1VSLnpwMi5jdXJbcG9pbnRdLCBjdXJfYmFzZSApOworICAgICAgY3VyX2Rpc3QgPSBQUk9KRUNUKCAmZXhjLT56cDIuY3VyW3BvaW50XSwgY3VyX2Jhc2UgKTsKIAogICAgICAgaWYgKCBvcmdfZGlzdCApCiAgICAgICB7CkBAIC03MTY3LDEyICs2NzEwLDE1IEBACiAgICAgICBlbHNlCiAgICAgICAgIG5ld19kaXN0ID0gMDsKIAotICAgICAgQ1VSX0Z1bmNfbW92ZSggJkNVUi56cDIsIChGVF9VU2hvcnQpcG9pbnQsIG5ld19kaXN0IC0gY3VyX2Rpc3QgKTsKKyAgICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsCisgICAgICAgICAgICAgICAgICAgICAgJmV4Yy0+enAyLAorICAgICAgICAgICAgICAgICAgICAgIChGVF9VU2hvcnQpcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgbmV3X2Rpc3QgLSBjdXJfZGlzdCApOwogICAgIH0KIAogICBGYWlsOgotICAgIENVUi5HUy5sb29wID0gMTsKLSAgICBDVVIubmV3X3RvcCA9IENVUi5hcmdzOworICAgIGV4Yy0+R1MubG9vcCA9IDE7CisgICAgZXhjLT5uZXdfdG9wID0gZXhjLT5hcmdzOwogICB9CiAKIApAQCAtNzE4Myw3ICs2NzI5LDggQEAKICAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfVVRQKCBJTlNfQVJHICkKKyAgSW5zX1VUUCggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7CiAgICAgRlRfVVNob3J0ICBwb2ludDsKICAgICBGVF9CeXRlICAgIG1hc2s7CkBAIC03MTkxLDIyICs2NzM4LDIyIEBACiAKICAgICBwb2ludCA9IChGVF9VU2hvcnQpYXJnc1swXTsKIAotICAgIGlmICggQk9VTkRTKCBwb2ludCwgQ1VSLnpwMC5uX3BvaW50cyApICkKKyAgICBpZiAoIEJPVU5EUyggcG9pbnQsIGV4Yy0+enAwLm5fcG9pbnRzICkgKQogICAgIHsKLSAgICAgIGlmICggQ1VSLnBlZGFudGljX2hpbnRpbmcgKQotICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIG1hc2sgPSAweEZGOwogCi0gICAgaWYgKCBDVVIuR1MuZnJlZVZlY3Rvci54ICE9IDAgKQorICAgIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnggIT0gMCApCiAgICAgICBtYXNrICY9IH5GVF9DVVJWRV9UQUdfVE9VQ0hfWDsKIAotICAgIGlmICggQ1VSLkdTLmZyZWVWZWN0b3IueSAhPSAwICkKKyAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKQogICAgICAgbWFzayAmPSB+RlRfQ1VSVkVfVEFHX1RPVUNIX1k7CiAKLSAgICBDVVIuenAwLnRhZ3NbcG9pbnRdICY9IG1hc2s7CisgICAgZXhjLT56cDAudGFnc1twb2ludF0gJj0gbWFzazsKICAgfQogCiAKQEAgLTcyNTEsNyArNjc5OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICByZWYyICkKICAgewogICAgIEZUX1VJbnQgICAgIGk7Ci0gICAgRlRfRjI2RG90NiAgb3J1czEsIG9ydXMyLCBvcmcxLCBvcmcyLCBkZWx0YTEsIGRlbHRhMjsKKyAgICBGVF9GMjZEb3Q2ICBvcnVzMSwgb3J1czIsIG9yZzEsIG9yZzIsIGN1cjEsIGN1cjIsIGRlbHRhMSwgZGVsdGEyOwogCiAKICAgICBpZiAoIHAxID4gcDIgKQpAQCAtNzI4MSwxMiArNjgyOCwxNSBAQAogCiAgICAgb3JnMSAgID0gd29ya2VyLT5vcmdzW3JlZjFdLng7CiAgICAgb3JnMiAgID0gd29ya2VyLT5vcmdzW3JlZjJdLng7Ci0gICAgZGVsdGExID0gd29ya2VyLT5jdXJzW3JlZjFdLnggLSBvcmcxOwotICAgIGRlbHRhMiA9IHdvcmtlci0+Y3Vyc1tyZWYyXS54IC0gb3JnMjsKKyAgICBjdXIxICAgPSB3b3JrZXItPmN1cnNbcmVmMV0ueDsKKyAgICBjdXIyICAgPSB3b3JrZXItPmN1cnNbcmVmMl0ueDsKKyAgICBkZWx0YTEgPSBjdXIxIC0gb3JnMTsKKyAgICBkZWx0YTIgPSBjdXIyIC0gb3JnMjsKIAotICAgIGlmICggb3J1czEgPT0gb3J1czIgKQorICAgIGlmICggY3VyMSA9PSBjdXIyIHx8IG9ydXMxID09IG9ydXMyICkKICAgICB7Ci0gICAgICAvKiBzaW1wbGUgc2hpZnQgb2YgdW50b3VjaGVkIHBvaW50cyAqLworCisgICAgICAvKiB0cml2aWFsIHNuYXAgb3Igc2hpZnQgb2YgdW50b3VjaGVkIHBvaW50cyAqLwogICAgICAgZm9yICggaSA9IHAxOyBpIDw9IHAyOyBpKysgKQogICAgICAgewogICAgICAgICBGVF9GMjZEb3Q2ICB4ID0gd29ya2VyLT5vcmdzW2ldLng7CkBAIC03Mjk0LDkgKzY4NDQsMTMgQEAKIAogICAgICAgICBpZiAoIHggPD0gb3JnMSApCiAgICAgICAgICAgeCArPSBkZWx0YTE7Ci0gICAgICAgIGVsc2UKKworICAgICAgICBlbHNlIGlmICggeCA+PSBvcmcyICkKICAgICAgICAgICB4ICs9IGRlbHRhMjsKIAorICAgICAgICBlbHNlCisgICAgICAgICAgeCA9IGN1cjE7CisKICAgICAgICAgd29ya2VyLT5jdXJzW2ldLnggPSB4OwogICAgICAgfQogICAgIH0KQEAgLTczMjMsMTIgKzY4NzcsMTAgQEAKICAgICAgICAgICBpZiAoICFzY2FsZV92YWxpZCApCiAgICAgICAgICAgewogICAgICAgICAgICAgc2NhbGVfdmFsaWQgPSAxOwotICAgICAgICAgICAgc2NhbGUgICAgICAgPSBGVF9EaXZGaXgoIG9yZzIgKyBkZWx0YTIgLSAoIG9yZzEgKyBkZWx0YTEgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnVzMiAtIG9ydXMxICk7CisgICAgICAgICAgICBzY2FsZSAgICAgICA9IEZUX0RpdkZpeCggY3VyMiAtIGN1cjEsIG9ydXMyIC0gb3J1czEgKTsKICAgICAgICAgICB9CiAKLSAgICAgICAgICB4ID0gKCBvcmcxICsgZGVsdGExICkgKwotICAgICAgICAgICAgICBGVF9NdWxGaXgoIHdvcmtlci0+b3J1c1tpXS54IC0gb3J1czEsIHNjYWxlICk7CisgICAgICAgICAgeCA9IGN1cjEgKyBGVF9NdWxGaXgoIHdvcmtlci0+b3J1c1tpXS54IC0gb3J1czEsIHNjYWxlICk7CiAgICAgICAgIH0KICAgICAgICAgd29ya2VyLT5jdXJzW2ldLnggPSB4OwogICAgICAgfQpAQCAtNzM0Myw3ICs2ODk1LDcgQEAKICAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfSVVQKCBJTlNfQVJHICkKKyAgSW5zX0lVUCggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKICAgICBJVVBfV29ya2VyUmVjICBWOwogICAgIEZUX0J5dGUgICAgICAgIG1hc2s7CkBAIC03MzU3LDUxICs2OTA5LDQ5IEBACiAgICAgRlRfVUludCAgIHBvaW50OyAgICAgICAgIC8qIGN1cnJlbnQgcG9pbnQgICAqLwogICAgIEZUX1Nob3J0ICBjb250b3VyOyAgICAgICAvKiBjdXJyZW50IGNvbnRvdXIgKi8KIAotICAgIEZUX1VOVVNFRF9BUkc7Ci0KIAogICAgIC8qIGlnbm9yZSBlbXB0eSBvdXRsaW5lcyAqLwotICAgIGlmICggQ1VSLnB0cy5uX2NvbnRvdXJzID09IDAgKQorICAgIGlmICggZXhjLT5wdHMubl9jb250b3VycyA9PSAwICkKICAgICAgIHJldHVybjsKIAotICAgIGlmICggQ1VSLm9wY29kZSAmIDEgKQorICAgIGlmICggZXhjLT5vcGNvZGUgJiAxICkKICAgICB7CiAgICAgICBtYXNrICAgPSBGVF9DVVJWRV9UQUdfVE9VQ0hfWDsKLSAgICAgIFYub3JncyA9IENVUi5wdHMub3JnOwotICAgICAgVi5jdXJzID0gQ1VSLnB0cy5jdXI7Ci0gICAgICBWLm9ydXMgPSBDVVIucHRzLm9ydXM7CisgICAgICBWLm9yZ3MgPSBleGMtPnB0cy5vcmc7CisgICAgICBWLmN1cnMgPSBleGMtPnB0cy5jdXI7CisgICAgICBWLm9ydXMgPSBleGMtPnB0cy5vcnVzOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgbWFzayAgID0gRlRfQ1VSVkVfVEFHX1RPVUNIX1k7Ci0gICAgICBWLm9yZ3MgPSAoRlRfVmVjdG9yKikoIChGVF9Qb3MqKUNVUi5wdHMub3JnICsgMSApOwotICAgICAgVi5jdXJzID0gKEZUX1ZlY3RvciopKCAoRlRfUG9zKilDVVIucHRzLmN1ciArIDEgKTsKLSAgICAgIFYub3J1cyA9IChGVF9WZWN0b3IqKSggKEZUX1BvcyopQ1VSLnB0cy5vcnVzICsgMSApOworICAgICAgVi5vcmdzID0gKEZUX1ZlY3RvciopKCAoRlRfUG9zKilleGMtPnB0cy5vcmcgKyAxICk7CisgICAgICBWLmN1cnMgPSAoRlRfVmVjdG9yKikoIChGVF9Qb3MqKWV4Yy0+cHRzLmN1ciArIDEgKTsKKyAgICAgIFYub3J1cyA9IChGVF9WZWN0b3IqKSggKEZUX1BvcyopZXhjLT5wdHMub3J1cyArIDEgKTsKICAgICB9Ci0gICAgVi5tYXhfcG9pbnRzID0gQ1VSLnB0cy5uX3BvaW50czsKKyAgICBWLm1heF9wb2ludHMgPSBleGMtPnB0cy5uX3BvaW50czsKIAogICAgIGNvbnRvdXIgPSAwOwogICAgIHBvaW50ICAgPSAwOwogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAmJgotICAgICAgICAgQ1VSLmlnbm9yZV94X21vZGUgKQorICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICYmCisgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgKQogICAgIHsKLSAgICAgIENVUi5pdXBfY2FsbGVkID0gVFJVRTsKLSAgICAgIGlmICggQ1VSLnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19TS0lQX0lVUCApCisgICAgICBleGMtPml1cF9jYWxsZWQgPSBUUlVFOworICAgICAgaWYgKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19TS0lQX0lVUCApCiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCiAKICAgICBkbwogICAgIHsKLSAgICAgIGVuZF9wb2ludCAgID0gQ1VSLnB0cy5jb250b3Vyc1tjb250b3VyXSAtIENVUi5wdHMuZmlyc3RfcG9pbnQ7CisgICAgICBlbmRfcG9pbnQgICA9IGV4Yy0+cHRzLmNvbnRvdXJzW2NvbnRvdXJdIC0gZXhjLT5wdHMuZmlyc3RfcG9pbnQ7CiAgICAgICBmaXJzdF9wb2ludCA9IHBvaW50OwogCi0gICAgICBpZiAoIEJPVU5EUyAoIGVuZF9wb2ludCwgQ1VSLnB0cy5uX3BvaW50cyApICkKLSAgICAgICAgZW5kX3BvaW50ID0gQ1VSLnB0cy5uX3BvaW50cyAtIDE7CisgICAgICBpZiAoIEJPVU5EUyggZW5kX3BvaW50LCBleGMtPnB0cy5uX3BvaW50cyApICkKKyAgICAgICAgZW5kX3BvaW50ID0gZXhjLT5wdHMubl9wb2ludHMgLSAxOwogCi0gICAgICB3aGlsZSAoIHBvaW50IDw9IGVuZF9wb2ludCAmJiAoIENVUi5wdHMudGFnc1twb2ludF0gJiBtYXNrICkgPT0gMCApCisgICAgICB3aGlsZSAoIHBvaW50IDw9IGVuZF9wb2ludCAmJiAoIGV4Yy0+cHRzLnRhZ3NbcG9pbnRdICYgbWFzayApID09IDAgKQogICAgICAgICBwb2ludCsrOwogCiAgICAgICBpZiAoIHBvaW50IDw9IGVuZF9wb2ludCApCkBAIC03NDEzLDcgKzY5NjMsNyBAQAogCiAgICAgICAgIHdoaWxlICggcG9pbnQgPD0gZW5kX3BvaW50ICkKICAgICAgICAgewotICAgICAgICAgIGlmICggKCBDVVIucHRzLnRhZ3NbcG9pbnRdICYgbWFzayApICE9IDAgKQorICAgICAgICAgIGlmICggKCBleGMtPnB0cy50YWdzW3BvaW50XSAmIG1hc2sgKSAhPSAwICkKICAgICAgICAgICB7CiAgICAgICAgICAgICBfaXVwX3dvcmtlcl9pbnRlcnBvbGF0ZSggJlYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3RvdWNoZWQgKyAxLApAQCAtNzQ0NSw3ICs2OTk1LDcgQEAKICAgICAgICAgfQogICAgICAgfQogICAgICAgY29udG91cisrOwotICAgIH0gd2hpbGUgKCBjb250b3VyIDwgQ1VSLnB0cy5uX2NvbnRvdXJzICk7CisgICAgfSB3aGlsZSAoIGNvbnRvdXIgPCBleGMtPnB0cy5uX2NvbnRvdXJzICk7CiAgIH0KIAogCkBAIC03NDU2LDcgKzcwMDYsOCBAQAogICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAoMiAqIHVpbnQzMikuLi4gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCi0gIEluc19ERUxUQVAoIElOU19BUkcgKQorICBJbnNfREVMVEFQKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKICAgICBGVF9VTG9uZyAgIG51bXAsIGs7CiAgICAgRlRfVVNob3J0ICBBOwpAQCAtNzQ2Niw1MiArNzAxNyw1MiBAQAogICAgIEZUX1VTaG9ydCAgQjEsIEIyOwogCiAKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIENVUi5pdXBfY2FsbGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICggQ1VSLnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19OT19ERUxUQVBfQUZURVJfSVVQICkgKQorICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPml1cF9jYWxsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19OT19ERUxUQVBfQUZURVJfSVVQICkgKQogICAgICAgZ290byBGYWlsOwogI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLwogCiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwogICAgIC8qIERlbHRhIGhpbnRpbmcgaXMgY292ZXJlZCBieSBVUyBQYXRlbnQgNTE1OTY2OC4gKi8KLSAgICBpZiAoIENVUi5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKQorICAgIGlmICggZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKQogICAgIHsKICAgICAgIEZUX0xvbmcgIG4gPSBhcmdzWzBdICogMjsKIAogCi0gICAgICBpZiAoIENVUi5hcmdzIDwgbiApCisgICAgICBpZiAoIGV4Yy0+YXJncyA8IG4gKQogICAgICAgewotICAgICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggVG9vX0Zld19Bcmd1bWVudHMgKTsKLSAgICAgICAgbiA9IENVUi5hcmdzOworICAgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBUb29fRmV3X0FyZ3VtZW50cyApOworICAgICAgICBuID0gZXhjLT5hcmdzOwogICAgICAgfQogCi0gICAgICBDVVIuYXJncyAtPSBuOwotICAgICAgQ1VSLm5ld190b3AgPSBDVVIuYXJnczsKKyAgICAgIGV4Yy0+YXJncyAtPSBuOworICAgICAgZXhjLT5uZXdfdG9wID0gZXhjLT5hcmdzOwogICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAgUCA9IChGVF9VTG9uZylDVVJfRnVuY19jdXJfcHBlbSgpOworICAgIFAgICAgPSAoRlRfVUxvbmcpZXhjLT5mdW5jX2N1cl9wcGVtKCBleGMgKTsKICAgICBudW1wID0gKEZUX1VMb25nKWFyZ3NbMF07ICAgLyogc29tZSBwb2ludHMgdGhlb3JldGljYWxseSBtYXkgb2NjdXIgbW9yZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIG9uY2UsIHRodXMgVVNob3J0IGlzbid0IGVub3VnaCAqLwogCiAgICAgZm9yICggayA9IDE7IGsgPD0gbnVtcDsgaysrICkKICAgICB7Ci0gICAgICBpZiAoIENVUi5hcmdzIDwgMiApCisgICAgICBpZiAoIGV4Yy0+YXJncyA8IDIgKQogICAgICAgewotICAgICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggVG9vX0Zld19Bcmd1bWVudHMgKTsKLSAgICAgICAgQ1VSLmFyZ3MgPSAwOworICAgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBUb29fRmV3X0FyZ3VtZW50cyApOworICAgICAgICBleGMtPmFyZ3MgPSAwOwogICAgICAgICBnb3RvIEZhaWw7CiAgICAgICB9CiAKLSAgICAgIENVUi5hcmdzIC09IDI7CisgICAgICBleGMtPmFyZ3MgLT0gMjsKIAotICAgICAgQSA9IChGVF9VU2hvcnQpQ1VSLnN0YWNrW0NVUi5hcmdzICsgMV07Ci0gICAgICBCID0gQ1VSLnN0YWNrW0NVUi5hcmdzXTsKKyAgICAgIEEgPSAoRlRfVVNob3J0KWV4Yy0+c3RhY2tbZXhjLT5hcmdzICsgMV07CisgICAgICBCID0gZXhjLT5zdGFja1tleGMtPmFyZ3NdOwogCiAgICAgICAvKiBYWFg6IEJlY2F1c2Ugc29tZSBwb3B1bGFyIGZvbnRzIGNvbnRhaW4gc29tZSBpbnZhbGlkIERlbHRhUCAqLwogICAgICAgLyogICAgICBpbnN0cnVjdGlvbnMsIHdlIHNpbXBseSBpZ25vcmUgdGhlbSB3aGVuIHRoZSBzdGFja2VkICAgKi8KQEAgLTc1MTksMTEgKzcwNzAsMTEgQEAKICAgICAgIC8qICAgICAgZXJyb3IuICBBcyBhIGRlbHRhIGluc3RydWN0aW9uIGRvZXNuJ3QgY2hhbmdlIGEgZ2x5cGggICovCiAgICAgICAvKiAgICAgIGluIGdyZWF0IHdheXMsIHRoaXMgc2hvdWxkbid0IGJlIGEgcHJvYmxlbS4gICAgICAgICAgICAqLwogCi0gICAgICBpZiAoICFCT1VORFMoIEEsIENVUi56cDAubl9wb2ludHMgKSApCisgICAgICBpZiAoICFCT1VORFMoIEEsIGV4Yy0+enAwLm5fcG9pbnRzICkgKQogICAgICAgewogICAgICAgICBDID0gKCAoRlRfVUxvbmcpQiAmIDB4RjAgKSA+PiA0OwogCi0gICAgICAgIHN3aXRjaCAoIENVUi5vcGNvZGUgKQorICAgICAgICBzd2l0Y2ggKCBleGMtPm9wY29kZSApCiAgICAgICAgIHsKICAgICAgICAgY2FzZSAweDVEOgogICAgICAgICAgIGJyZWFrOwpAQCAtNzUzNywxNCArNzA4OCwxNCBAQAogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgQyArPSBDVVIuR1MuZGVsdGFfYmFzZTsKKyAgICAgICAgQyArPSBleGMtPkdTLmRlbHRhX2Jhc2U7CiAKICAgICAgICAgaWYgKCBQID09IEMgKQogICAgICAgICB7CiAgICAgICAgICAgQiA9ICggKEZUX1VMb25nKUIgJiAweEYgKSAtIDg7CiAgICAgICAgICAgaWYgKCBCID49IDAgKQogICAgICAgICAgICAgQisrOwotICAgICAgICAgIEIgKj0gMUwgPDwgKCA2IC0gQ1VSLkdTLmRlbHRhX3NoaWZ0ICk7CisgICAgICAgICAgQiAqPSAxTCA8PCAoIDYgLSBleGMtPkdTLmRlbHRhX3NoaWZ0ICk7CiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKIApAQCAtNzU1OCw2NSArNzEwOSw2NSBAQAogICAgICAgICAgICAgICogIC0gZ2x5cGggaXMgY29tcG9zaXRlIGFuZCBmcmVlZG9tIHZlY3RvciBpcyBub3QgaW4gc3VicGl4ZWwKICAgICAgICAgICAgICAqICAgIGRpcmVjdGlvbi4KICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKCAhQ1VSLmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAgICAgICAgICAgICggQ1VSLnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19BTFdBWVNfRE9fREVMVEFQICkgfHwKLSAgICAgICAgICAgICAgICAgKCBDVVIuaXNfY29tcG9zaXRlICYmIENVUi5HUy5mcmVlVmVjdG9yLnkgIT0gMCApICAgICApCi0gICAgICAgICAgICAgIENVUl9GdW5jX21vdmUoICZDVVIuenAwLCBBLCBCICk7CisgICAgICAgICAgICBpZiAoICFleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfQUxXQVlTX0RPX0RFTFRBUCApIHx8CisgICAgICAgICAgICAgICAgICggZXhjLT5pc19jb21wb3NpdGUgJiYgZXhjLT5HUy5mcmVlVmVjdG9yLnkgIT0gMCApICAgICkKKyAgICAgICAgICAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBBLCBCICk7CiAKICAgICAgICAgICAgIC8qIE90aGVyd2lzZSwgYXBwbHkgc3VicGl4ZWwgaGludGluZyBhbmQgY29tcGF0aWJpbGl0eSBtb2RlICovCiAgICAgICAgICAgICAvKiBydWxlcywgYWx3YXlzIHNraXBwaW5nIGRlbHRhcyBpbiBzdWJwaXhlbCBkaXJlY3Rpb24uICAgICAqLwotICAgICAgICAgICAgZWxzZSBpZiAoIENVUi5pZ25vcmVfeF9tb2RlICYmIENVUi5HUy5mcmVlVmVjdG9yLnkgIT0gMCApCisgICAgICAgICAgICBlbHNlIGlmICggZXhjLT5pZ25vcmVfeF9tb2RlICYmIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAvKiBzYXZlIHRoZSB5IHZhbHVlIG9mIHRoZSBwb2ludCBub3c7IGNvbXBhcmUgYWZ0ZXIgbW92ZSAqLwotICAgICAgICAgICAgICBCMSA9IChGVF9VU2hvcnQpQ1VSLnpwMC5jdXJbQV0ueTsKKyAgICAgICAgICAgICAgQjEgPSAoRlRfVVNob3J0KWV4Yy0+enAwLmN1cltBXS55OwogCiAgICAgICAgICAgICAgIC8qIFN0YW5kYXJkIHN1YnBpeGVsIGhpbnRpbmc6IEFsbG93IHkgbW92ZSBmb3IgeS10b3VjaGVkICovCiAgICAgICAgICAgICAgIC8qIHBvaW50cy4gIFRoaXMgbWVzc2VzIHVwIERlamFWdSAuLi4gICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgIGlmICggIUNVUi5mYWNlLT5zcGhfY29tcGF0aWJpbGl0eV9tb2RlICAgICAgICAgICYmCi0gICAgICAgICAgICAgICAgICAgKCBDVVIuenAwLnRhZ3NbQV0gJiBGVF9DVVJWRV9UQUdfVE9VQ0hfWSApICkKLSAgICAgICAgICAgICAgICBDVVJfRnVuY19tb3ZlKCAmQ1VSLnpwMCwgQSwgQiApOworICAgICAgICAgICAgICBpZiAoICFleGMtPmZhY2UtPnNwaF9jb21wYXRpYmlsaXR5X21vZGUgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAoIGV4Yy0+enAwLnRhZ3NbQV0gJiBGVF9DVVJWRV9UQUdfVE9VQ0hfWSApICkKKyAgICAgICAgICAgICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDAsIEEsIEIgKTsKIAogICAgICAgICAgICAgICAvKiBjb21wYXRpYmlsaXR5IG1vZGUgKi8KLSAgICAgICAgICAgICAgZWxzZSBpZiAoIENVUi5mYWNlLT5zcGhfY29tcGF0aWJpbGl0eV9tb2RlICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAhKCBDVVIuc3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX0FMV0FZU19TS0lQX0RFTFRBUCApICkKKyAgICAgICAgICAgICAgZWxzZSBpZiAoIGV4Yy0+ZmFjZS0+c3BoX2NvbXBhdGliaWxpdHlfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgICAgICAhKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19BTFdBWVNfU0tJUF9ERUxUQVAgKSApCiAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIENVUi5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfUk9VTkRfTk9OUElYRUxfWV9NT1ZFUyApCisgICAgICAgICAgICAgICAgaWYgKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19ST1VORF9OT05QSVhFTF9ZX01PVkVTICkKICAgICAgICAgICAgICAgICAgIEIgPSBGVF9QSVhfUk9VTkQoIEIxICsgQiApIC0gQjE7CiAKICAgICAgICAgICAgICAgICAvKiBBbGxvdyBkZWx0YSBtb3ZlIGlmIHVzaW5nIHNwaF9jb21wYXRpYmlsaXR5X21vZGUsICAgKi8KICAgICAgICAgICAgICAgICAvKiBJVVAgaGFzIG5vdCBiZWVuIGNhbGxlZCwgYW5kIHBvaW50IGlzIHRvdWNoZWQgb24gWS4gKi8KLSAgICAgICAgICAgICAgICBpZiAoICFDVVIuaXVwX2NhbGxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICAgICAgICAgKCBDVVIuenAwLnRhZ3NbQV0gJiBGVF9DVVJWRV9UQUdfVE9VQ0hfWSApICkKLSAgICAgICAgICAgICAgICAgIENVUl9GdW5jX21vdmUoICZDVVIuenAwLCBBLCBCICk7CisgICAgICAgICAgICAgICAgaWYgKCAhZXhjLT5pdXBfY2FsbGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgICAoIGV4Yy0+enAwLnRhZ3NbQV0gJiBGVF9DVVJWRV9UQUdfVE9VQ0hfWSApICkKKyAgICAgICAgICAgICAgICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMCwgQSwgQiApOwogICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgQjIgPSAoRlRfVVNob3J0KUNVUi56cDAuY3VyW0FdLnk7CisgICAgICAgICAgICAgIEIyID0gKEZUX1VTaG9ydClleGMtPnpwMC5jdXJbQV0ueTsKIAogICAgICAgICAgICAgICAvKiBSZXZlcnNlIHRoaXMgbW92ZSBpZiBpdCByZXN1bHRzIGluIGEgZGlzYWxsb3dlZCBtb3ZlICovCi0gICAgICAgICAgICAgIGlmICggQ1VSLkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgICAgICAgICAoICggQ1VSLmZhY2UtPnNwaF9jb21wYXRpYmlsaXR5X21vZGUgICAgICAgICAgICYmCisgICAgICAgICAgICAgIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAoICggZXhjLT5mYWNlLT5zcGhfY29tcGF0aWJpbGl0eV9tb2RlICAgICAgICAgICYmCiAgICAgICAgICAgICAgICAgICAgICAgICggQjEgJiA2MyApID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICAgICAgICAgICAoIEIyICYgNjMgKSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8fAotICAgICAgICAgICAgICAgICAgICAgKCAoIENVUi5zcGhfdHdlYWtfZmxhZ3MgICAgICAgICAgICAgICAgICAgICYKKyAgICAgICAgICAgICAgICAgICAgICggKCBleGMtPnNwaF90d2Vha19mbGFncyAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgU1BIX1RXRUFLX1NLSVBfTk9OUElYRUxfWV9NT1ZFU19ERUxUQVAgKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAoIEIxICYgNjMgKSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgKCBCMiAmIDYzICkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKSApCi0gICAgICAgICAgICAgICAgQ1VSX0Z1bmNfbW92ZSggJkNVUi56cDAsIEEsIC1CICk7CisgICAgICAgICAgICAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBBLCAtQiApOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCiAKLSAgICAgICAgICAgIENVUl9GdW5jX21vdmUoICZDVVIuenAwLCBBLCBCICk7CisgICAgICAgICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDAsIEEsIEIgKTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZQotICAgICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKICAgICB9CiAKICAgRmFpbDoKLSAgICBDVVIubmV3X3RvcCA9IENVUi5hcmdzOworICAgIGV4Yy0+bmV3X3RvcCA9IGV4Yy0+YXJnczsKICAgfQogCiAKQEAgLTc2MjcsNyArNzE3OCw4IEBACiAgIC8qIFN0YWNrOiAgICAgICAgdWludDMyICgyICogdWludDMyKS4uLiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKLSAgSW5zX0RFTFRBQyggSU5TX0FSRyApCisgIEluc19ERUxUQUMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCisgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewogICAgIEZUX1VMb25nICBudW1wLCBrOwogICAgIEZUX1VMb25nICBBLCBDLCBQOwpAQCAtNzYzNiw0NyArNzE4OCw0NyBAQAogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKICAgICAvKiBEZWx0YSBoaW50aW5nIGlzIGNvdmVyZWQgYnkgVVMgUGF0ZW50IDUxNTk2NjguICovCi0gICAgaWYgKCBDVVIuZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkKKyAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkKICAgICB7CiAgICAgICBGVF9Mb25nICBuID0gYXJnc1swXSAqIDI7CiAKIAotICAgICAgaWYgKCBDVVIuYXJncyA8IG4gKQorICAgICAgaWYgKCBleGMtPmFyZ3MgPCBuICkKICAgICAgIHsKLSAgICAgICAgaWYgKCBDVVIucGVkYW50aWNfaGludGluZyApCi0gICAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIFRvb19GZXdfQXJndW1lbnRzICk7Ci0gICAgICAgIG4gPSBDVVIuYXJnczsKKyAgICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQorICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggVG9vX0Zld19Bcmd1bWVudHMgKTsKKyAgICAgICAgbiA9IGV4Yy0+YXJnczsKICAgICAgIH0KIAotICAgICAgQ1VSLmFyZ3MgLT0gbjsKLSAgICAgIENVUi5uZXdfdG9wID0gQ1VSLmFyZ3M7CisgICAgICBleGMtPmFyZ3MgLT0gbjsKKyAgICAgIGV4Yy0+bmV3X3RvcCA9IGV4Yy0+YXJnczsKICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIFAgPSAoRlRfVUxvbmcpQ1VSX0Z1bmNfY3VyX3BwZW0oKTsKKyAgICBQICAgID0gKEZUX1VMb25nKWV4Yy0+ZnVuY19jdXJfcHBlbSggZXhjICk7CiAgICAgbnVtcCA9IChGVF9VTG9uZylhcmdzWzBdOwogCiAgICAgZm9yICggayA9IDE7IGsgPD0gbnVtcDsgaysrICkKICAgICB7Ci0gICAgICBpZiAoIENVUi5hcmdzIDwgMiApCisgICAgICBpZiAoIGV4Yy0+YXJncyA8IDIgKQogICAgICAgewotICAgICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggVG9vX0Zld19Bcmd1bWVudHMgKTsKLSAgICAgICAgQ1VSLmFyZ3MgPSAwOworICAgICAgICBpZiAoIGV4Yy0+cGVkYW50aWNfaGludGluZyApCisgICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBUb29fRmV3X0FyZ3VtZW50cyApOworICAgICAgICBleGMtPmFyZ3MgPSAwOwogICAgICAgICBnb3RvIEZhaWw7CiAgICAgICB9CiAKLSAgICAgIENVUi5hcmdzIC09IDI7CisgICAgICBleGMtPmFyZ3MgLT0gMjsKIAotICAgICAgQSA9IChGVF9VTG9uZylDVVIuc3RhY2tbQ1VSLmFyZ3MgKyAxXTsKLSAgICAgIEIgPSBDVVIuc3RhY2tbQ1VSLmFyZ3NdOworICAgICAgQSA9IChGVF9VTG9uZylleGMtPnN0YWNrW2V4Yy0+YXJncyArIDFdOworICAgICAgQiA9IGV4Yy0+c3RhY2tbZXhjLT5hcmdzXTsKIAotICAgICAgaWYgKCBCT1VORFNMKCBBLCBDVVIuY3Z0U2l6ZSApICkKKyAgICAgIGlmICggQk9VTkRTTCggQSwgZXhjLT5jdnRTaXplICkgKQogICAgICAgewotICAgICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQogICAgICAgICB7Ci0gICAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfUmVmZXJlbmNlICk7CisgICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgfQpAQCAtNzY4NCw3ICs3MjM2LDcgQEAKICAgICAgIHsKICAgICAgICAgQyA9ICggKEZUX1VMb25nKUIgJiAweEYwICkgPj4gNDsKIAotICAgICAgICBzd2l0Y2ggKCBDVVIub3Bjb2RlICkKKyAgICAgICAgc3dpdGNoICggZXhjLT5vcGNvZGUgKQogICAgICAgICB7CiAgICAgICAgIGNhc2UgMHg3MzoKICAgICAgICAgICBicmVhazsKQEAgLTc2OTgsMjIgKzcyNTAsMjIgQEAKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEMgKz0gQ1VSLkdTLmRlbHRhX2Jhc2U7CisgICAgICAgIEMgKz0gZXhjLT5HUy5kZWx0YV9iYXNlOwogCiAgICAgICAgIGlmICggUCA9PSBDICkKICAgICAgICAgewogICAgICAgICAgIEIgPSAoIChGVF9VTG9uZylCICYgMHhGICkgLSA4OwogICAgICAgICAgIGlmICggQiA+PSAwICkKICAgICAgICAgICAgIEIrKzsKLSAgICAgICAgICBCICo9IDFMIDw8ICggNiAtIENVUi5HUy5kZWx0YV9zaGlmdCApOworICAgICAgICAgIEIgKj0gMUwgPDwgKCA2IC0gZXhjLT5HUy5kZWx0YV9zaGlmdCApOwogCi0gICAgICAgICAgQ1VSX0Z1bmNfbW92ZV9jdnQoIEEsIEIgKTsKKyAgICAgICAgICBleGMtPmZ1bmNfbW92ZV9jdnQoIGV4YywgQSwgQiApOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQogCiAgIEZhaWw6Ci0gICAgQ1VSLm5ld190b3AgPSBDVVIuYXJnczsKKyAgICBleGMtPm5ld190b3AgPSBleGMtPmFyZ3M7CiAgIH0KIAogCkBAIC03NzMwLDggKzcyODIsMTcgQEAKICAgLyogT3Bjb2RlIHJhbmdlOiAweDg4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiB1aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogWFhYOiBVTkRPQ1VNRU5URUQ6IFNlbGVjdG9yIGJpdHMgaGlnaGVyIHRoYW4gOSBhcmUgY3VycmVudGx5IChNYXkgICAgICovCisgIC8qICAgICAgMjAxNSkgbm90IGRvY3VtZW50ZWQgaW4gdGhlIE9wZW5UeXBlIHNwZWNpZmljYXRpb24uICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBTZWxlY3RvciBiaXQgMTEgaXMgaW5jb3JyZWN0bHkgZGVzY3JpYmVkIGFzIGJpdCA4LCB3aGlsZSB0aGUgICAgICovCisgIC8qICAgICAgcmVhbCBtZWFuaW5nIG9mIGJpdCA4ICh2ZXJ0aWNhbCBMQ0Qgc3VicGl4ZWxzKSBzdGF5cyAgICAgICAgICAgICAqLworICAvKiAgICAgIHVuZG9jdW1lbnRlZC4gIFRoZSBzYW1lIG1pc3Rha2UgY2FuIGJlIGZvdW5kIGluIEdyZWcgSGl0Y2hjb2NrJ3MgKi8KKyAgLyogICAgICB3aGl0ZXBhcGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAotICBJbnNfR0VUSU5GTyggSU5TX0FSRyApCisgIEluc19HRVRJTkZPKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7CiAgICAgRlRfTG9uZyAgSzsKIApAQCAtNzc0NCwxMyArNzMwNSwyMCBAQAogICAgIC8qIFNlbGVjdG9yIEJpdDogIDAgICAgICAgICAgICAgKi8KICAgICAvKiBSZXR1cm4gQml0KHMpOiAwLTcgICAgICAgICAgICovCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgJiYKLSAgICAgICAgICggYXJnc1swXSAmIDEgKSAhPSAwICYmCi0gICAgICAgICBDVVIuaWdub3JlX3hfbW9kZSAgICApCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgJiYKKyAgICAgICAgICggYXJnc1swXSAmIDEgKSAhPSAwICAmJgorICAgICAgICAgZXhjLT5zdWJwaXhlbF9oaW50aW5nICkKICAgICB7Ci0gICAgICBLID0gQ1VSLnJhc3Rlcml6ZXJfdmVyc2lvbjsKLSAgICAgIEZUX1RSQUNFNygoICJTZXR0aW5nIHJhc3Rlcml6ZXIgdmVyc2lvbiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgIENVUi5yYXN0ZXJpemVyX3ZlcnNpb24gKSk7CisgICAgICBpZiAoIGV4Yy0+aWdub3JlX3hfbW9kZSApCisgICAgICB7CisgICAgICAgIC8qIGlmIGluIENsZWFyVHlwZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLCAgICAgICAgKi8KKyAgICAgICAgLyogd2Ugc29tZXRpbWVzIGNoYW5nZSB0aGUgVHJ1ZVR5cGUgdmVyc2lvbiBkeW5hbWljYWxseSAqLworICAgICAgICBLID0gZXhjLT5yYXN0ZXJpemVyX3ZlcnNpb247CisgICAgICAgIEZUX1RSQUNFNigoICJTZXR0aW5nIHJhc3Rlcml6ZXIgdmVyc2lvbiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgZXhjLT5yYXN0ZXJpemVyX3ZlcnNpb24gKSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIEsgPSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4OwogICAgIH0KICAgICBlbHNlCiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCkBAIC03NzYyLDcgKzczMzAsNyBAQAogICAgIC8qIFNlbGVjdG9yIEJpdDogIDEgICAgICAgICAgICAgKi8KICAgICAvKiBSZXR1cm4gQml0KHMpOiA4ICAgICAgICAgICAgICovCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGlmICggKCBhcmdzWzBdICYgMiApICE9IDAgJiYgQ1VSLnR0X21ldHJpY3Mucm90YXRlZCApCisgICAgaWYgKCAoIGFyZ3NbMF0gJiAyICkgIT0gMCAmJiBleGMtPnR0X21ldHJpY3Mucm90YXRlZCApCiAgICAgICBLIHw9IDB4ODA7CiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03NzcwLDcgKzczMzgsNyBAQAogICAgIC8qIFNlbGVjdG9yIEJpdDogIDIgICAgICAgICAgICAgKi8KICAgICAvKiBSZXR1cm4gQml0KHMpOiA5ICAgICAgICAgICAgICovCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGlmICggKCBhcmdzWzBdICYgNCApICE9IDAgJiYgQ1VSLnR0X21ldHJpY3Muc3RyZXRjaGVkICkKKyAgICBpZiAoICggYXJnc1swXSAmIDQgKSAhPSAwICYmIGV4Yy0+dHRfbWV0cmljcy5zdHJldGNoZWQgKQogICAgICAgSyB8PSAxIDw8IDg7CiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03Nzc4LDI0ICs3MzQ2LDIzIEBACiAgICAgLyogU2VsZWN0b3IgQml0OiAgNSAgICAgICAgICAgICAqLwogICAgIC8qIFJldHVybiBCaXQocyk6IDEyICAgICAgICAgICAgKi8KICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgaWYgKCAoIGFyZ3NbMF0gJiAzMiApICE9IDAgJiYgQ1VSLmdyYXlzY2FsZSApCisgICAgaWYgKCAoIGFyZ3NbMF0gJiAzMiApICE9IDAgJiYgZXhjLT5ncmF5c2NhbGUgKQogICAgICAgSyB8PSAxIDw8IDEyOwogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCiAKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgQ1VSLmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBDVVIucmFzdGVyaXplcl92ZXJzaW9uID49IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUgKQorICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5yYXN0ZXJpemVyX3ZlcnNpb24gPj0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zNSApCiAgICAgewogCi0gICAgICBpZiAoIENVUi5yYXN0ZXJpemVyX3ZlcnNpb24gPj0gMzcgKQorICAgICAgaWYgKCBleGMtPnJhc3Rlcml6ZXJfdmVyc2lvbiA+PSAzNyApCiAgICAgICB7CiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgICAgLyogSElOVElORyBGT1IgU1VCUElYRUwgICAgICAgICAqLwogICAgICAgICAvKiBTZWxlY3RvciBCaXQ6ICA2ICAgICAgICAgICAgICovCiAgICAgICAgIC8qIFJldHVybiBCaXQocyk6IDEzICAgICAgICAgICAgKi8KICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBpZiAoICggYXJnc1swXSAmIDY0ICkgIT0gMCAmJiBDVVIuc3VicGl4ZWwgKQorICAgICAgICBpZiAoICggYXJnc1swXSAmIDY0ICkgIT0gMCAmJiBleGMtPnN1YnBpeGVsX2hpbnRpbmcgKQogICAgICAgICAgIEsgfD0gMSA8PCAxMzsKIAogICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03ODA0LDE2ICs3MzcxLDE2IEBACiAgICAgICAgIC8qIFJldHVybiBCaXQocyk6IDE0ICAgICAgICAgICAgKi8KICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAvKiBGdW5jdGlvbmFsaXR5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovCi0gICAgICAgIGlmICggKCBhcmdzWzBdICYgMTI4ICkgIT0gMCAmJiBDVVIuY29tcGF0aWJsZV93aWR0aHMgKQorICAgICAgICBpZiAoICggYXJnc1swXSAmIDEyOCApICE9IDAgJiYgZXhjLT5jb21wYXRpYmxlX3dpZHRocyApCiAgICAgICAgICAgSyB8PSAxIDw8IDE0OwogCiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgLyogU1lNTUVUUklDQUwgU01PT1RISU5HICAgICAgICAqLworICAgICAgICAvKiBWRVJUSUNBTCBMQ0QgU1VCUElYRUxTPyAgICAgICovCiAgICAgICAgIC8qIFNlbGVjdG9yIEJpdDogIDggICAgICAgICAgICAgKi8KICAgICAgICAgLyogUmV0dXJuIEJpdChzKTogMTUgICAgICAgICAgICAqLwogICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgIC8qIEZ1bmN0aW9uYWxpdHkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi8KLSAgICAgICAgaWYgKCAoIGFyZ3NbMF0gJiAyNTYgKSAhPSAwICYmIENVUi5zeW1tZXRyaWNhbF9zbW9vdGhpbmcgKQorICAgICAgICBpZiAoICggYXJnc1swXSAmIDI1NiApICE9IDAgJiYgZXhjLT52ZXJ0aWNhbF9sY2QgKQogICAgICAgICAgIEsgfD0gMSA8PCAxNTsKIAogICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03ODIyLDEwICs3Mzg5LDEwIEBACiAgICAgICAgIC8qIFJldHVybiBCaXQocyk6IDE2ICAgICAgICAgICAgKi8KICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAvKiBGdW5jdGlvbmFsaXR5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovCi0gICAgICAgIGlmICggKCBhcmdzWzBdICYgNTEyICkgIT0gMCAmJiBDVVIuYmdyICkKKyAgICAgICAgaWYgKCAoIGFyZ3NbMF0gJiA1MTIgKSAhPSAwICYmIGV4Yy0+YmdyICkKICAgICAgICAgICBLIHw9IDEgPDwgMTY7CiAKLSAgICAgICAgaWYgKCBDVVIucmFzdGVyaXplcl92ZXJzaW9uID49IDM4ICkKKyAgICAgICAgaWYgKCBleGMtPnJhc3Rlcml6ZXJfdmVyc2lvbiA+PSAzOCApCiAgICAgICAgIHsKICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgICAgICAgLyogU1VCUElYRUwgUE9TSVRJT05FRD8gICAgICAgICAqLwpAQCAtNzgzMyw4ICs3NDAwLDI2IEBACiAgICAgICAgICAgLyogUmV0dXJuIEJpdChzKTogMTcgICAgICAgICAgICAqLwogICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAvKiBGdW5jdGlvbmFsaXR5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovCi0gICAgICAgICAgaWYgKCAoIGFyZ3NbMF0gJiAxMDI0ICkgIT0gMCAmJiBDVVIuc3VicGl4ZWxfcG9zaXRpb25lZCApCisgICAgICAgICAgaWYgKCAoIGFyZ3NbMF0gJiAxMDI0ICkgIT0gMCAmJiBleGMtPnN1YnBpeGVsX3Bvc2l0aW9uZWQgKQogICAgICAgICAgICAgSyB8PSAxIDw8IDE3OworCisgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgIC8qIFNZTU1FVFJJQ0FMIFNNT09USElORyAgICAgICAgKi8KKyAgICAgICAgICAvKiBTZWxlY3RvciBCaXQ6ICAxMSAgICAgICAgICAgICovCisgICAgICAgICAgLyogUmV0dXJuIEJpdChzKTogMTggICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBGdW5jdGlvbmFsaXR5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovCisgICAgICAgICAgaWYgKCAoIGFyZ3NbMF0gJiAyMDQ4ICkgIT0gMCAmJiBleGMtPnN5bW1ldHJpY2FsX3Ntb290aGluZyApCisgICAgICAgICAgICBLIHw9IDEgPDwgMTg7CisKKyAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgICAgLyogR1JBWSBDTEVBUlRZUEUgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIFNlbGVjdG9yIEJpdDogIDEyICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBSZXR1cm4gQml0KHMpOiAxOSAgICAgICAgICAgICovCisgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIEZ1bmN0aW9uYWxpdHkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi8KKyAgICAgICAgICBpZiAoICggYXJnc1swXSAmIDQwOTYgKSAhPSAwICYmIGV4Yy0+Z3JheV9jbGVhcnR5cGUgKQorICAgICAgICAgICAgSyB8PSAxIDw8IDE5OwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtNzg0NiwzMzEgKzc0MzEsNDMgQEAKIAogCiAgIHN0YXRpYyB2b2lkCi0gIEluc19VTktOT1dOKCBJTlNfQVJHICkKKyAgSW5zX1VOS05PV04oIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7Ci0gICAgVFRfRGVmUmVjb3JkKiAgZGVmICAgPSBDVVIuSURlZnM7Ci0gICAgVFRfRGVmUmVjb3JkKiAgbGltaXQgPSBkZWYgKyBDVVIubnVtSURlZnM7Ci0KLSAgICBGVF9VTlVTRURfQVJHOworICAgIFRUX0RlZlJlY29yZCogIGRlZiAgID0gZXhjLT5JRGVmczsKKyAgICBUVF9EZWZSZWNvcmQqICBsaW1pdCA9IGRlZiArIGV4Yy0+bnVtSURlZnM7CiAKIAogICAgIGZvciAoIDsgZGVmIDwgbGltaXQ7IGRlZisrICkKICAgICB7Ci0gICAgICBpZiAoIChGVF9CeXRlKWRlZi0+b3BjID09IENVUi5vcGNvZGUgJiYgZGVmLT5hY3RpdmUgKQorICAgICAgaWYgKCAoRlRfQnl0ZSlkZWYtPm9wYyA9PSBleGMtPm9wY29kZSAmJiBkZWYtPmFjdGl2ZSApCiAgICAgICB7CiAgICAgICAgIFRUX0NhbGxSZWMqICBjYWxsOwogCiAKLSAgICAgICAgaWYgKCBDVVIuY2FsbFRvcCA+PSBDVVIuY2FsbFNpemUgKQorICAgICAgICBpZiAoIGV4Yy0+Y2FsbFRvcCA+PSBleGMtPmNhbGxTaXplICkKICAgICAgICAgewotICAgICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBTdGFja19PdmVyZmxvdyApOworICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggU3RhY2tfT3ZlcmZsb3cgKTsKICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjYWxsID0gQ1VSLmNhbGxTdGFjayArIENVUi5jYWxsVG9wKys7CisgICAgICAgIGNhbGwgPSBleGMtPmNhbGxTdGFjayArIGV4Yy0+Y2FsbFRvcCsrOwogCi0gICAgICAgIGNhbGwtPkNhbGxlcl9SYW5nZSA9IENVUi5jdXJSYW5nZTsKLSAgICAgICAgY2FsbC0+Q2FsbGVyX0lQICAgID0gQ1VSLklQICsgMTsKKyAgICAgICAgY2FsbC0+Q2FsbGVyX1JhbmdlID0gZXhjLT5jdXJSYW5nZTsKKyAgICAgICAgY2FsbC0+Q2FsbGVyX0lQICAgID0gZXhjLT5JUCArIDE7CiAgICAgICAgIGNhbGwtPkN1cl9Db3VudCAgICA9IDE7CiAgICAgICAgIGNhbGwtPkRlZiAgICAgICAgICA9IGRlZjsKIAotICAgICAgICBJTlNfR290b19Db2RlUmFuZ2UoIGRlZi0+cmFuZ2UsIGRlZi0+c3RhcnQgKTsKKyAgICAgICAgSW5zX0dvdG9fQ29kZVJhbmdlKCBleGMsIGRlZi0+cmFuZ2UsIGRlZi0+c3RhcnQgKTsKIAotICAgICAgICBDVVIuc3RlcF9pbnMgPSBGQUxTRTsKKyAgICAgICAgZXhjLT5zdGVwX2lucyA9IEZBTFNFOwogICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgfQogCi0gICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfT3Bjb2RlICk7CisgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX09wY29kZSApOwogICB9CiAKIAotI2lmbmRlZiBUVF9DT05GSUdfT1BUSU9OX0lOVEVSUFJFVEVSX1NXSVRDSAotCi0KLSAgc3RhdGljCi0gIFRJbnN0cnVjdGlvbl9GdW5jdGlvbiAgSW5zdHJ1Y3RfRGlzcGF0Y2hbMjU2XSA9Ci0gIHsKLSAgICAvKiBPcGNvZGVzIGFyZSBnYXRoZXJlZCBpbiBncm91cHMgb2YgMTYuICovCi0gICAgLyogUGxlYXNlIGtlZXAgdGhlIHNwYWNlcyBhcyB0aGV5IGFyZS4gICAqLwotCi0gICAgLyogIFNWVENBICB5ICAqLyAgSW5zX1NWVENBLAotICAgIC8qICBTVlRDQSAgeCAgKi8gIEluc19TVlRDQSwKLSAgICAvKiAgU1B2VENBIHkgICovICBJbnNfU1BWVENBLAotICAgIC8qICBTUHZUQ0EgeCAgKi8gIEluc19TUFZUQ0EsCi0gICAgLyogIFNGdlRDQSB5ICAqLyAgSW5zX1NGVlRDQSwKLSAgICAvKiAgU0Z2VENBIHggICovICBJbnNfU0ZWVENBLAotICAgIC8qICBTUHZUTCAvLyAgKi8gIEluc19TUFZUTCwKLSAgICAvKiAgU1B2VEwgKyAgICovICBJbnNfU1BWVEwsCi0gICAgLyogIFNGdlRMIC8vICAqLyAgSW5zX1NGVlRMLAotICAgIC8qICBTRnZUTCArICAgKi8gIEluc19TRlZUTCwKLSAgICAvKiAgU1B2RlMgICAgICovICBJbnNfU1BWRlMsCi0gICAgLyogIFNGdkZTICAgICAqLyAgSW5zX1NGVkZTLAotICAgIC8qICBHUFYgICAgICAgKi8gIEluc19HUFYsCi0gICAgLyogIEdGViAgICAgICAqLyAgSW5zX0dGViwKLSAgICAvKiAgU0Z2VFB2ICAgICovICBJbnNfU0ZWVFBWLAotICAgIC8qICBJU0VDVCAgICAgKi8gIEluc19JU0VDVCwKLQotICAgIC8qICBTUlAwICAgICAgKi8gIEluc19TUlAwLAotICAgIC8qICBTUlAxICAgICAgKi8gIEluc19TUlAxLAotICAgIC8qICBTUlAyICAgICAgKi8gIEluc19TUlAyLAotICAgIC8qICBTWlAwICAgICAgKi8gIEluc19TWlAwLAotICAgIC8qICBTWlAxICAgICAgKi8gIEluc19TWlAxLAotICAgIC8qICBTWlAyICAgICAgKi8gIEluc19TWlAyLAotICAgIC8qICBTWlBTICAgICAgKi8gIEluc19TWlBTLAotICAgIC8qICBTTE9PUCAgICAgKi8gIEluc19TTE9PUCwKLSAgICAvKiAgUlRHICAgICAgICovICBJbnNfUlRHLAotICAgIC8qICBSVEhHICAgICAgKi8gIEluc19SVEhHLAotICAgIC8qICBTTUQgICAgICAgKi8gIEluc19TTUQsCi0gICAgLyogIEVMU0UgICAgICAqLyAgSW5zX0VMU0UsCi0gICAgLyogIEpNUFIgICAgICAqLyAgSW5zX0pNUFIsCi0gICAgLyogIFNDdlRDaSAgICAqLyAgSW5zX1NDVlRDSSwKLSAgICAvKiAgU1N3Q2kgICAgICovICBJbnNfU1NXQ0ksCi0gICAgLyogIFNTVyAgICAgICAqLyAgSW5zX1NTVywKLQotICAgIC8qICBEVVAgICAgICAgKi8gIEluc19EVVAsCi0gICAgLyogIFBPUCAgICAgICAqLyAgSW5zX1BPUCwKLSAgICAvKiAgQ0xFQVIgICAgICovICBJbnNfQ0xFQVIsCi0gICAgLyogIFNXQVAgICAgICAqLyAgSW5zX1NXQVAsCi0gICAgLyogIERFUFRIICAgICAqLyAgSW5zX0RFUFRILAotICAgIC8qICBDSU5ERVggICAgKi8gIEluc19DSU5ERVgsCi0gICAgLyogIE1JTkRFWCAgICAqLyAgSW5zX01JTkRFWCwKLSAgICAvKiAgQWxpZ25QVFMgICovICBJbnNfQUxJR05QVFMsCi0gICAgLyogIElOU18weDI4ICAqLyAgSW5zX1VOS05PV04sCi0gICAgLyogIFVUUCAgICAgICAqLyAgSW5zX1VUUCwKLSAgICAvKiAgTE9PUENBTEwgICovICBJbnNfTE9PUENBTEwsCi0gICAgLyogIENBTEwgICAgICAqLyAgSW5zX0NBTEwsCi0gICAgLyogIEZERUYgICAgICAqLyAgSW5zX0ZERUYsCi0gICAgLyogIEVOREYgICAgICAqLyAgSW5zX0VOREYsCi0gICAgLyogIE1EQVBbMF0gICAqLyAgSW5zX01EQVAsCi0gICAgLyogIE1EQVBbMV0gICAqLyAgSW5zX01EQVAsCi0KLSAgICAvKiAgSVVQWzBdICAgICovICBJbnNfSVVQLAotICAgIC8qICBJVVBbMV0gICAgKi8gIEluc19JVVAsCi0gICAgLyogIFNIUFswXSAgICAqLyAgSW5zX1NIUCwKLSAgICAvKiAgU0hQWzFdICAgICovICBJbnNfU0hQLAotICAgIC8qICBTSENbMF0gICAgKi8gIEluc19TSEMsCi0gICAgLyogIFNIQ1sxXSAgICAqLyAgSW5zX1NIQywKLSAgICAvKiAgU0haWzBdICAgICovICBJbnNfU0haLAotICAgIC8qICBTSFpbMV0gICAgKi8gIEluc19TSFosCi0gICAgLyogIFNIUElYICAgICAqLyAgSW5zX1NIUElYLAotICAgIC8qICBJUCAgICAgICAgKi8gIEluc19JUCwKLSAgICAvKiAgTVNJUlBbMF0gICovICBJbnNfTVNJUlAsCi0gICAgLyogIE1TSVJQWzFdICAqLyAgSW5zX01TSVJQLAotICAgIC8qICBBbGlnblJQICAgKi8gIEluc19BTElHTlJQLAotICAgIC8qICBSVERHICAgICAgKi8gIEluc19SVERHLAotICAgIC8qICBNSUFQWzBdICAgKi8gIEluc19NSUFQLAotICAgIC8qICBNSUFQWzFdICAgKi8gIEluc19NSUFQLAotCi0gICAgLyogIE5QdXNoQiAgICAqLyAgSW5zX05QVVNIQiwKLSAgICAvKiAgTlB1c2hXICAgICovICBJbnNfTlBVU0hXLAotICAgIC8qICBXUyAgICAgICAgKi8gIEluc19XUywKLSAgICAvKiAgUlMgICAgICAgICovICBJbnNfUlMsCi0gICAgLyogIFdDdnRQICAgICAqLyAgSW5zX1dDVlRQLAotICAgIC8qICBSQ3Z0ICAgICAgKi8gIEluc19SQ1ZULAotICAgIC8qICBHQ1swXSAgICAgKi8gIEluc19HQywKLSAgICAvKiAgR0NbMV0gICAgICovICBJbnNfR0MsCi0gICAgLyogIFNDRlMgICAgICAqLyAgSW5zX1NDRlMsCi0gICAgLyogIE1EWzBdICAgICAqLyAgSW5zX01ELAotICAgIC8qICBNRFsxXSAgICAgKi8gIEluc19NRCwKLSAgICAvKiAgTVBQRU0gICAgICovICBJbnNfTVBQRU0sCi0gICAgLyogIE1QUyAgICAgICAqLyAgSW5zX01QUywKLSAgICAvKiAgRmxpcE9OICAgICovICBJbnNfRkxJUE9OLAotICAgIC8qICBGbGlwT0ZGICAgKi8gIEluc19GTElQT0ZGLAotICAgIC8qICBERUJVRyAgICAgKi8gIEluc19ERUJVRywKLQotICAgIC8qICBMVCAgICAgICAgKi8gIEluc19MVCwKLSAgICAvKiAgTFRFUSAgICAgICovICBJbnNfTFRFUSwKLSAgICAvKiAgR1QgICAgICAgICovICBJbnNfR1QsCi0gICAgLyogIEdURVEgICAgICAqLyAgSW5zX0dURVEsCi0gICAgLyogIEVRICAgICAgICAqLyAgSW5zX0VRLAotICAgIC8qICBORVEgICAgICAgKi8gIEluc19ORVEsCi0gICAgLyogIE9ERCAgICAgICAqLyAgSW5zX09ERCwKLSAgICAvKiAgRVZFTiAgICAgICovICBJbnNfRVZFTiwKLSAgICAvKiAgSUYgICAgICAgICovICBJbnNfSUYsCi0gICAgLyogIEVJRiAgICAgICAqLyAgSW5zX0VJRiwKLSAgICAvKiAgQU5EICAgICAgICovICBJbnNfQU5ELAotICAgIC8qICBPUiAgICAgICAgKi8gIEluc19PUiwKLSAgICAvKiAgTk9UICAgICAgICovICBJbnNfTk9ULAotICAgIC8qICBEZWx0YVAxICAgKi8gIEluc19ERUxUQVAsCi0gICAgLyogIFNEQiAgICAgICAqLyAgSW5zX1NEQiwKLSAgICAvKiAgU0RTICAgICAgICovICBJbnNfU0RTLAotCi0gICAgLyogIEFERCAgICAgICAqLyAgSW5zX0FERCwKLSAgICAvKiAgU1VCICAgICAgICovICBJbnNfU1VCLAotICAgIC8qICBESVYgICAgICAgKi8gIEluc19ESVYsCi0gICAgLyogIE1VTCAgICAgICAqLyAgSW5zX01VTCwKLSAgICAvKiAgQUJTICAgICAgICovICBJbnNfQUJTLAotICAgIC8qICBORUcgICAgICAgKi8gIEluc19ORUcsCi0gICAgLyogIEZMT09SICAgICAqLyAgSW5zX0ZMT09SLAotICAgIC8qICBDRUlMSU5HICAgKi8gIEluc19DRUlMSU5HLAotICAgIC8qICBST1VORFswXSAgKi8gIEluc19ST1VORCwKLSAgICAvKiAgUk9VTkRbMV0gICovICBJbnNfUk9VTkQsCi0gICAgLyogIFJPVU5EWzJdICAqLyAgSW5zX1JPVU5ELAotICAgIC8qICBST1VORFszXSAgKi8gIEluc19ST1VORCwKLSAgICAvKiAgTlJPVU5EWzBdICovICBJbnNfTlJPVU5ELAotICAgIC8qICBOUk9VTkRbMV0gKi8gIEluc19OUk9VTkQsCi0gICAgLyogIE5ST1VORFsyXSAqLyAgSW5zX05ST1VORCwKLSAgICAvKiAgTlJPVU5EWzNdICovICBJbnNfTlJPVU5ELAotCi0gICAgLyogIFdDdnRGICAgICAqLyAgSW5zX1dDVlRGLAotICAgIC8qICBEZWx0YVAyICAgKi8gIEluc19ERUxUQVAsCi0gICAgLyogIERlbHRhUDMgICAqLyAgSW5zX0RFTFRBUCwKLSAgICAvKiAgRGVsdGFDblswXSAqLyBJbnNfREVMVEFDLAotICAgIC8qICBEZWx0YUNuWzFdICovIEluc19ERUxUQUMsCi0gICAgLyogIERlbHRhQ25bMl0gKi8gSW5zX0RFTFRBQywKLSAgICAvKiAgU1JPVU5EICAgICovICBJbnNfU1JPVU5ELAotICAgIC8qICBTNDVSb3VuZCAgKi8gIEluc19TNDVST1VORCwKLSAgICAvKiAgSlJPVCAgICAgICovICBJbnNfSlJPVCwKLSAgICAvKiAgSlJPRiAgICAgICovICBJbnNfSlJPRiwKLSAgICAvKiAgUk9GRiAgICAgICovICBJbnNfUk9GRiwKLSAgICAvKiAgSU5TXzB4N0IgICovICBJbnNfVU5LTk9XTiwKLSAgICAvKiAgUlVURyAgICAgICovICBJbnNfUlVURywKLSAgICAvKiAgUkRURyAgICAgICovICBJbnNfUkRURywKLSAgICAvKiAgU0FOR1cgICAgICovICBJbnNfU0FOR1csCi0gICAgLyogIEFBICAgICAgICAqLyAgSW5zX0FBLAotCi0gICAgLyogIEZsaXBQVCAgICAqLyAgSW5zX0ZMSVBQVCwKLSAgICAvKiAgRmxpcFJnT04gICovICBJbnNfRkxJUFJHT04sCi0gICAgLyogIEZsaXBSZ09GRiAqLyAgSW5zX0ZMSVBSR09GRiwKLSAgICAvKiAgSU5TXzB4ODMgICovICBJbnNfVU5LTk9XTiwKLSAgICAvKiAgSU5TXzB4ODQgICovICBJbnNfVU5LTk9XTiwKLSAgICAvKiAgU2NhbkNUUkwgICovICBJbnNfU0NBTkNUUkwsCi0gICAgLyogIFNEUFZUTFswXSAqLyAgSW5zX1NEUFZUTCwKLSAgICAvKiAgU0RQVlRMWzFdICovICBJbnNfU0RQVlRMLAotICAgIC8qICBHZXRJTkZPICAgKi8gIEluc19HRVRJTkZPLAotICAgIC8qICBJREVGICAgICAgKi8gIEluc19JREVGLAotICAgIC8qICBST0xMICAgICAgKi8gIEluc19ST0xMLAotICAgIC8qICBNQVggICAgICAgKi8gIEluc19NQVgsCi0gICAgLyogIE1JTiAgICAgICAqLyAgSW5zX01JTiwKLSAgICAvKiAgU2NhblRZUEUgICovICBJbnNfU0NBTlRZUEUsCi0gICAgLyogIEluc3RDVFJMICAqLyAgSW5zX0lOU1RDVFJMLAotICAgIC8qICBJTlNfMHg4RiAgKi8gIEluc19VTktOT1dOLAotCi0gICAgLyogIElOU18weDkwICAqLyAgIEluc19VTktOT1dOLAotICAgIC8qICBJTlNfMHg5MSAgKi8gICBJbnNfVU5LTk9XTiwKLSAgICAvKiAgSU5TXzB4OTIgICovICAgSW5zX1VOS05PV04sCi0gICAgLyogIElOU18weDkzICAqLyAgIEluc19VTktOT1dOLAotICAgIC8qICBJTlNfMHg5NCAgKi8gICBJbnNfVU5LTk9XTiwKLSAgICAvKiAgSU5TXzB4OTUgICovICAgSW5zX1VOS05PV04sCi0gICAgLyogIElOU18weDk2ICAqLyAgIEluc19VTktOT1dOLAotICAgIC8qICBJTlNfMHg5NyAgKi8gICBJbnNfVU5LTk9XTiwKLSAgICAvKiAgSU5TXzB4OTggICovICAgSW5zX1VOS05PV04sCi0gICAgLyogIElOU18weDk5ICAqLyAgIEluc19VTktOT1dOLAotICAgIC8qICBJTlNfMHg5QSAgKi8gICBJbnNfVU5LTk9XTiwKLSAgICAvKiAgSU5TXzB4OUIgICovICAgSW5zX1VOS05PV04sCi0gICAgLyogIElOU18weDlDICAqLyAgIEluc19VTktOT1dOLAotICAgIC8qICBJTlNfMHg5RCAgKi8gICBJbnNfVU5LTk9XTiwKLSAgICAvKiAgSU5TXzB4OUUgICovICAgSW5zX1VOS05PV04sCi0gICAgLyogIElOU18weDlGICAqLyAgIEluc19VTktOT1dOLAotCi0gICAgLyogIElOU18weEEwICAqLyAgIEluc19VTktOT1dOLAotICAgIC8qICBJTlNfMHhBMSAgKi8gICBJbnNfVU5LTk9XTiwKLSAgICAvKiAgSU5TXzB4QTIgICovICAgSW5zX1VOS05PV04sCi0gICAgLyogIElOU18weEEzICAqLyAgIEluc19VTktOT1dOLAotICAgIC8qICBJTlNfMHhBNCAgKi8gICBJbnNfVU5LTk9XTiwKLSAgICAvKiAgSU5TXzB4QTUgICovICAgSW5zX1VOS05PV04sCi0gICAgLyogIElOU18weEE2ICAqLyAgIEluc19VTktOT1dOLAotICAgIC8qICBJTlNfMHhBNyAgKi8gICBJbnNfVU5LTk9XTiwKLSAgICAvKiAgSU5TXzB4QTggICovICAgSW5zX1VOS05PV04sCi0gICAgLyogIElOU18weEE5ICAqLyAgIEluc19VTktOT1dOLAotICAgIC8qICBJTlNfMHhBQSAgKi8gICBJbnNfVU5LTk9XTiwKLSAgICAvKiAgSU5TXzB4QUIgICovICAgSW5zX1VOS05PV04sCi0gICAgLyogIElOU18weEFDICAqLyAgIEluc19VTktOT1dOLAotICAgIC8qICBJTlNfMHhBRCAgKi8gICBJbnNfVU5LTk9XTiwKLSAgICAvKiAgSU5TXzB4QUUgICovICAgSW5zX1VOS05PV04sCi0gICAgLyogIElOU18weEFGICAqLyAgIEluc19VTktOT1dOLAotCi0gICAgLyogIFB1c2hCWzBdICAqLyAgSW5zX1BVU0hCLAotICAgIC8qICBQdXNoQlsxXSAgKi8gIEluc19QVVNIQiwKLSAgICAvKiAgUHVzaEJbMl0gICovICBJbnNfUFVTSEIsCi0gICAgLyogIFB1c2hCWzNdICAqLyAgSW5zX1BVU0hCLAotICAgIC8qICBQdXNoQls0XSAgKi8gIEluc19QVVNIQiwKLSAgICAvKiAgUHVzaEJbNV0gICovICBJbnNfUFVTSEIsCi0gICAgLyogIFB1c2hCWzZdICAqLyAgSW5zX1BVU0hCLAotICAgIC8qICBQdXNoQls3XSAgKi8gIEluc19QVVNIQiwKLSAgICAvKiAgUHVzaFdbMF0gICovICBJbnNfUFVTSFcsCi0gICAgLyogIFB1c2hXWzFdICAqLyAgSW5zX1BVU0hXLAotICAgIC8qICBQdXNoV1syXSAgKi8gIEluc19QVVNIVywKLSAgICAvKiAgUHVzaFdbM10gICovICBJbnNfUFVTSFcsCi0gICAgLyogIFB1c2hXWzRdICAqLyAgSW5zX1BVU0hXLAotICAgIC8qICBQdXNoV1s1XSAgKi8gIEluc19QVVNIVywKLSAgICAvKiAgUHVzaFdbNl0gICovICBJbnNfUFVTSFcsCi0gICAgLyogIFB1c2hXWzddICAqLyAgSW5zX1BVU0hXLAotCi0gICAgLyogIE1EUlBbMDBdICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMDFdICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMDJdICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMDNdICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMDRdICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMDVdICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMDZdICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMDddICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMDhdICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMDldICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMTBdICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMTFdICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMTJdICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMTNdICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMTRdICAqLyAgSW5zX01EUlAsCi0gICAgLyogIE1EUlBbMTVdICAqLyAgSW5zX01EUlAsCi0KLSAgICAvKiAgTURSUFsxNl0gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFsxN10gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFsxOF0gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFsxOV0gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFsyMF0gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFsyMV0gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFsyMl0gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFsyM10gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFsyNF0gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFsyNV0gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFsyNl0gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFsyN10gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFsyOF0gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFsyOV0gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFszMF0gICovICBJbnNfTURSUCwKLSAgICAvKiAgTURSUFszMV0gICovICBJbnNfTURSUCwKLQotICAgIC8qICBNSVJQWzAwXSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzAxXSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzAyXSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzAzXSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzA0XSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzA1XSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzA2XSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzA3XSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzA4XSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzA5XSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzEwXSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzExXSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzEyXSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzEzXSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzE0XSAgKi8gIEluc19NSVJQLAotICAgIC8qICBNSVJQWzE1XSAgKi8gIEluc19NSVJQLAotCi0gICAgLyogIE1JUlBbMTZdICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMTddICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMThdICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMTldICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMjBdICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMjFdICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMjJdICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMjNdICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMjRdICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMjVdICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMjZdICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMjddICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMjhdICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMjldICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMzBdICAqLyAgSW5zX01JUlAsCi0gICAgLyogIE1JUlBbMzFdICAqLyAgSW5zX01JUlAKLSAgfTsKLQotCi0jZW5kaWYgLyogIVRUX0NPTkZJR19PUFRJT05fSU5URVJQUkVURVJfU1dJVENIICovCi0KLQogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFJVTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtODE5OCw4ICs3NDk1LDYgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFRISVMgSVMgVEhFIElOVEVSUFJFVEVSJ1MgTUFJTiBMT09QLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIEluc3RydWN0aW9ucyBhcHBlYXIgaW4gdGhlIHNwZWNpZmljYXRpb24ncyBvcmRlci4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCkBAIC04MjI1LDkwICs3NTIwLDEwMCBAQAogI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLwogCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NUQVRJQ19SQVNURVIKLSAgICBpZiAoICFleGMgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0KLSAgICBjdXIgPSAqZXhjOwotI2VuZGlmCi0KICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICBDVVIuaXVwX2NhbGxlZCA9IEZBTFNFOworICAgIGV4Yy0+aXVwX2NhbGxlZCA9IEZBTFNFOwogI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLwogCiAgICAgLyogc2V0IFBQRU0gYW5kIENWVCBmdW5jdGlvbnMgKi8KLSAgICBDVVIudHRfbWV0cmljcy5yYXRpbyA9IDA7Ci0gICAgaWYgKCBDVVIubWV0cmljcy54X3BwZW0gIT0gQ1VSLm1ldHJpY3MueV9wcGVtICkKKyAgICBleGMtPnR0X21ldHJpY3MucmF0aW8gPSAwOworICAgIGlmICggZXhjLT5tZXRyaWNzLnhfcHBlbSAhPSBleGMtPm1ldHJpY3MueV9wcGVtICkKICAgICB7CiAgICAgICAvKiBub24tc3F1YXJlIHBpeGVscywgdXNlIHRoZSBzdHJldGNoZWQgcm91dGluZXMgKi8KLSAgICAgIENVUi5mdW5jX2N1cl9wcGVtICA9IEN1cnJlbnRfUHBlbV9TdHJldGNoZWQ7Ci0gICAgICBDVVIuZnVuY19yZWFkX2N2dCAgPSBSZWFkX0NWVF9TdHJldGNoZWQ7Ci0gICAgICBDVVIuZnVuY193cml0ZV9jdnQgPSBXcml0ZV9DVlRfU3RyZXRjaGVkOwotICAgICAgQ1VSLmZ1bmNfbW92ZV9jdnQgID0gTW92ZV9DVlRfU3RyZXRjaGVkOworICAgICAgZXhjLT5mdW5jX2N1cl9wcGVtICA9IEN1cnJlbnRfUHBlbV9TdHJldGNoZWQ7CisgICAgICBleGMtPmZ1bmNfcmVhZF9jdnQgID0gUmVhZF9DVlRfU3RyZXRjaGVkOworICAgICAgZXhjLT5mdW5jX3dyaXRlX2N2dCA9IFdyaXRlX0NWVF9TdHJldGNoZWQ7CisgICAgICBleGMtPmZ1bmNfbW92ZV9jdnQgID0gTW92ZV9DVlRfU3RyZXRjaGVkOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgLyogc3F1YXJlIHBpeGVscywgdXNlIG5vcm1hbCByb3V0aW5lcyAqLwotICAgICAgQ1VSLmZ1bmNfY3VyX3BwZW0gID0gQ3VycmVudF9QcGVtOwotICAgICAgQ1VSLmZ1bmNfcmVhZF9jdnQgID0gUmVhZF9DVlQ7Ci0gICAgICBDVVIuZnVuY193cml0ZV9jdnQgPSBXcml0ZV9DVlQ7Ci0gICAgICBDVVIuZnVuY19tb3ZlX2N2dCAgPSBNb3ZlX0NWVDsKKyAgICAgIGV4Yy0+ZnVuY19jdXJfcHBlbSAgPSBDdXJyZW50X1BwZW07CisgICAgICBleGMtPmZ1bmNfcmVhZF9jdnQgID0gUmVhZF9DVlQ7CisgICAgICBleGMtPmZ1bmNfd3JpdGVfY3Z0ID0gV3JpdGVfQ1ZUOworICAgICAgZXhjLT5mdW5jX21vdmVfY3Z0ICA9IE1vdmVfQ1ZUOwogICAgIH0KIAotICAgIENPTVBVVEVfRnVuY3MoKTsKLSAgICBDT01QVVRFX1JvdW5kKCAoRlRfQnl0ZSlleGMtPkdTLnJvdW5kX3N0YXRlICk7CisgICAgQ29tcHV0ZV9GdW5jcyggZXhjICk7CisgICAgQ29tcHV0ZV9Sb3VuZCggZXhjLCAoRlRfQnl0ZSlleGMtPkdTLnJvdW5kX3N0YXRlICk7CiAKICAgICBkbwogICAgIHsKLSAgICAgIENVUi5vcGNvZGUgPSBDVVIuY29kZVtDVVIuSVBdOworICAgICAgZXhjLT5vcGNvZGUgPSBleGMtPmNvZGVbZXhjLT5JUF07CiAKLSAgICAgIEZUX1RSQUNFNygoICIgICIgKSk7Ci0gICAgICBGVF9UUkFDRTcoKCBvcGNvZGVfbmFtZVtDVVIub3Bjb2RlXSApKTsKLSAgICAgIEZUX1RSQUNFNygoICJcbiIgKSk7Ci0KLSAgICAgIGlmICggKCBDVVIubGVuZ3RoID0gb3Bjb2RlX2xlbmd0aFtDVVIub3Bjb2RlXSApIDwgMCApCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKICAgICAgIHsKLSAgICAgICAgaWYgKCBDVVIuSVAgKyAxID49IENVUi5jb2RlU2l6ZSApCisgICAgICAgIEZUX0xvbmcgIGNudCA9IEZUX01JTiggOCwgZXhjLT50b3AgKTsKKyAgICAgICAgRlRfTG9uZyAgbjsKKworCisgICAgICAgIC8qIGlmIHRyYWNpbmcgbGV2ZWwgaXMgNywgc2hvdyBjdXJyZW50IGNvZGUgcG9zaXRpb24gKi8KKyAgICAgICAgLyogYW5kIHRoZSBmaXJzdCBmZXcgc3RhY2sgZWxlbWVudHMgYWxzbyAgICAgICAgICAgICAqLworICAgICAgICBGVF9UUkFDRTYoKCAiICAiICkpOworICAgICAgICBGVF9UUkFDRTcoKCAiJTA2ZCAiLCBleGMtPklQICkpOworICAgICAgICBGVF9UUkFDRTYoKCBvcGNvZGVfbmFtZVtleGMtPm9wY29kZV0gKyAyICkpOworICAgICAgICBGVF9UUkFDRTcoKCAiJSpzIiwgKm9wY29kZV9uYW1lW2V4Yy0+b3Bjb2RlXSA9PSAnQScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxMiAtICggKm9wY29kZV9uYW1lW2V4Yy0+b3Bjb2RlXSAtICcwJyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiMiICkpOworICAgICAgICBmb3IgKCBuID0gMDsgbiA8IGNudDsgbisrICkKKyAgICAgICAgICBGVF9UUkFDRTcoKCAiICVkIiwgZXhjLT5zdGFja1tleGMtPnRvcCAtIG5dICkpOworICAgICAgICBGVF9UUkFDRTYoKCAiXG4iICkpOworICAgICAgfQorI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKyAgICAgIGlmICggKCBleGMtPmxlbmd0aCA9IG9wY29kZV9sZW5ndGhbZXhjLT5vcGNvZGVdICkgPCAwICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBleGMtPklQICsgMSA+PSBleGMtPmNvZGVTaXplICkKICAgICAgICAgICBnb3RvIExFcnJvckNvZGVPdmVyZmxvd187CiAKLSAgICAgICAgQ1VSLmxlbmd0aCA9IDIgLSBDVVIubGVuZ3RoICogQ1VSLmNvZGVbQ1VSLklQICsgMV07CisgICAgICAgIGV4Yy0+bGVuZ3RoID0gMiAtIGV4Yy0+bGVuZ3RoICogZXhjLT5jb2RlW2V4Yy0+SVAgKyAxXTsKICAgICAgIH0KIAotICAgICAgaWYgKCBDVVIuSVAgKyBDVVIubGVuZ3RoID4gQ1VSLmNvZGVTaXplICkKKyAgICAgIGlmICggZXhjLT5JUCArIGV4Yy0+bGVuZ3RoID4gZXhjLT5jb2RlU2l6ZSApCiAgICAgICAgIGdvdG8gTEVycm9yQ29kZU92ZXJmbG93XzsKIAogICAgICAgLyogRmlyc3QsIGxldCdzIGNoZWNrIGZvciBlbXB0eSBzdGFjayBhbmQgb3ZlcmZsb3cgKi8KLSAgICAgIENVUi5hcmdzID0gQ1VSLnRvcCAtICggUG9wX1B1c2hfQ291bnRbQ1VSLm9wY29kZV0gPj4gNCApOworICAgICAgZXhjLT5hcmdzID0gZXhjLT50b3AgLSAoIFBvcF9QdXNoX0NvdW50W2V4Yy0+b3Bjb2RlXSA+PiA0ICk7CiAKICAgICAgIC8qIGBhcmdzJyBpcyB0aGUgdG9wIG9mIHRoZSBzdGFjayBvbmNlIGFyZ3VtZW50cyBoYXZlIGJlZW4gcG9wcGVkLiAqLwogICAgICAgLyogT25lIGNhbiBhbHNvIGludGVycHJldCBpdCBhcyB0aGUgaW5kZXggb2YgdGhlIGxhc3QgYXJndW1lbnQuICAgICovCi0gICAgICBpZiAoIENVUi5hcmdzIDwgMCApCisgICAgICBpZiAoIGV4Yy0+YXJncyA8IDAgKQogICAgICAgewotICAgICAgICBpZiAoIENVUi5wZWRhbnRpY19oaW50aW5nICkKKyAgICAgICAgaWYgKCBleGMtPnBlZGFudGljX2hpbnRpbmcgKQogICAgICAgICB7Ci0gICAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIFRvb19GZXdfQXJndW1lbnRzICk7CisgICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBUb29fRmV3X0FyZ3VtZW50cyApOwogICAgICAgICAgIGdvdG8gTEVycm9yTGFiZWxfOwogICAgICAgICB9CiAKICAgICAgICAgLyogcHVzaCB6ZXJvZXMgb250byB0aGUgc3RhY2sgKi8KLSAgICAgICAgZm9yICggaSA9IDA7IGkgPCBQb3BfUHVzaF9Db3VudFtDVVIub3Bjb2RlXSA+PiA0OyBpKysgKQotICAgICAgICAgIENVUi5zdGFja1tpXSA9IDA7Ci0gICAgICAgIENVUi5hcmdzID0gMDsKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBQb3BfUHVzaF9Db3VudFtleGMtPm9wY29kZV0gPj4gNDsgaSsrICkKKyAgICAgICAgICBleGMtPnN0YWNrW2ldID0gMDsKKyAgICAgICAgZXhjLT5hcmdzID0gMDsKICAgICAgIH0KIAotICAgICAgQ1VSLm5ld190b3AgPSBDVVIuYXJncyArICggUG9wX1B1c2hfQ291bnRbQ1VSLm9wY29kZV0gJiAxNSApOworICAgICAgZXhjLT5uZXdfdG9wID0gZXhjLT5hcmdzICsgKCBQb3BfUHVzaF9Db3VudFtleGMtPm9wY29kZV0gJiAxNSApOwogCiAgICAgICAvKiBgbmV3X3RvcCcgaXMgdGhlIG5ldyB0b3Agb2YgdGhlIHN0YWNrLCBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24ncyAqLwogICAgICAgLyogZXhlY3V0aW9uLiAgYHRvcCcgd2lsbCBiZSBzZXQgdG8gYG5ld190b3AnIGFmdGVyIHRoZSBgc3dpdGNoJyAgKi8KICAgICAgIC8qIHN0YXRlbWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICBpZiAoIENVUi5uZXdfdG9wID4gQ1VSLnN0YWNrU2l6ZSApCisgICAgICBpZiAoIGV4Yy0+bmV3X3RvcCA+IGV4Yy0+c3RhY2tTaXplICkKICAgICAgIHsKLSAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIFN0YWNrX092ZXJmbG93ICk7CisgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggU3RhY2tfT3ZlcmZsb3cgKTsKICAgICAgICAgZ290byBMRXJyb3JMYWJlbF87CiAgICAgICB9CiAKLSAgICAgIENVUi5zdGVwX2lucyA9IFRSVUU7Ci0gICAgICBDVVIuZXJyb3IgICAgPSBGVF9FcnJfT2s7CisgICAgICBleGMtPnN0ZXBfaW5zID0gVFJVRTsKKyAgICAgIGV4Yy0+ZXJyb3IgICAgPSBGVF9FcnJfT2s7CiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKIApAQCAtODMxNiwxNyArNzYyMSwxNyBAQAogICAgICAgewogICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG9wY29kZV9wYXR0ZXJuczsgaSsrICkKICAgICAgICAgewotICAgICAgICAgIGlmICggb3Bjb2RlX3BvaW50ZXJbaV0gPCBvcGNvZGVfc2l6ZVtpXSAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgICAgIENVUi5vcGNvZGUgPT0gb3Bjb2RlX3BhdHRlcm5baV1bb3Bjb2RlX3BvaW50ZXJbaV1dICkKKyAgICAgICAgICBpZiAoIG9wY29kZV9wb2ludGVyW2ldIDwgb3Bjb2RlX3NpemVbaV0gICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgZXhjLT5vcGNvZGUgPT0gb3Bjb2RlX3BhdHRlcm5baV1bb3Bjb2RlX3BvaW50ZXJbaV1dICkKICAgICAgICAgICB7CiAgICAgICAgICAgICBvcGNvZGVfcG9pbnRlcltpXSArPSAxOwogCiAgICAgICAgICAgICBpZiAoIG9wY29kZV9wb2ludGVyW2ldID09IG9wY29kZV9zaXplW2ldICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRlRfVFJBQ0U3KCggInNwaDogb3Bjb2RlIHB0cm46ICVkLCAlcyAlc1xuIiwKKyAgICAgICAgICAgICAgRlRfVFJBQ0U2KCggInNwaDogb3Bjb2RlIHB0cm46ICVkLCAlcyAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSLmZhY2UtPnJvb3QuZmFtaWx5X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENVUi5mYWNlLT5yb290LnN0eWxlX25hbWUgKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+ZmFjZS0+cm9vdC5mYW1pbHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5mYWNlLT5yb290LnN0eWxlX25hbWUgKSk7CiAKICAgICAgICAgICAgICAgc3dpdGNoICggaSApCiAgICAgICAgICAgICAgIHsKQEAgLTgzNDMsMTUgKzc2NDgsOSBAQAogCiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0lOVEVSUFJFVEVSX1NXSVRDSAotCiAgICAgICB7Ci0gICAgICAgIEZUX0xvbmcqICBhcmdzICAgPSBDVVIuc3RhY2sgKyBDVVIuYXJnczsKLSAgICAgICAgRlRfQnl0ZSAgIG9wY29kZSA9IENVUi5vcGNvZGU7Ci0KLQotI3VuZGVmICBBUlJBWV9CT1VORF9FUlJPUgotI2RlZmluZSBBUlJBWV9CT1VORF9FUlJPUiAgZ290byBTZXRfSW52YWxpZF9SZWYKKyAgICAgICAgRlRfTG9uZyogIGFyZ3MgICA9IGV4Yy0+c3RhY2sgKyBleGMtPmFyZ3M7CisgICAgICAgIEZUX0J5dGUgICBvcGNvZGUgPSBleGMtPm9wY29kZTsKIAogCiAgICAgICAgIHN3aXRjaCAoIG9wY29kZSApCkBAIC04MzYyLDU4MCArNzY2MSw1NDMgQEAKICAgICAgICAgY2FzZSAweDAzOiAgLyogU1B2VENBIHggKi8KICAgICAgICAgY2FzZSAweDA0OiAgLyogU0Z2VENBIHkgKi8KICAgICAgICAgY2FzZSAweDA1OiAgLyogU0Z2VENBIHggKi8KLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9TaG9ydCAgQUEsIEJCOwotCi0KLSAgICAgICAgICAgIEFBID0gKEZUX1Nob3J0KSggKCBvcGNvZGUgJiAxICkgPDwgMTQgKTsKLSAgICAgICAgICAgIEJCID0gKEZUX1Nob3J0KSggQUEgXiAweDQwMDAgKTsKLQotICAgICAgICAgICAgaWYgKCBvcGNvZGUgPCA0ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQ1VSLkdTLnByb2pWZWN0b3IueCA9IEFBOwotICAgICAgICAgICAgICBDVVIuR1MucHJvalZlY3Rvci55ID0gQkI7Ci0KLSAgICAgICAgICAgICAgQ1VSLkdTLmR1YWxWZWN0b3IueCA9IEFBOwotICAgICAgICAgICAgICBDVVIuR1MuZHVhbFZlY3Rvci55ID0gQkI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEdVRVNTX1ZFQ1RPUiggcHJvalZlY3RvciApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoICggb3Bjb2RlICYgMiApID09IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDVVIuR1MuZnJlZVZlY3Rvci54ID0gQUE7Ci0gICAgICAgICAgICAgIENVUi5HUy5mcmVlVmVjdG9yLnkgPSBCQjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgR1VFU1NfVkVDVE9SKCBmcmVlVmVjdG9yICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENPTVBVVEVfRnVuY3MoKTsKLSAgICAgICAgICB9CisgICAgICAgICAgSW5zX1N4eVRDQSggZXhjICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDA2OiAgLyogU1B2VEwgLy8gKi8KICAgICAgICAgY2FzZSAweDA3OiAgLyogU1B2VEwgKyAgKi8KLSAgICAgICAgICBET19TUFZUTAorICAgICAgICAgIEluc19TUFZUTCggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDA4OiAgLyogU0Z2VEwgLy8gKi8KICAgICAgICAgY2FzZSAweDA5OiAgLyogU0Z2VEwgKyAgKi8KLSAgICAgICAgICBET19TRlZUTAorICAgICAgICAgIEluc19TRlZUTCggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDBBOiAgLyogU1B2RlMgKi8KLSAgICAgICAgICBET19TUFZGUworICAgICAgICAgIEluc19TUFZGUyggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDBCOiAgLyogU0Z2RlMgKi8KLSAgICAgICAgICBET19TRlZGUworICAgICAgICAgIEluc19TRlZGUyggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSAweDBDOiAgLyogR1BWICovCi0gICAgICAgICAgRE9fR1BWCisgICAgICAgIGNhc2UgMHgwQzogIC8qIEdQdiAqLworICAgICAgICAgIEluc19HUFYoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgMHgwRDogIC8qIEdGViAqLwotICAgICAgICAgIERPX0dGVgorICAgICAgICBjYXNlIDB4MEQ6ICAvKiBHRnYgKi8KKyAgICAgICAgICBJbnNfR0ZWKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4MEU6ICAvKiBTRnZUUHYgKi8KLSAgICAgICAgICBET19TRlZUUFYKKyAgICAgICAgICBJbnNfU0ZWVFBWKCBleGMgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4MEY6ICAvKiBJU0VDVCAgKi8KLSAgICAgICAgICBJbnNfSVNFQ1QoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX0lTRUNUKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4MTA6ICAvKiBTUlAwICovCi0gICAgICAgICAgRE9fU1JQMAorICAgICAgICAgIEluc19TUlAwKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4MTE6ICAvKiBTUlAxICovCi0gICAgICAgICAgRE9fU1JQMQorICAgICAgICAgIEluc19TUlAxKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4MTI6ICAvKiBTUlAyICovCi0gICAgICAgICAgRE9fU1JQMgorICAgICAgICAgIEluc19TUlAyKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4MTM6ICAvKiBTWlAwICovCi0gICAgICAgICAgSW5zX1NaUDAoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX1NaUDAoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgxNDogIC8qIFNaUDEgKi8KLSAgICAgICAgICBJbnNfU1pQMSggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgICBJbnNfU1pQMSggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDE1OiAgLyogU1pQMiAqLwotICAgICAgICAgIEluc19TWlAyKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19TWlAyKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4MTY6ICAvKiBTWlBTICovCi0gICAgICAgICAgSW5zX1NaUFMoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX1NaUFMoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgxNzogIC8qIFNMT09QICovCi0gICAgICAgICAgRE9fU0xPT1AKKyAgICAgICAgICBJbnNfU0xPT1AoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgxODogIC8qIFJURyAqLwotICAgICAgICAgIERPX1JURworICAgICAgICAgIEluc19SVEcoIGV4YyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgxOTogIC8qIFJUSEcgKi8KLSAgICAgICAgICBET19SVEhHCisgICAgICAgICAgSW5zX1JUSEcoIGV4YyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgxQTogIC8qIFNNRCAqLwotICAgICAgICAgIERPX1NNRAorICAgICAgICAgIEluc19TTUQoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgxQjogIC8qIEVMU0UgKi8KLSAgICAgICAgICBJbnNfRUxTRSggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgICBJbnNfRUxTRSggZXhjICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDFDOiAgLyogSk1QUiAqLwotICAgICAgICAgIERPX0pNUFIKKyAgICAgICAgICBJbnNfSk1QUiggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDFEOiAgLyogU0NWVENJICovCi0gICAgICAgICAgRE9fU0NWVENJCisgICAgICAgICAgSW5zX1NDVlRDSSggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDFFOiAgLyogU1NXQ0kgKi8KLSAgICAgICAgICBET19TU1dDSQorICAgICAgICAgIEluc19TU1dDSSggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDFGOiAgLyogU1NXICovCi0gICAgICAgICAgRE9fU1NXCisgICAgICAgICAgSW5zX1NTVyggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDIwOiAgLyogRFVQICovCi0gICAgICAgICAgRE9fRFVQCisgICAgICAgICAgSW5zX0RVUCggYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgyMTogIC8qIFBPUCAqLwotICAgICAgICAgIC8qIG5vdGhpbmcgOi0pICovCisgICAgICAgICAgSW5zX1BPUCgpOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgyMjogIC8qIENMRUFSICovCi0gICAgICAgICAgRE9fQ0xFQVIKKyAgICAgICAgICBJbnNfQ0xFQVIoIGV4YyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgyMzogIC8qIFNXQVAgKi8KLSAgICAgICAgICBET19TV0FQCisgICAgICAgICAgSW5zX1NXQVAoIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4MjQ6ICAvKiBERVBUSCAqLwotICAgICAgICAgIERPX0RFUFRICisgICAgICAgICAgSW5zX0RFUFRIKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4MjU6ICAvKiBDSU5ERVggKi8KLSAgICAgICAgICBET19DSU5ERVgKKyAgICAgICAgICBJbnNfQ0lOREVYKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4MjY6ICAvKiBNSU5ERVggKi8KLSAgICAgICAgICBJbnNfTUlOREVYKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19NSU5ERVgoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgyNzogIC8qIEFMSUdOUFRTICovCi0gICAgICAgICAgSW5zX0FMSUdOUFRTKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19BTElHTlBUUyggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDI4OiAgLyogPz8/PyAqLwotICAgICAgICAgIEluc19VTktOT1dOKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19VTktOT1dOKCBleGMgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4Mjk6ICAvKiBVVFAgKi8KLSAgICAgICAgICBJbnNfVVRQKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19VVFAoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgyQTogIC8qIExPT1BDQUxMICovCi0gICAgICAgICAgSW5zX0xPT1BDQUxMKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19MT09QQ0FMTCggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDJCOiAgLyogQ0FMTCAqLwotICAgICAgICAgIEluc19DQUxMKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19DQUxMKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4MkM6ICAvKiBGREVGICovCi0gICAgICAgICAgSW5zX0ZERUYoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX0ZERUYoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgyRDogIC8qIEVOREYgKi8KLSAgICAgICAgICBJbnNfRU5ERiggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgICBJbnNfRU5ERiggZXhjICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDJFOiAgLyogTURBUCAqLwogICAgICAgICBjYXNlIDB4MkY6ICAvKiBNREFQICovCi0gICAgICAgICAgSW5zX01EQVAoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX01EQVAoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgzMDogIC8qIElVUCAqLwogICAgICAgICBjYXNlIDB4MzE6ICAvKiBJVVAgKi8KLSAgICAgICAgICBJbnNfSVVQKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19JVVAoIGV4YyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgzMjogIC8qIFNIUCAqLwogICAgICAgICBjYXNlIDB4MzM6ICAvKiBTSFAgKi8KLSAgICAgICAgICBJbnNfU0hQKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19TSFAoIGV4YyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgzNDogIC8qIFNIQyAqLwogICAgICAgICBjYXNlIDB4MzU6ICAvKiBTSEMgKi8KLSAgICAgICAgICBJbnNfU0hDKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19TSEMoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgzNjogIC8qIFNIWiAqLwogICAgICAgICBjYXNlIDB4Mzc6ICAvKiBTSFogKi8KLSAgICAgICAgICBJbnNfU0haKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19TSFooIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgzODogIC8qIFNIUElYICovCi0gICAgICAgICAgSW5zX1NIUElYKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19TSFBJWCggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDM5OiAgLyogSVAgICAgKi8KLSAgICAgICAgICBJbnNfSVAoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX0lQKCBleGMgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4M0E6ICAvKiBNU0lSUCAqLwogICAgICAgICBjYXNlIDB4M0I6ICAvKiBNU0lSUCAqLwotICAgICAgICAgIEluc19NU0lSUCggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgICBJbnNfTVNJUlAoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHgzQzogIC8qIEFsaWduUlAgKi8KLSAgICAgICAgICBJbnNfQUxJR05SUCggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgICBJbnNfQUxJR05SUCggZXhjICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDNEOiAgLyogUlRERyAqLwotICAgICAgICAgIERPX1JUREcKKyAgICAgICAgICBJbnNfUlRERyggZXhjICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDNFOiAgLyogTUlBUCAqLwogICAgICAgICBjYXNlIDB4M0Y6ICAvKiBNSUFQICovCi0gICAgICAgICAgSW5zX01JQVAoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX01JQVAoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg0MDogIC8qIE5QVVNIQiAqLwotICAgICAgICAgIEluc19OUFVTSEIoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX05QVVNIQiggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDQxOiAgLyogTlBVU0hXICovCi0gICAgICAgICAgSW5zX05QVVNIVyggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgICBJbnNfTlBVU0hXKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4NDI6ICAvKiBXUyAqLwotICAgICAgICAgIERPX1dTCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgIFNldF9JbnZhbGlkX1JlZjoKLSAgICAgICAgICAgIENVUi5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOworICAgICAgICAgIEluc19XUyggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDQzOiAgLyogUlMgKi8KLSAgICAgICAgICBET19SUworICAgICAgICAgIEluc19SUyggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDQ0OiAgLyogV0NWVFAgKi8KLSAgICAgICAgICBET19XQ1ZUUAorICAgICAgICAgIEluc19XQ1ZUUCggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDQ1OiAgLyogUkNWVCAqLwotICAgICAgICAgIERPX1JDVlQKKyAgICAgICAgICBJbnNfUkNWVCggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDQ2OiAgLyogR0MgKi8KICAgICAgICAgY2FzZSAweDQ3OiAgLyogR0MgKi8KLSAgICAgICAgICBJbnNfR0MoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX0dDKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4NDg6ICAvKiBTQ0ZTICovCi0gICAgICAgICAgSW5zX1NDRlMoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX1NDRlMoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg0OTogIC8qIE1EICovCiAgICAgICAgIGNhc2UgMHg0QTogIC8qIE1EICovCi0gICAgICAgICAgSW5zX01EKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19NRCggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDRCOiAgLyogTVBQRU0gKi8KLSAgICAgICAgICBET19NUFBFTQorICAgICAgICAgIEluc19NUFBFTSggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDRDOiAgLyogTVBTICovCi0gICAgICAgICAgRE9fTVBTCisgICAgICAgICAgSW5zX01QUyggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDREOiAgLyogRkxJUE9OICovCi0gICAgICAgICAgRE9fRkxJUE9OCisgICAgICAgICAgSW5zX0ZMSVBPTiggZXhjICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDRFOiAgLyogRkxJUE9GRiAqLwotICAgICAgICAgIERPX0ZMSVBPRkYKKyAgICAgICAgICBJbnNfRkxJUE9GRiggZXhjICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDRGOiAgLyogREVCVUcgKi8KLSAgICAgICAgICBET19ERUJVRworICAgICAgICAgIEluc19ERUJVRyggZXhjICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDUwOiAgLyogTFQgKi8KLSAgICAgICAgICBET19MVAorICAgICAgICAgIEluc19MVCggYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg1MTogIC8qIExURVEgKi8KLSAgICAgICAgICBET19MVEVRCisgICAgICAgICAgSW5zX0xURVEoIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4NTI6ICAvKiBHVCAqLwotICAgICAgICAgIERPX0dUCisgICAgICAgICAgSW5zX0dUKCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDUzOiAgLyogR1RFUSAqLwotICAgICAgICAgIERPX0dURVEKKyAgICAgICAgICBJbnNfR1RFUSggYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg1NDogIC8qIEVRICovCi0gICAgICAgICAgRE9fRVEKKyAgICAgICAgICBJbnNfRVEoIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4NTU6ICAvKiBORVEgKi8KLSAgICAgICAgICBET19ORVEKKyAgICAgICAgICBJbnNfTkVRKCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDU2OiAgLyogT0REICovCi0gICAgICAgICAgRE9fT0RECisgICAgICAgICAgSW5zX09ERCggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDU3OiAgLyogRVZFTiAqLwotICAgICAgICAgIERPX0VWRU4KKyAgICAgICAgICBJbnNfRVZFTiggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDU4OiAgLyogSUYgKi8KLSAgICAgICAgICBJbnNfSUYoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX0lGKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4NTk6ICAvKiBFSUYgKi8KLSAgICAgICAgICAvKiBkbyBub3RoaW5nICovCisgICAgICAgICAgSW5zX0VJRigpOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg1QTogIC8qIEFORCAqLwotICAgICAgICAgIERPX0FORAorICAgICAgICAgIEluc19BTkQoIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4NUI6ICAvKiBPUiAqLwotICAgICAgICAgIERPX09SCisgICAgICAgICAgSW5zX09SKCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDVDOiAgLyogTk9UICovCi0gICAgICAgICAgRE9fTk9UCisgICAgICAgICAgSW5zX05PVCggYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg1RDogIC8qIERFTFRBUDEgKi8KLSAgICAgICAgICBJbnNfREVMVEFQKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19ERUxUQVAoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg1RTogIC8qIFNEQiAqLwotICAgICAgICAgIERPX1NEQgorICAgICAgICAgIEluc19TREIoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg1RjogIC8qIFNEUyAqLwotICAgICAgICAgIERPX1NEUworICAgICAgICAgIEluc19TRFMoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg2MDogIC8qIEFERCAqLwotICAgICAgICAgIERPX0FERAorICAgICAgICAgIEluc19BREQoIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4NjE6ICAvKiBTVUIgKi8KLSAgICAgICAgICBET19TVUIKKyAgICAgICAgICBJbnNfU1VCKCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDYyOiAgLyogRElWICovCi0gICAgICAgICAgRE9fRElWCisgICAgICAgICAgSW5zX0RJViggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDYzOiAgLyogTVVMICovCi0gICAgICAgICAgRE9fTVVMCisgICAgICAgICAgSW5zX01VTCggYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg2NDogIC8qIEFCUyAqLwotICAgICAgICAgIERPX0FCUworICAgICAgICAgIEluc19BQlMoIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4NjU6ICAvKiBORUcgKi8KLSAgICAgICAgICBET19ORUcKKyAgICAgICAgICBJbnNfTkVHKCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDY2OiAgLyogRkxPT1IgKi8KLSAgICAgICAgICBET19GTE9PUgorICAgICAgICAgIEluc19GTE9PUiggYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg2NzogIC8qIENFSUxJTkcgKi8KLSAgICAgICAgICBET19DRUlMSU5HCisgICAgICAgICAgSW5zX0NFSUxJTkcoIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4Njg6ICAvKiBST1VORCAqLwogICAgICAgICBjYXNlIDB4Njk6ICAvKiBST1VORCAqLwogICAgICAgICBjYXNlIDB4NkE6ICAvKiBST1VORCAqLwogICAgICAgICBjYXNlIDB4NkI6ICAvKiBST1VORCAqLwotICAgICAgICAgIERPX1JPVU5ECisgICAgICAgICAgSW5zX1JPVU5EKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4NkM6ICAvKiBOUk9VTkQgKi8KICAgICAgICAgY2FzZSAweDZEOiAgLyogTlJPVU5EICovCiAgICAgICAgIGNhc2UgMHg2RTogIC8qIE5SUlVORCAqLwogICAgICAgICBjYXNlIDB4NkY6ICAvKiBOUk9VTkQgKi8KLSAgICAgICAgICBET19OUk9VTkQKKyAgICAgICAgICBJbnNfTlJPVU5EKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4NzA6ICAvKiBXQ1ZURiAqLwotICAgICAgICAgIERPX1dDVlRGCisgICAgICAgICAgSW5zX1dDVlRGKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4NzE6ICAvKiBERUxUQVAyICovCiAgICAgICAgIGNhc2UgMHg3MjogIC8qIERFTFRBUDMgKi8KLSAgICAgICAgICBJbnNfREVMVEFQKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19ERUxUQVAoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg3MzogIC8qIERFTFRBQzAgKi8KICAgICAgICAgY2FzZSAweDc0OiAgLyogREVMVEFDMSAqLwogICAgICAgICBjYXNlIDB4NzU6ICAvKiBERUxUQUMyICovCi0gICAgICAgICAgSW5zX0RFTFRBQyggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgICBJbnNfREVMVEFDKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4NzY6ICAvKiBTUk9VTkQgKi8KLSAgICAgICAgICBET19TUk9VTkQKKyAgICAgICAgICBJbnNfU1JPVU5EKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4Nzc6ICAvKiBTNDVSb3VuZCAqLwotICAgICAgICAgIERPX1M0NVJPVU5ECisgICAgICAgICAgSW5zX1M0NVJPVU5EKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4Nzg6ICAvKiBKUk9UICovCi0gICAgICAgICAgRE9fSlJPVAorICAgICAgICAgIEluc19KUk9UKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4Nzk6ICAvKiBKUk9GICovCi0gICAgICAgICAgRE9fSlJPRgorICAgICAgICAgIEluc19KUk9GKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4N0E6ICAvKiBST0ZGICovCi0gICAgICAgICAgRE9fUk9GRgorICAgICAgICAgIEluc19ST0ZGKCBleGMgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4N0I6ICAvKiA/Pz8/ICovCi0gICAgICAgICAgSW5zX1VOS05PV04oIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX1VOS05PV04oIGV4YyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg3QzogIC8qIFJVVEcgKi8KLSAgICAgICAgICBET19SVVRHCisgICAgICAgICAgSW5zX1JVVEcoIGV4YyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg3RDogIC8qIFJEVEcgKi8KLSAgICAgICAgICBET19SRFRHCisgICAgICAgICAgSW5zX1JEVEcoIGV4YyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg3RTogIC8qIFNBTkdXICovCi0gICAgICAgIGNhc2UgMHg3RjogIC8qIEFBICAgICovCi0gICAgICAgICAgLyogbm90aGluZyAtIG9ic29sZXRlICovCisgICAgICAgICAgSW5zX1NBTkdXKCk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDdGOiAgLyogQUEgKi8KKyAgICAgICAgICBJbnNfQUEoKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4ODA6ICAvKiBGTElQUFQgKi8KLSAgICAgICAgICBJbnNfRkxJUFBUKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19GTElQUFQoIGV4YyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg4MTogIC8qIEZMSVBSR09OICovCi0gICAgICAgICAgSW5zX0ZMSVBSR09OKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19GTElQUkdPTiggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDgyOiAgLyogRkxJUFJHT0ZGICovCi0gICAgICAgICAgSW5zX0ZMSVBSR09GRiggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgICBJbnNfRkxJUFJHT0ZGKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4ODM6ICAvKiBVTktOT1dOICovCiAgICAgICAgIGNhc2UgMHg4NDogIC8qIFVOS05PV04gKi8KLSAgICAgICAgICBJbnNfVU5LTk9XTiggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgICBJbnNfVU5LTk9XTiggZXhjICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDg1OiAgLyogU0NBTkNUUkwgKi8KLSAgICAgICAgICBJbnNfU0NBTkNUUkwoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX1NDQU5DVFJMKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIDB4ODY6ICAvKiBTRFBWVEwgKi8KLSAgICAgICAgY2FzZSAweDg3OiAgLyogU0RQVlRMICovCi0gICAgICAgICAgSW5zX1NEUFZUTCggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgY2FzZSAweDg2OiAgLyogU0RQdlRMICovCisgICAgICAgIGNhc2UgMHg4NzogIC8qIFNEUHZUTCAqLworICAgICAgICAgIEluc19TRFBWVEwoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg4ODogIC8qIEdFVElORk8gKi8KLSAgICAgICAgICBJbnNfR0VUSU5GTyggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgICBJbnNfR0VUSU5GTyggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDg5OiAgLyogSURFRiAqLwotICAgICAgICAgIEluc19JREVGKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19JREVGKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4OEE6ICAvKiBST0xMICovCi0gICAgICAgICAgSW5zX1JPTEwoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX1JPTEwoIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4OEI6ICAvKiBNQVggKi8KLSAgICAgICAgICBET19NQVgKKyAgICAgICAgICBJbnNfTUFYKCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDhDOiAgLyogTUlOICovCi0gICAgICAgICAgRE9fTUlOCisgICAgICAgICAgSW5zX01JTiggYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgMHg4RDogIC8qIFNDQU5UWVBFICovCi0gICAgICAgICAgSW5zX1NDQU5UWVBFKCBFWEVDX0FSR18gYXJncyApOworICAgICAgICAgIEluc19TQ0FOVFlQRSggZXhjLCBhcmdzICk7CiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAweDhFOiAgLyogSU5TVENUUkwgKi8KLSAgICAgICAgICBJbnNfSU5TVENUUkwoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX0lOU1RDVFJMKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDB4OEY6Ci0gICAgICAgICAgSW5zX1VOS05PV04oIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgSW5zX1VOS05PV04oIGV4YyApOwogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgaWYgKCBvcGNvZGUgPj0gMHhFMCApCi0gICAgICAgICAgICBJbnNfTUlSUCggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgICAgIEluc19NSVJQKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBlbHNlIGlmICggb3Bjb2RlID49IDB4QzAgKQotICAgICAgICAgICAgSW5zX01EUlAoIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgICBJbnNfTURSUCggZXhjLCBhcmdzICk7CiAgICAgICAgICAgZWxzZSBpZiAoIG9wY29kZSA+PSAweEI4ICkKLSAgICAgICAgICAgIEluc19QVVNIVyggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgICAgIEluc19QVVNIVyggZXhjLCBhcmdzICk7CiAgICAgICAgICAgZWxzZSBpZiAoIG9wY29kZSA+PSAweEIwICkKLSAgICAgICAgICAgIEluc19QVVNIQiggRVhFQ19BUkdfIGFyZ3MgKTsKKyAgICAgICAgICAgIEluc19QVVNIQiggZXhjLCBhcmdzICk7CiAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgSW5zX1VOS05PV04oIEVYRUNfQVJHXyBhcmdzICk7CisgICAgICAgICAgICBJbnNfVU5LTk9XTiggZXhjICk7CiAgICAgICAgIH0KLQogICAgICAgfQogCi0jZWxzZQotCi0gICAgICBJbnN0cnVjdF9EaXNwYXRjaFtDVVIub3Bjb2RlXSggRVhFQ19BUkdfICZDVVIuc3RhY2tbQ1VSLmFyZ3NdICk7Ci0KLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX0lOVEVSUFJFVEVSX1NXSVRDSCAqLwotCi0gICAgICBpZiAoIENVUi5lcnJvciApCisgICAgICBpZiAoIGV4Yy0+ZXJyb3IgKQogICAgICAgewotICAgICAgICBzd2l0Y2ggKCBDVVIuZXJyb3IgKQorICAgICAgICBzd2l0Y2ggKCBleGMtPmVycm9yICkKICAgICAgICAgewogICAgICAgICAgIC8qIGxvb2tpbmcgZm9yIHJlZGVmaW5lZCBpbnN0cnVjdGlvbnMgKi8KICAgICAgICAgY2FzZSBGVF9FUlIoIEludmFsaWRfT3Bjb2RlICk6CiAgICAgICAgICAgewotICAgICAgICAgICAgVFRfRGVmUmVjb3JkKiAgZGVmICAgPSBDVVIuSURlZnM7Ci0gICAgICAgICAgICBUVF9EZWZSZWNvcmQqICBsaW1pdCA9IGRlZiArIENVUi5udW1JRGVmczsKKyAgICAgICAgICAgIFRUX0RlZlJlY29yZCogIGRlZiAgID0gZXhjLT5JRGVmczsKKyAgICAgICAgICAgIFRUX0RlZlJlY29yZCogIGxpbWl0ID0gZGVmICsgZXhjLT5udW1JRGVmczsKIAogCiAgICAgICAgICAgICBmb3IgKCA7IGRlZiA8IGxpbWl0OyBkZWYrKyApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICggZGVmLT5hY3RpdmUgJiYgQ1VSLm9wY29kZSA9PSAoRlRfQnl0ZSlkZWYtPm9wYyApCisgICAgICAgICAgICAgIGlmICggZGVmLT5hY3RpdmUgJiYgZXhjLT5vcGNvZGUgPT0gKEZUX0J5dGUpZGVmLT5vcGMgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgVFRfQ2FsbFJlYyogIGNhbGxyZWM7CiAKIAotICAgICAgICAgICAgICAgIGlmICggQ1VSLmNhbGxUb3AgPj0gQ1VSLmNhbGxTaXplICkKKyAgICAgICAgICAgICAgICBpZiAoIGV4Yy0+Y2FsbFRvcCA+PSBleGMtPmNhbGxTaXplICkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBDVVIuZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKKyAgICAgICAgICAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9SZWZlcmVuY2UgKTsKICAgICAgICAgICAgICAgICAgIGdvdG8gTEVycm9yTGFiZWxfOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGNhbGxyZWMgPSAmQ1VSLmNhbGxTdGFja1tDVVIuY2FsbFRvcF07CisgICAgICAgICAgICAgICAgY2FsbHJlYyA9ICZleGMtPmNhbGxTdGFja1tleGMtPmNhbGxUb3BdOwogCi0gICAgICAgICAgICAgICAgY2FsbHJlYy0+Q2FsbGVyX1JhbmdlID0gQ1VSLmN1clJhbmdlOwotICAgICAgICAgICAgICAgIGNhbGxyZWMtPkNhbGxlcl9JUCAgICA9IENVUi5JUCArIDE7CisgICAgICAgICAgICAgICAgY2FsbHJlYy0+Q2FsbGVyX1JhbmdlID0gZXhjLT5jdXJSYW5nZTsKKyAgICAgICAgICAgICAgICBjYWxscmVjLT5DYWxsZXJfSVAgICAgPSBleGMtPklQICsgMTsKICAgICAgICAgICAgICAgICBjYWxscmVjLT5DdXJfQ291bnQgICAgPSAxOwogICAgICAgICAgICAgICAgIGNhbGxyZWMtPkRlZiAgICAgICAgICA9IGRlZjsKIAotICAgICAgICAgICAgICAgIGlmICggSU5TX0dvdG9fQ29kZVJhbmdlKCBkZWYtPnJhbmdlLCBkZWYtPnN0YXJ0ICkgPT0gRkFJTFVSRSApCisgICAgICAgICAgICAgICAgaWYgKCBJbnNfR290b19Db2RlUmFuZ2UoIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmLT5yYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmLT5zdGFydCApID09IEZBSUxVUkUgKQogICAgICAgICAgICAgICAgICAgZ290byBMRXJyb3JMYWJlbF87CiAKICAgICAgICAgICAgICAgICBnb3RvIExTdWl0ZUxhYmVsXzsKQEAgLTg5NDMsNyArODIwNSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogCi0gICAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIEludmFsaWRfT3Bjb2RlICk7CisgICAgICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX09wY29kZSApOwogICAgICAgICAgIGdvdG8gTEVycm9yTGFiZWxfOwogCiAjaWYgMApAQCAtODk2MSwxMCArODIyMywxMCBAQAogICAgICAgICB9CiAgICAgICB9CiAKLSAgICAgIENVUi50b3AgPSBDVVIubmV3X3RvcDsKKyAgICAgIGV4Yy0+dG9wID0gZXhjLT5uZXdfdG9wOwogCi0gICAgICBpZiAoIENVUi5zdGVwX2lucyApCi0gICAgICAgIENVUi5JUCArPSBDVVIubGVuZ3RoOworICAgICAgaWYgKCBleGMtPnN0ZXBfaW5zICkKKyAgICAgICAgZXhjLT5JUCArPSBleGMtPmxlbmd0aDsKIAogICAgICAgLyogaW5jcmVtZW50IGluc3RydWN0aW9uIGNvdW50ZXIgYW5kIGNoZWNrIGlmIHdlIGRpZG4ndCAqLwogICAgICAgLyogcnVuIHRoaXMgcHJvZ3JhbSBmb3IgdG9vIGxvbmcgKGUuZy4gaW5maW5pdGUgbG9vcHMpLiAqLwpAQCAtODk3Miw0OCArODIzNCwzOCBAQAogICAgICAgICByZXR1cm4gRlRfVEhST1coIEV4ZWN1dGlvbl9Ub29fTG9uZyApOwogCiAgICAgTFN1aXRlTGFiZWxfOgotICAgICAgaWYgKCBDVVIuSVAgPj0gQ1VSLmNvZGVTaXplICkKKyAgICAgIGlmICggZXhjLT5JUCA+PSBleGMtPmNvZGVTaXplICkKICAgICAgIHsKLSAgICAgICAgaWYgKCBDVVIuY2FsbFRvcCA+IDAgKQorICAgICAgICBpZiAoIGV4Yy0+Y2FsbFRvcCA+IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgQ1VSLmVycm9yID0gRlRfVEhST1coIENvZGVfT3ZlcmZsb3cgKTsKKyAgICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIENvZGVfT3ZlcmZsb3cgKTsKICAgICAgICAgICBnb3RvIExFcnJvckxhYmVsXzsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgZ290byBMTm9fRXJyb3JfOwogICAgICAgfQotICAgIH0gd2hpbGUgKCAhQ1VSLmluc3RydWN0aW9uX3RyYXAgKTsKKyAgICB9IHdoaWxlICggIWV4Yy0+aW5zdHJ1Y3Rpb25fdHJhcCApOwogCiAgIExOb19FcnJvcl86Ci0KLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NUQVRJQ19SQVNURVIKLSAgICAqZXhjID0gY3VyOwotI2VuZGlmCi0KICAgICByZXR1cm4gRlRfRXJyX09rOwogCiAgIExFcnJvckNvZGVPdmVyZmxvd186Ci0gICAgQ1VSLmVycm9yID0gRlRfVEhST1coIENvZGVfT3ZlcmZsb3cgKTsKKyAgICBleGMtPmVycm9yID0gRlRfVEhST1coIENvZGVfT3ZlcmZsb3cgKTsKIAogICBMRXJyb3JMYWJlbF86Ci0KLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NUQVRJQ19SQVNURVIKLSAgICAqZXhjID0gY3VyOwotI2VuZGlmCi0KICAgICAvKiBJZiBhbnkgZXJyb3JzIGhhdmUgb2NjdXJyZWQsIGZ1bmN0aW9uIHRhYmxlcyBtYXkgYmUgYnJva2VuLiAqLwogICAgIC8qIEZvcmNlIGEgcmUtZXhlY3V0aW9uIG9mIGBwcmVwJyBhbmQgYGZwZ20nIHRhYmxlcyBpZiBubyAgICAgICovCiAgICAgLyogYnl0ZWNvZGUgZGVidWdnZXIgaXMgcnVuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBpZiAoIENVUi5lcnJvcgotICAgICAgICAgJiYgIUNVUi5pbnN0cnVjdGlvbl90cmFwCi0gICAgICAgICAmJiBDVVIuY3VyUmFuZ2UgPT0gdHRfY29kZXJhbmdlX2dseXBoICkKKyAgICBpZiAoIGV4Yy0+ZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAhZXhjLT5pbnN0cnVjdGlvbl90cmFwICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5jdXJSYW5nZSA9PSB0dF9jb2RlcmFuZ2VfZ2x5cGggKQogICAgIHsKLSAgICAgIEZUX1RSQUNFMSgoICIgIFRoZSBpbnRlcnByZXRlciByZXR1cm5lZCBlcnJvciAweCV4XG4iLCBDVVIuZXJyb3IgKSk7CisgICAgICBGVF9UUkFDRTEoKCAiICBUaGUgaW50ZXJwcmV0ZXIgcmV0dXJuZWQgZXJyb3IgMHgleFxuIiwgZXhjLT5lcnJvciApKTsKICAgICAgIGV4Yy0+c2l6ZS0+Ynl0ZWNvZGVfcmVhZHkgPSAtMTsKICAgICAgIGV4Yy0+c2l6ZS0+Y3Z0X3JlYWR5ICAgICAgPSAtMTsKICAgICB9CiAKLSAgICByZXR1cm4gQ1VSLmVycm9yOworICAgIHJldHVybiBleGMtPmVycm9yOwogICB9CiAKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaAppbmRleCAzMzNkZWNjLi4zMjcwNmQwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBieXRlY29kZSBpbnRlcnByZXRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA3LCAyMDEwLCAyMDEyLTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjYsMjMgKzI2LDYgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSNpZm5kZWYgVFRfQ09ORklHX09QVElPTl9TVEFUSUNfSU5URVJQUkVURVIgLyogaW5kaXJlY3QgaW1wbGVtZW50YXRpb24gKi8KLQotI2RlZmluZSBFWEVDX09QXyAgIFRUX0V4ZWNDb250ZXh0ICBleGMsCi0jZGVmaW5lIEVYRUNfT1AgICAgVFRfRXhlY0NvbnRleHQgIGV4YwotI2RlZmluZSBFWEVDX0FSR18gIGV4YywKLSNkZWZpbmUgRVhFQ19BUkcgICBleGMKLQotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0aWMgaW1wbGVtZW50YXRpb24gKi8KLQotI2RlZmluZSBFWEVDX09QXyAgIC8qIHZvaWQgKi8KLSNkZWZpbmUgRVhFQ19PUCAgICAvKiB2b2lkICovCi0jZGVmaW5lIEVYRUNfQVJHXyAgLyogdm9pZCAqLwotI2RlZmluZSBFWEVDX0FSRyAgIC8qIHZvaWQgKi8KLQotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1RBVElDX0lOVEVSUFJFVEVSICovCi0KLQogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFJvdW5kaW5nIG1vZGUgY29uc3RhbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNjcsMzMgKzUwLDM4IEBACiAKICAgLyogUm91bmRpbmcgZnVuY3Rpb24gKi8KICAgdHlwZWRlZiBGVF9GMjZEb3Q2Ci0gICgqVFRfUm91bmRfRnVuYykoIEVYRUNfT1BfIEZUX0YyNkRvdDYgIGRpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICBjb21wZW5zYXRpb24gKTsKKyAgKCpUVF9Sb3VuZF9GdW5jKSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgY29tcGVuc2F0aW9uICk7CiAKICAgLyogUG9pbnQgZGlzcGxhY2VtZW50IGFsb25nIHRoZSBmcmVlZG9tIHZlY3RvciByb3V0aW5lICovCiAgIHR5cGVkZWYgdm9pZAotICAoKlRUX01vdmVfRnVuYykoIEVYRUNfT1BfIFRUX0dseXBoWm9uZSAgem9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgIHBvaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgZGlzdGFuY2UgKTsKKyAgKCpUVF9Nb3ZlX0Z1bmMpKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgIFRUX0dseXBoWm9uZSAgICB6b25lLAorICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgICBwb2ludCwKKyAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UgKTsKIAogICAvKiBEaXN0YW5jZSBwcm9qZWN0aW9uIGFsb25nIG9uZSBvZiB0aGUgcHJvamVjdGlvbiB2ZWN0b3JzICovCiAgIHR5cGVkZWYgRlRfRjI2RG90NgotICAoKlRUX1Byb2plY3RfRnVuYykoIEVYRUNfT1BfIEZUX1BvcyAgIGR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgIGR5ICk7CisgICgqVFRfUHJvamVjdF9GdW5jKSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICAgZHgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICAgIGR5ICk7CiAKICAgLyogZ2V0dGluZyBjdXJyZW50IHBwZW0uICBUYWtlIGNhcmUgb2Ygbm9uLXNxdWFyZSBwaXhlbHMgaWYgbmVjZXNzYXJ5ICovCiAgIHR5cGVkZWYgRlRfTG9uZwotICAoKlRUX0N1cl9QcGVtX0Z1bmMpKCBFWEVDX09QICk7CisgICgqVFRfQ3VyX1BwZW1fRnVuYykoIFRUX0V4ZWNDb250ZXh0ICBleGMgKTsKIAogICAvKiByZWFkaW5nIGEgY3Z0IHZhbHVlLiAgVGFrZSBjYXJlIG9mIG5vbi1zcXVhcmUgcGl4ZWxzIGlmIG5lY2Vzc2FyeSAqLwogICB0eXBlZGVmIEZUX0YyNkRvdDYKLSAgKCpUVF9HZXRfQ1ZUX0Z1bmMpKCBFWEVDX09QXyBGVF9VTG9uZyAgaWR4ICk7CisgICgqVFRfR2V0X0NWVF9GdW5jKSggVFRfRXhlY0NvbnRleHQgIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgaWR4ICk7CiAKICAgLyogc2V0dGluZyBvciBtb3ZpbmcgYSBjdnQgdmFsdWUuICBUYWtlIGNhcmUgb2Ygbm9uLXNxdWFyZSBwaXhlbHMgICovCiAgIC8qIGlmIG5lY2Vzc2FyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICB0eXBlZGVmIHZvaWQKLSAgKCpUVF9TZXRfQ1ZUX0Z1bmMpKCBFWEVDX09QXyBGVF9VTG9uZyAgICBpZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgdmFsdWUgKTsKKyAgKCpUVF9TZXRfQ1ZUX0Z1bmMpKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIHZhbHVlICk7CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE3MCwxMSArMTU4LDExIEBACiAKICAgICBGVF9Mb25nICAgICAgICAgICAgdG9wOyAgICAgICAgLyogdG9wIG9mIGV4ZWMuIHN0YWNrICAgKi8KIAotICAgIEZUX1VJbnQgICAgICAgICAgICBzdGFja1NpemU7ICAvKiBzaXplIG9mIGV4ZWMuIHN0YWNrICAqLworICAgIEZUX0xvbmcgICAgICAgICAgICBzdGFja1NpemU7ICAvKiBzaXplIG9mIGV4ZWMuIHN0YWNrICAqLwogICAgIEZUX0xvbmcqICAgICAgICAgICBzdGFjazsgICAgICAvKiBjdXJyZW50IGV4ZWMuIHN0YWNrICAqLwogCiAgICAgRlRfTG9uZyAgICAgICAgICAgIGFyZ3M7Ci0gICAgRlRfVUludCAgICAgICAgICAgIG5ld190b3A7ICAgIC8qIG5ldyB0b3AgYWZ0ZXIgZXhlYy4gICovCisgICAgRlRfTG9uZyAgICAgICAgICAgIG5ld190b3A7ICAgIC8qIG5ldyB0b3AgYWZ0ZXIgZXhlYy4gICovCiAKICAgICBUVF9HbHlwaFpvbmVSZWMgICAgenAwLCAgICAgICAgLyogem9uZSByZWNvcmRzICovCiAgICAgICAgICAgICAgICAgICAgICAgIHpwMSwKQEAgLTI2NCwxOCArMjUyLDIyIEBACiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCiAgICAgVFRfUm91bmRfRnVuYyAgICAgIGZ1bmNfcm91bmRfc3BobjsgICAvKiBzdWJwaXhlbCByb3VuZGluZyBmdW5jdGlvbiAqLwogCi0gICAgRlRfQm9vbCAgICAgICAgICAgIHN1YnBpeGVsOyAgICAgICAgICAvKiBVc2luZyBzdWJwaXhlbCBoaW50aW5nPyAgICAgICAqLworICAgIEZUX0Jvb2wgICAgICAgICAgICBzdWJwaXhlbF9oaW50aW5nOyAgLyogVXNpbmcgc3VicGl4ZWwgaGludGluZz8gICAgICAgKi8KICAgICBGVF9Cb29sICAgICAgICAgICAgaWdub3JlX3hfbW9kZTsgICAgIC8qIFN0YW5kYXJkIHJlbmRlcmluZyBtb2RlIGZvciAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdWJwaXhlbCBoaW50aW5nLiAgT24gaWYgZ3JheSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3Igc3VicGl4ZWwgaGludGluZyBpcyBvbi4gICAgKi8KIAotICAgIC8qIFRoZSBmb2xsb3dpbmcgNCBhcmVuJ3QgZnVsbHkgaW1wbGVtZW50ZWQgYnV0IGhlcmUgZm9yIE1TIHJhc3Rlcml6ZXIgKi8KKyAgICAvKiBUaGUgZm9sbG93aW5nIDYgYXJlbid0IGZ1bGx5IGltcGxlbWVudGVkIGJ1dCBoZXJlIGZvciBNUyByYXN0ZXJpemVyICovCiAgICAgLyogY29tcGF0aWJpbGl0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIEZUX0Jvb2wgICAgICAgICAgICBjb21wYXRpYmxlX3dpZHRoczsgICAgIC8qIGNvbXBhdGlibGUgd2lkdGhzPyAgICAgICAgKi8KICAgICBGVF9Cb29sICAgICAgICAgICAgc3ltbWV0cmljYWxfc21vb3RoaW5nOyAvKiBzeW1tZXRyaWNhbF9zbW9vdGhpbmc/ICAgICovCiAgICAgRlRfQm9vbCAgICAgICAgICAgIGJncjsgICAgICAgICAgICAgICAgICAgLyogYmdyIGluc3RlYWQgb2YgcmdiPyAgICAgICAqLworICAgIEZUX0Jvb2wgICAgICAgICAgICB2ZXJ0aWNhbF9sY2Q7ICAgICAgICAgIC8qIGxvbmcgc2lkZSBvZiBMQ0Qgc3VicGl4ZWwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWN0YW5nbGVzIGlzIGhvcml6b250YWwgICovCiAgICAgRlRfQm9vbCAgICAgICAgICAgIHN1YnBpeGVsX3Bvc2l0aW9uZWQ7ICAgLyogc3VicGl4ZWwgcG9zaXRpb25lZCAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChEaXJlY3RXcml0ZSBDbGVhclR5cGUpPyAgKi8KKyAgICBGVF9Cb29sICAgICAgICAgICAgZ3JheV9jbGVhcnR5cGU7ICAgICAgICAvKiBDbGVhclR5cGUgaGludGluZyBidXQgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ3JheXNjYWxlIHJlbmRlcmluZyAgICAgICAqLwogCiAgICAgRlRfSW50ICAgICAgICAgICAgIHJhc3Rlcml6ZXJfdmVyc2lvbjsgICAgLyogTVMgcmFzdGVyaXplciB2ZXJzaW9uICAgICAqLwogCkBAIC0zMTUsNyArMzA3LDcgQEAKICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKICAgVXBkYXRlX01heCggRlRfTWVtb3J5ICBtZW1vcnksCiAgICAgICAgICAgICAgIEZUX1VMb25nKiAgc2l6ZSwKLSAgICAgICAgICAgICAgRlRfTG9uZyAgICBtdWx0aXBsaWVyLAorICAgICAgICAgICAgICBGVF9VTG9uZyAgIG11bHRpcGxpZXIsCiAgICAgICAgICAgICAgIHZvaWQqICAgICAgX3BidWZmLAogICAgICAgICAgICAgICBGVF9VTG9uZyAgIG5ld19tYXggKTsKICNlbmRpZiAvKiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KQEAgLTMzOSw2ICszMzEsNyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIE9ubHkgdGhlIGdseXBoIGxvYWRlciBhbmQgZGVidWdnZXIgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbi4gICAgICAqLworICAvKiAgICAoQW5kIHJpZ2h0IG5vdyBvbmx5IHRoZSBnbHlwaCBsb2FkZXIgdXNlcyBpdC4pICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggVFRfRXhlY0NvbnRleHQgKQogICBUVF9OZXdfQ29udGV4dCggVFRfRHJpdmVyICBkcml2ZXIgKTsKQEAgLTM1OCw4ICszNTEsNyBAQAogICAgICAgICAgICAgICAgICAgIFRUX1NpemUgICAgICAgICBpbnMgKTsKIAogICBGVF9MT0NBTCggRlRfRXJyb3IgKQotICBUVF9SdW5fQ29udGV4dCggVFRfRXhlY0NvbnRleHQgIGV4ZWMsCi0gICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgZGVidWcgKTsKKyAgVFRfUnVuX0NvbnRleHQoIFRUX0V4ZWNDb250ZXh0ICBleGVjICk7CiAjZW5kaWYgLyogVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSICovCiAKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0b2Jqcy5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0b2Jqcy5jCmluZGV4IGE3MzUyOWQuLjYwNjBkNmYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dG9ianMuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT2JqZWN0cyBtYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE5MSw3ICsxOTEsNyBAQAogICB7CiAgICAgRlRfRXJyb3IgICBlcnJvcjsKICAgICBGVF9VSW50MzIgIGNoZWNrc3VtID0gMDsKLSAgICBpbnQgICAgICAgIGk7CisgICAgRlRfVUludCAgICBpOwogCiAKICAgICBpZiAoIEZUX0ZSQU1FX0VOVEVSKCBsZW5ndGggKSApCkBAIC0yMDAsOCArMjAwLDggQEAKICAgICBmb3IgKCA7IGxlbmd0aCA+IDM7IGxlbmd0aCAtPSA0ICkKICAgICAgIGNoZWNrc3VtICs9IChGVF9VSW50MzIpRlRfR0VUX1VMT05HKCk7CiAKLSAgICBmb3IgKCBpID0gMzsgbGVuZ3RoID4gMDsgbGVuZ3RoIC0tLCBpLS0gKQotICAgICAgY2hlY2tzdW0gKz0gKEZUX1VJbnQzMikoIEZUX0dFVF9CWVRFKCkgPDwgKCBpICogOCApICk7CisgICAgZm9yICggaSA9IDM7IGxlbmd0aCA+IDA7IGxlbmd0aC0tLCBpLS0gKQorICAgICAgY2hlY2tzdW0gKz0gKEZUX1VJbnQzMilGVF9HRVRfQllURSgpIDw8ICggaSAqIDggKTsKIAogICAgIEZUX0ZSQU1FX0VYSVQoKTsKIApAQCAtMjU2LDg5ICsyNTYsODkgQEAKICNkZWZpbmUgVFJJQ0tfU0ZOVF9JRF9wcmVwICAyCiAKICAgICAgIHsgLyogTWluZ0xpVSAxOTk1ICovCi0gICAgICAgIHsgMHgwNWJjZjA1OCwgMHgwMDAwMDJlNCB9LCAvKiBjdnQgICovCi0gICAgICAgIHsgMHgyODIzM2JmMSwgMHgwMDAwODdjNCB9LCAvKiBmcGdtICovCi0gICAgICAgIHsgMHhhMzQ0YTFlYSwgMHgwMDAwMDFlMSB9ICAvKiBwcmVwICovCisgICAgICAgIHsgMHgwNUJDRjA1OFVMLCAweDAwMDAwMkU0VUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4MjgyMzNCRjFVTCwgMHgwMDAwODdDNFVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweEEzNDRBMUVBVUwsIDB4MDAwMDAxRTFVTCB9ICAvKiBwcmVwICovCiAgICAgICB9LAogICAgICAgeyAvKiBNaW5nTGlVIDE5OTYtICovCi0gICAgICAgIHsgMHgwNWJjZjA1OCwgMHgwMDAwMDJlNCB9LCAvKiBjdnQgICovCi0gICAgICAgIHsgMHgyODIzM2JmMSwgMHgwMDAwODdjNCB9LCAvKiBmcGdtICovCi0gICAgICAgIHsgMHhhMzQ0YTFlYiwgMHgwMDAwMDFlMSB9ICAvKiBwcmVwICovCisgICAgICAgIHsgMHgwNUJDRjA1OFVMLCAweDAwMDAwMkU0VUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4MjgyMzNCRjFVTCwgMHgwMDAwODdDNFVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweEEzNDRBMUVCVUwsIDB4MDAwMDAxRTFVTCB9ICAvKiBwcmVwICovCiAgICAgICB9LAogICAgICAgeyAvKiBERkthaVNodSAqLwotICAgICAgICB7IDB4MTFlNWVhZDQsIDB4MDAwMDAzNTAgfSwgLyogY3Z0ICAqLwotICAgICAgICB7IDB4NWEzMGNhM2IsIDB4MDAwMDkwNjMgfSwgLyogZnBnbSAqLwotICAgICAgICB7IDB4MTNhNDI2MDIsIDB4MDAwMDAwN2UgfSAgLyogcHJlcCAqLworICAgICAgICB7IDB4MTFFNUVBRDRVTCwgMHgwMDAwMDM1MFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweDVBMzBDQTNCVUwsIDB4MDAwMDkwNjNVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHgxM0E0MjYwMlVMLCAweDAwMDAwMDdFVUwgfSAgLyogcHJlcCAqLwogICAgICAgfSwKICAgICAgIHsgLyogSHVhVGlhbkthaVRpICovCi0gICAgICAgIHsgMHhmZmZiZmZmYywgMHgwMDAwMDAwOCB9LCAvKiBjdnQgICovCi0gICAgICAgIHsgMHg5YzllNDhiOCwgMHgwMDAwYmVhMiB9LCAvKiBmcGdtICovCi0gICAgICAgIHsgMHg3MDAyMDExMiwgMHgwMDAwMDAwOCB9ICAvKiBwcmVwICovCisgICAgICAgIHsgMHhGRkZCRkZGQ1VMLCAweDAwMDAwMDA4VUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4OUM5RTQ4QjhVTCwgMHgwMDAwQkVBMlVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweDcwMDIwMTEyVUwsIDB4MDAwMDAwMDhVTCB9ICAvKiBwcmVwICovCiAgICAgICB9LAogICAgICAgeyAvKiBIdWFUaWFuU29uZ1RpICovCi0gICAgICAgIHsgMHhmZmZiZmZmYywgMHgwMDAwMDAwOCB9LCAvKiBjdnQgICovCi0gICAgICAgIHsgMHgwYTVhMDQ4MywgMHgwMDAxN2MzOSB9LCAvKiBmcGdtICovCi0gICAgICAgIHsgMHg3MDAyMDExMiwgMHgwMDAwMDAwOCB9ICAvKiBwcmVwICovCisgICAgICAgIHsgMHhGRkZCRkZGQ1VMLCAweDAwMDAwMDA4VUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4MEE1QTA0ODNVTCwgMHgwMDAxN0MzOVVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweDcwMDIwMTEyVUwsIDB4MDAwMDAwMDhVTCB9ICAvKiBwcmVwICovCiAgICAgICB9LAogICAgICAgeyAvKiBORUMgZmFkcG9wNy50dGYgKi8KLSAgICAgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sIC8qIGN2dCAgKi8KLSAgICAgICAgeyAweDQwYzkyNTU1LCAweDAwMDAwMGU1IH0sIC8qIGZwZ20gKi8KLSAgICAgICAgeyAweGEzOWI1OGUzLCAweDAwMDAxMTdjIH0gIC8qIHByZXAgKi8KKyAgICAgICAgeyAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHg0MEM5MjU1NVVMLCAweDAwMDAwMEU1VUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4QTM5QjU4RTNVTCwgMHgwMDAwMTE3Q1VMIH0gIC8qIHByZXAgKi8KICAgICAgIH0sCiAgICAgICB7IC8qIE5FQyBmYWRyZWk1LnR0ZiAqLwotICAgICAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwgLyogY3Z0ICAqLwotICAgICAgICB7IDB4MzNjNDE2NTIsIDB4MDAwMDAwZTUgfSwgLyogZnBnbSAqLwotICAgICAgICB7IDB4MjZkNmM1MmEsIDB4MDAwMDBmNmEgfSAgLyogcHJlcCAqLworICAgICAgICB7IDB4MDAwMDAwMDBVTCwgMHgwMDAwMDAwMFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweDMzQzQxNjUyVUwsIDB4MDAwMDAwRTVVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHgyNkQ2QzUyQVVMLCAweDAwMDAwRjZBVUwgfSAgLyogcHJlcCAqLwogICAgICAgfSwKICAgICAgIHsgLyogTkVDIGZhbmdvdDcudHRmICovCi0gICAgICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LCAvKiBjdnQgICovCi0gICAgICAgIHsgMHg2ZGIxNjUxZCwgMHgwMDAwMDE5ZCB9LCAvKiBmcGdtICovCi0gICAgICAgIHsgMHg2YzZlNGIwMywgMHgwMDAwMjQ5MiB9ICAvKiBwcmVwICovCisgICAgICAgIHsgMHgwMDAwMDAwMFVMLCAweDAwMDAwMDAwVUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4NkRCMTY1MURVTCwgMHgwMDAwMDE5RFVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweDZDNkU0QjAzVUwsIDB4MDAwMDI0OTJVTCB9ICAvKiBwcmVwICovCiAgICAgICB9LAogICAgICAgeyAvKiBORUMgZmFuZ3lvNS50dGYgKi8KLSAgICAgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sIC8qIGN2dCAgKi8KLSAgICAgICAgeyAweDQwYzkyNTU1LCAweDAwMDAwMGU1IH0sIC8qIGZwZ20gKi8KLSAgICAgICAgeyAweGRlNTFmYWQwLCAweDAwMDAxMTdjIH0gIC8qIHByZXAgKi8KKyAgICAgICAgeyAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHg0MEM5MjU1NVVMLCAweDAwMDAwMEU1VUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4REU1MUZBRDBVTCwgMHgwMDAwMTE3Q1VMIH0gIC8qIHByZXAgKi8KICAgICAgIH0sCiAgICAgICB7IC8qIE5FQyBmYW5reW81LnR0ZiAqLwotICAgICAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwgLyogY3Z0ICAqLwotICAgICAgICB7IDB4ODVlNDc2NjQsIDB4MDAwMDAwZTUgfSwgLyogZnBnbSAqLwotICAgICAgICB7IDB4YTZjNjI4MzEsIDB4MDAwMDFjYWEgfSAgLyogcHJlcCAqLworICAgICAgICB7IDB4MDAwMDAwMDBVTCwgMHgwMDAwMDAwMFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweDg1RTQ3NjY0VUwsIDB4MDAwMDAwRTVVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHhBNkM2MjgzMVVMLCAweDAwMDAxQ0FBVUwgfSAgLyogcHJlcCAqLwogICAgICAgfSwKICAgICAgIHsgLyogTkVDIGZhbnJnbzUudHRmICovCi0gICAgICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LCAvKiBjdnQgICovCi0gICAgICAgIHsgMHgyZDg5MWNmZCwgMHgwMDAwMDE5ZCB9LCAvKiBmcGdtICovCi0gICAgICAgIHsgMHhhMDYwNDYzMywgMHgwMDAwMWRlOCB9ICAvKiBwcmVwICovCisgICAgICAgIHsgMHgwMDAwMDAwMFVMLCAweDAwMDAwMDAwVUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4MkQ4OTFDRkRVTCwgMHgwMDAwMDE5RFVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweEEwNjA0NjMzVUwsIDB4MDAwMDFERThVTCB9ICAvKiBwcmVwICovCiAgICAgICB9LAogICAgICAgeyAvKiBORUMgZmFuZ290NS50dGMgKi8KLSAgICAgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sIC8qIGN2dCAgKi8KLSAgICAgICAgeyAweDQwYWE3NzRjLCAweDAwMDAwMWNiIH0sIC8qIGZwZ20gKi8KLSAgICAgICAgeyAweDliNWNhYTk2LCAweDAwMDAxZjlhIH0gIC8qIHByZXAgKi8KKyAgICAgICAgeyAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHg0MEFBNzc0Q1VMLCAweDAwMDAwMUNCVUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4OUI1Q0FBOTZVTCwgMHgwMDAwMUY5QVVMIH0gIC8qIHByZXAgKi8KICAgICAgIH0sCiAgICAgICB7IC8qIE5FQyBmYW5taW4zLnR0YyAqLwotICAgICAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwgLyogY3Z0ICAqLwotICAgICAgICB7IDB4MGQzZGU5Y2IsIDB4MDAwMDAxNDEgfSwgLyogZnBnbSAqLwotICAgICAgICB7IDB4ZDQxMjc3NjYsIDB4MDAwMDIyODAgfSAgLyogcHJlcCAqLworICAgICAgICB7IDB4MDAwMDAwMDBVTCwgMHgwMDAwMDAwMFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweDBEM0RFOUNCVUwsIDB4MDAwMDAxNDFVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHhENDEyNzc2NlVMLCAweDAwMDAyMjgwVUwgfSAgLyogcHJlcCAqLwogICAgICAgfSwKICAgICAgIHsgLyogTkVDIEZBLUdvdGhpYywgMTk5NiAqLwotICAgICAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwgLyogY3Z0ICAqLwotICAgICAgICB7IDB4NGE2OTI2OTgsIDB4MDAwMDAxZjAgfSwgLyogZnBnbSAqLwotICAgICAgICB7IDB4MzQwZDQzNDYsIDB4MDAwMDFmY2EgfSAgLyogcHJlcCAqLworICAgICAgICB7IDB4MDAwMDAwMDBVTCwgMHgwMDAwMDAwMFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweDRBNjkyNjk4VUwsIDB4MDAwMDAxRjBVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHgzNDBENDM0NlVMLCAweDAwMDAxRkNBVUwgfSAgLyogcHJlcCAqLwogICAgICAgfSwKICAgICAgIHsgLyogTkVDIEZBLU1pbmNob3UsIDE5OTYgKi8KLSAgICAgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sIC8qIGN2dCAgKi8KLSAgICAgICAgeyAweGNkMzRjNjA0LCAweDAwMDAwMTY2IH0sIC8qIGZwZ20gKi8KLSAgICAgICAgeyAweDZjZjMxMDQ2LCAweDAwMDAyMmIwIH0gIC8qIHByZXAgKi8KKyAgICAgICAgeyAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHhDRDM0QzYwNFVMLCAweDAwMDAwMTY2VUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4NkNGMzEwNDZVTCwgMHgwMDAwMjJCMFVMIH0gIC8qIHByZXAgKi8KICAgICAgIH0sCiAgICAgICB7IC8qIE5FQyBGQS1Sb3VuZEdvdGhpY0IsIDE5OTYgKi8KLSAgICAgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sIC8qIGN2dCAgKi8KLSAgICAgICAgeyAweDVkYTc1MzE1LCAweDAwMDAwMTlkIH0sIC8qIGZwZ20gKi8KLSAgICAgICAgeyAweDQwNzQ1YTVmLCAweDAwMDAyMmUwIH0gIC8qIHByZXAgKi8KKyAgICAgICAgeyAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHg1REE3NTMxNVVMLCAweDAwMDAwMTlEVUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4NDA3NDVBNUZVTCwgMHgwMDAwMjJFMFVMIH0gIC8qIHByZXAgKi8KICAgICAgIH0sCiAgICAgICB7IC8qIE5FQyBGQS1Sb3VuZEdvdGhpY00sIDE5OTYgKi8KLSAgICAgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sIC8qIGN2dCAgKi8KLSAgICAgICAgeyAweGYwNTVmYzQ4LCAweDAwMDAwMWMyIH0sIC8qIGZwZ20gKi8KLSAgICAgICAgeyAweDM5MDBkZWQzLCAweDAwMDAxZTE4IH0gIC8qIHByZXAgKi8KKyAgICAgICAgeyAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHhGMDU1RkM0OFVMLCAweDAwMDAwMUMyVUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4MzkwMERFRDNVTCwgMHgwMDAwMUUxOFVMIH0gIC8qIHByZXAgKi8KICAgICAgIH0KICAgICB9OwogCkBAIC00OTAsNyArNDkwLDEwIEBACiAgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBzdHJlYW0gICAgIDo6IFRoZSBzb3VyY2UgZm9udCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2VfaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSBmb250IGZhY2UgaW4gdGhlIHJlc291cmNlLiAgICAgICAgICAqLworICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgVHJ1ZVR5cGUgZm9udCwgaWYgd2UgYXJlIG9wZW5pbmcgYSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLCBpbiBiaXRzIDAtMTUuICBUaGUgbnVtYmVyZWQgaW5zdGFuY2UgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgaW5kZXh+K34xIG9mIGEgR1ggKHN1Yilmb250LCBpZiBhcHBsaWNhYmxlLCBpbiBiaXRzICAqLworICAvKiAgICAgICAgICAgICAgICAgIDE2LTMwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIG51bV9wYXJhbXMgOjogTnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2VuZXJpYyBwYXJhbWV0ZXJzLiAgSWdub3JlZC4gICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTU5OSw3ICs2MDIsNyBAQAogICAgICAgICB0dGZhY2UtPmZhY2VfZmxhZ3MgJj0gfkZUX0ZBQ0VfRkxBR19TQ0FMQUJMRTsKICAgICAgIH0KIAotI2Vsc2UKKyNlbHNlIC8qICFGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCiAKICAgICAgIGlmICggIWVycm9yICkKICAgICAgICAgZXJyb3IgPSB0dF9mYWNlX2xvYWRfbG9jYSggZmFjZSwgc3RyZWFtICk7CkBAIC02MjMsMTAgKzYyNiw1NiBAQAogICAgICAgICB0dGZhY2UtPmZhY2VfZmxhZ3MgJj0gfkZUX0ZBQ0VfRkxBR19TQ0FMQUJMRTsKICAgICAgIH0KIAotI2VuZGlmCisjZW5kaWYgLyogIUZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgKi8KIAogICAgIH0KIAorI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKworICAgIHsKKyAgICAgIEZUX0ludCAgaW5zdGFuY2VfaW5kZXggPSBmYWNlX2luZGV4ID4+IDE2OworCisKKyAgICAgIGlmICggRlRfSEFTX01VTFRJUExFX01BU1RFUlMoIHR0ZmFjZSApICYmCisgICAgICAgICAgIGluc3RhbmNlX2luZGV4ID4gMCAgICAgICAgICAgICAgICApCisgICAgICB7CisgICAgICAgIGVycm9yID0gVFRfR2V0X01NX1ZhciggZmFjZSwgTlVMTCApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgaWYgKCBmYWNlLT5ibGVuZC0+bW12YXItPm5hbWVkc3R5bGUgKQorICAgICAgICB7CisgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSB0dGZhY2UtPm1lbW9yeTsKKworICAgICAgICAgIEZUX1Zhcl9OYW1lZF9TdHlsZSogIG5hbWVkX3N0eWxlOworICAgICAgICAgIEZUX1N0cmluZyogICAgICAgICAgIHN0eWxlX25hbWU7CisKKworICAgICAgICAgIC8qIGluIGBmYWNlX2luZGV4JywgdGhlIGluc3RhbmNlIGluZGV4IHN0YXJ0cyB3aXRoIHZhbHVlIDEgKi8KKyAgICAgICAgICBuYW1lZF9zdHlsZSA9IGZhY2UtPmJsZW5kLT5tbXZhci0+bmFtZWRzdHlsZSArIGluc3RhbmNlX2luZGV4IC0gMTsKKyAgICAgICAgICBlcnJvciA9IHNmbnQtPmdldF9uYW1lKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VU2hvcnQpbmFtZWRfc3R5bGUtPnN0cmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZV9uYW1lICk7CisgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAvKiBzZXQgc3R5bGUgbmFtZTsgaWYgYWxyZWFkeSBzZXQsIHJlcGxhY2UgaXQgKi8KKyAgICAgICAgICBpZiAoIGZhY2UtPnJvb3Quc3R5bGVfbmFtZSApCisgICAgICAgICAgICBGVF9GUkVFKCBmYWNlLT5yb290LnN0eWxlX25hbWUgKTsKKyAgICAgICAgICBmYWNlLT5yb290LnN0eWxlX25hbWUgPSBzdHlsZV9uYW1lOworCisgICAgICAgICAgLyogZmluYWxseSwgc2VsZWN0IHRoZSBuYW1lZCBpbnN0YW5jZSAqLworICAgICAgICAgIGVycm9yID0gVFRfU2V0X1Zhcl9EZXNpZ24oIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+YmxlbmQtPm1tdmFyLT5udW1fYXhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lZF9zdHlsZS0+Y29vcmRzICk7CisgICAgICAgICAgaWYgKCBlcnJvciApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUICovCisKICNpZiBkZWZpbmVkKCBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyAgICApICYmIFwKICAgICAhZGVmaW5lZCggVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiApCiAKQEAgLTc1MSwxNCArODAwLDcgQEAKICAgICBGVF9FcnJvciAgICAgICAgZXJyb3I7CiAKIAotICAgIC8qIGRlYnVnZ2luZyBpbnN0YW5jZXMgaGF2ZSB0aGVpciBvd24gY29udGV4dCAqLwotICAgIGlmICggc2l6ZS0+ZGVidWcgKQotICAgICAgZXhlYyA9IHNpemUtPmNvbnRleHQ7Ci0gICAgZWxzZQotICAgICAgZXhlYyA9ICggKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZmFjZSApICktPmNvbnRleHQ7Ci0KLSAgICBpZiAoICFleGVjICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggQ291bGRfTm90X0ZpbmRfQ29udGV4dCApOworICAgIGV4ZWMgPSBzaXplLT5jb250ZXh0OwogCiAgICAgZXJyb3IgPSBUVF9Mb2FkX0NvbnRleHQoIGV4ZWMsIGZhY2UsIHNpemUgKTsKICAgICBpZiAoIGVycm9yICkKQEAgLTc5NSw3ICs4MzcsNyBAQAogICAgIFRUX1NldF9Db2RlUmFuZ2UoIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgICAgdHRfY29kZXJhbmdlX2ZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+Zm9udF9wcm9ncmFtLAotICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmZvbnRfcHJvZ3JhbV9zaXplICk7CisgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpZmFjZS0+Zm9udF9wcm9ncmFtX3NpemUgKTsKIAogICAgIC8qIGRpc2FibGUgQ1ZUIGFuZCBnbHlwaCBwcm9ncmFtcyBjb2RlcmFuZ2UgKi8KICAgICBUVF9DbGVhcl9Db2RlUmFuZ2UoIGV4ZWMsIHR0X2NvZGVyYW5nZV9jdnQgKTsKQEAgLTg0NSwxNCArODg3LDcgQEAKICAgICBGVF9FcnJvciAgICAgICAgZXJyb3I7CiAKIAotICAgIC8qIGRlYnVnZ2luZyBpbnN0YW5jZXMgaGF2ZSB0aGVpciBvd24gY29udGV4dCAqLwotICAgIGlmICggc2l6ZS0+ZGVidWcgKQotICAgICAgZXhlYyA9IHNpemUtPmNvbnRleHQ7Ci0gICAgZWxzZQotICAgICAgZXhlYyA9ICggKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZmFjZSApICktPmNvbnRleHQ7Ci0KLSAgICBpZiAoICFleGVjICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggQ291bGRfTm90X0ZpbmRfQ29udGV4dCApOworICAgIGV4ZWMgPSBzaXplLT5jb250ZXh0OwogCiAgICAgZXJyb3IgPSBUVF9Mb2FkX0NvbnRleHQoIGV4ZWMsIGZhY2UsIHNpemUgKTsKICAgICBpZiAoIGVycm9yICkKQEAgLTg2OCw3ICs5MDMsNyBAQAogICAgIFRUX1NldF9Db2RlUmFuZ2UoIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgICAgdHRfY29kZXJhbmdlX2N2dCwKICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5jdnRfcHJvZ3JhbSwKLSAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5jdnRfcHJvZ3JhbV9zaXplICk7CisgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpZmFjZS0+Y3Z0X3Byb2dyYW1fc2l6ZSApOwogCiAgICAgVFRfQ2xlYXJfQ29kZVJhbmdlKCBleGVjLCB0dF9jb2RlcmFuZ2VfZ2x5cGggKTsKIApAQCAtODc2LDEyICs5MTEsOSBAQAogICAgIHsKICAgICAgIFRUX0dvdG9fQ29kZVJhbmdlKCBleGVjLCB0dF9jb2RlcmFuZ2VfY3Z0LCAwICk7CiAKLSAgICAgIGlmICggIXNpemUtPmRlYnVnICkKLSAgICAgIHsKLSAgICAgICAgRlRfVFJBQ0U0KCggIkV4ZWN1dGluZyBgcHJlcCcgdGFibGUuXG4iICkpOworICAgICAgRlRfVFJBQ0U0KCggIkV4ZWN1dGluZyBgcHJlcCcgdGFibGUuXG4iICkpOwogCi0gICAgICAgIGVycm9yID0gZmFjZS0+aW50ZXJwcmV0ZXIoIGV4ZWMgKTsKLSAgICAgIH0KKyAgICAgIGVycm9yID0gZmFjZS0+aW50ZXJwcmV0ZXIoIGV4ZWMgKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CkBAIC05MjQsMTIgKzk1NiwxMCBAQAogICAgIFRUX0ZhY2UgICAgZmFjZSAgID0gKFRUX0ZhY2UpZnRzaXplLT5mYWNlOwogICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CiAKLQotICAgIGlmICggc2l6ZS0+ZGVidWcgKQorICAgIGlmICggc2l6ZS0+Y29udGV4dCApCiAgICAgewotICAgICAgLyogdGhlIGRlYnVnIGNvbnRleHQgbXVzdCBiZSBkZWxldGVkIGJ5IHRoZSBkZWJ1Z2dlciBpdHNlbGYgKi8KKyAgICAgIFRUX0RvbmVfQ29udGV4dCggc2l6ZS0+Y29udGV4dCApOwogICAgICAgc2l6ZS0+Y29udGV4dCA9IE5VTEw7Ci0gICAgICBzaXplLT5kZWJ1ZyAgID0gRkFMU0U7CiAgICAgfQogCiAgICAgRlRfRlJFRSggc2l6ZS0+Y3Z0ICk7CkBAIC05NzMsOSArMTAwMywyMSBAQAogICAgIFRUX01heFByb2ZpbGUqICBtYXhwID0gJmZhY2UtPm1heF9wcm9maWxlOwogCiAKKyAgICAvKiBjbGVhbiB1cCBieXRlY29kZSByZWxhdGVkIGRhdGEgKi8KKyAgICBGVF9GUkVFKCBzaXplLT5mdW5jdGlvbl9kZWZzICk7CisgICAgRlRfRlJFRSggc2l6ZS0+aW5zdHJ1Y3Rpb25fZGVmcyApOworICAgIEZUX0ZSRUUoIHNpemUtPmN2dCApOworICAgIEZUX0ZSRUUoIHNpemUtPnN0b3JhZ2UgKTsKKworICAgIGlmICggc2l6ZS0+Y29udGV4dCApCisgICAgICBUVF9Eb25lX0NvbnRleHQoIHNpemUtPmNvbnRleHQgKTsKKyAgICB0dF9nbHlwaHpvbmVfZG9uZSggJnNpemUtPnR3aWxpZ2h0ICk7CisKICAgICBzaXplLT5ieXRlY29kZV9yZWFkeSA9IC0xOwogICAgIHNpemUtPmN2dF9yZWFkeSAgICAgID0gLTE7CiAKKyAgICBzaXplLT5jb250ZXh0ID0gVFRfTmV3X0NvbnRleHQoIChUVF9Ecml2ZXIpZmFjZS0+cm9vdC5kcml2ZXIgKTsKKwogICAgIHNpemUtPm1heF9mdW5jdGlvbl9kZWZzICAgID0gbWF4cC0+bWF4RnVuY3Rpb25EZWZzOwogICAgIHNpemUtPm1heF9pbnN0cnVjdGlvbl9kZWZzID0gbWF4cC0+bWF4SW5zdHJ1Y3Rpb25EZWZzOwogCkBAIC0xMTE2LDYgKzExNTgsNyBAQAogICAgIFRUX1NpemUgICBzaXplICA9IChUVF9TaXplKXR0c2l6ZTsKICAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CiAKKwogI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgogICAgIHNpemUtPmJ5dGVjb2RlX3JlYWR5ID0gLTE7CiAgICAgc2l6ZS0+Y3Z0X3JlYWR5ICAgICAgPSAtMTsKQEAgLTExNDYsOCArMTE4OSw3IEBACiAKIAogI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgotICAgIGlmICggc2l6ZS0+Ynl0ZWNvZGVfcmVhZHkgPj0gMCApCi0gICAgICB0dF9zaXplX2RvbmVfYnl0ZWNvZGUoIHR0c2l6ZSApOworICAgIHR0X3NpemVfZG9uZV9ieXRlY29kZSggdHRzaXplICk7CiAjZW5kaWYKIAogICAgIHNpemUtPnR0bWV0cmljcy52YWxpZCA9IEZBTFNFOwpAQCAtMTI1OSwxMCArMTMwMSw2IEBACiAKICAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpdHRkcml2ZXI7CiAKLQotICAgIGlmICggIVRUX05ld19Db250ZXh0KCBkcml2ZXIgKSApCi0gICAgICByZXR1cm4gRlRfVEhST1coIENvdWxkX05vdF9GaW5kX0NvbnRleHQgKTsKLQogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwogICAgIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzg7CiAjZWxzZQpAQCAtMTI5MywyMCArMTMzMSw3IEBACiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIHR0X2RyaXZlcl9kb25lKCBGVF9Nb2R1bGUgIHR0ZHJpdmVyICkgICAgIC8qIFRUX0RyaXZlciAqLwogICB7Ci0jaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCi0gICAgVFRfRHJpdmVyICBkcml2ZXIgPSAoVFRfRHJpdmVyKXR0ZHJpdmVyOwotCi0KLSAgICAvKiBkZXN0cm95IHRoZSBleGVjdXRpb24gY29udGV4dCAqLwotICAgIGlmICggZHJpdmVyLT5jb250ZXh0ICkKLSAgICB7Ci0gICAgICBUVF9Eb25lX0NvbnRleHQoIGRyaXZlci0+Y29udGV4dCApOwotICAgICAgZHJpdmVyLT5jb250ZXh0ID0gTlVMTDsKLSAgICB9Ci0jZWxzZQogICAgIEZUX1VOVVNFRCggdHRkcml2ZXIgKTsKLSNlbmRpZgotCiAgIH0KIAogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmgKaW5kZXggODU5MTY0Zi4uOTM5NjA4OSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0b2Jqcy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dG9ianMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPYmplY3RzIG1hbmFnZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA5LCAyMDExLTIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNDIsMTcgKzQyLDYgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfSW5zdGFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYSBUcnVlVHlwZSBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB0eXBlZGVmIHN0cnVjdCBUVF9TaXplUmVjXyogIFRUX1NpemU7Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBUVF9HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTYwLDcgKzE0OSw3IEBACiAgIHR5cGVkZWYgc3RydWN0ICBUVF9Db2RlUmFuZ2VfCiAgIHsKICAgICBGVF9CeXRlKiAgYmFzZTsKLSAgICBGVF9VTG9uZyAgc2l6ZTsKKyAgICBGVF9Mb25nICAgc2l6ZTsKIAogICB9IFRUX0NvZGVSYW5nZTsKIApAQCAtMzI0LDEzICszMTMsNiBAQAogCiAgICAgVFRfR2x5cGhab25lUmVjICAgIHR3aWxpZ2h0OyAgICAgLyogVGhlIGluc3RhbmNlJ3MgdHdpbGlnaHQgem9uZSAgICAqLwogCi0gICAgLyogZGVidWdnaW5nIHZhcmlhYmxlcyAqLwotCi0gICAgLyogV2hlbiB1c2luZyB0aGUgZGVidWdnZXIsIHdlIG11c3Qga2VlcCB0aGUgKi8KLSAgICAvKiBleGVjdXRpb24gY29udGV4dCB0aWVkIHRvIHRoZSBpbnN0YW5jZSAgICAqLwotICAgIC8qIG9iamVjdCByYXRoZXIgdGhhbiBhc2tpbmcgaXQgb24gZGVtYW5kLiAgICovCi0KLSAgICBGVF9Cb29sICAgICAgICAgICAgZGVidWc7CiAgICAgVFRfRXhlY0NvbnRleHQgICAgIGNvbnRleHQ7CiAKICAgICAvKiBpZiBuZWdhdGl2ZSwgYGZwZ20nIChyZXNwLiBgcHJlcCcpLCB3YXNuJ3QgZXhlY3V0ZWQgeWV0OyAqLwpAQCAtMzUxLDcgKzMzMyw2IEBACiAgIHsKICAgICBGVF9Ecml2ZXJSZWMgIHJvb3Q7CiAKLSAgICBUVF9FeGVjQ29udGV4dCAgIGNvbnRleHQ7ICAvKiBleGVjdXRpb24gY29udGV4dCAgICAgICAgKi8KICAgICBUVF9HbHlwaFpvbmVSZWMgIHpvbmU7ICAgICAvKiBnbHlwaCBsb2FkZXIgcG9pbnRzIHpvbmUgKi8KIAogICAgIEZUX1VJbnQgIGludGVycHJldGVyX3ZlcnNpb247CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRwaWMuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dHBpYy5jCmluZGV4IGVkZWZhZTcuLjI0MmE2YjcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dHBpYy5jCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dHBpYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciB0cnVldHlwZSBtb2R1bGUuICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRwaWMuaCBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dHBpYy5oCmluZGV4IGNmYjRlZTYuLjA3NmFlNTYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dHBpYy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dHBpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciB0cnVldHlwZSBtb2R1bGUuICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LCAyMDEyLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMCw3ICsyMCw4IEBACiAjZGVmaW5lIF9fVFRQSUNfSF9fCiAKIAotRlRfQkVHSU5fSEVBREVSCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSAorCiAKICNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKIApAQCAtMzcsNiArMzgsOCBAQAogI2luY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0gKIAogCitGVF9CRUdJTl9IRUFERVIKKwogICB0eXBlZGVmIHN0cnVjdCAgVFRNb2R1bGVQSUNfCiAgIHsKICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogICAgICAgICAgdHRfc2VydmljZXM7CkBAIC02OCwxMyArNzEsMTIgQEAKICAgRlRfRXJyb3IKICAgdHRfZHJpdmVyX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CiAKK0ZUX0VORF9IRUFERVIKKwogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCiAKICAvKiAqLwogCi0KLUZUX0VORF9IRUFERVIKLQogI2VuZGlmIC8qIF9fVFRQSUNfSF9fICovCiAKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0cGxvYWQuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dHBsb2FkLmMKaW5kZXggOTk5MTkyNS4uNDY0N2M5MyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0cGxvYWQuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlLXNwZWNpZmljIHRhYmxlcyBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDIsIDIwMDQtMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xMTgsMjAgKzExOCwyMCBAQAogICAgICAgLyogd2Ugb25seSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYG1heHAnIGdpdmVzIGEgbGFyZ2VyIHZhbHVlICovCiAgICAgICBpZiAoIGZhY2UtPm51bV9sb2NhdGlvbnMgPD0gKEZUX1VMb25nKWZhY2UtPnJvb3QubnVtX2dseXBocyApCiAgICAgICB7Ci0gICAgICAgIEZUX0xvbmcgICBuZXdfbG9jYV9sZW4gPQotICAgICAgICAgICAgICAgICAgICAoIChGVF9Mb25nKSggZmFjZS0+cm9vdC5udW1fZ2x5cGhzICkgKyAxICkgPDwgc2hpZnQ7CisgICAgICAgIEZUX1VMb25nICBuZXdfbG9jYV9sZW4gPQorICAgICAgICAgICAgICAgICAgICAoIChGVF9VTG9uZylmYWNlLT5yb290Lm51bV9nbHlwaHMgKyAxICkgPDwgc2hpZnQ7CiAKICAgICAgICAgVFRfVGFibGUgIGVudHJ5ID0gZmFjZS0+ZGlyX3RhYmxlczsKICAgICAgICAgVFRfVGFibGUgIGxpbWl0ID0gZW50cnkgKyBmYWNlLT5udW1fdGFibGVzOwogCi0gICAgICAgIEZUX0xvbmcgICBwb3MgID0gRlRfU3RyZWFtX1Bvcyggc3RyZWFtICk7CisgICAgICAgIEZUX0xvbmcgICBwb3MgID0gKEZUX0xvbmcpRlRfU1RSRUFNX1BPUygpOwogICAgICAgICBGVF9Mb25nICAgZGlzdCA9IDB4N0ZGRkZGRkZMOwogCiAKICAgICAgICAgLyogY29tcHV0ZSB0aGUgZGlzdGFuY2UgdG8gbmV4dCB0YWJsZSBpbiBmb250IGZpbGUgKi8KICAgICAgICAgZm9yICggOyBlbnRyeSA8IGxpbWl0OyBlbnRyeSsrICkKICAgICAgICAgewotICAgICAgICAgIEZUX0xvbmcgIGRpZmYgPSBlbnRyeS0+T2Zmc2V0IC0gcG9zOworICAgICAgICAgIEZUX0xvbmcgIGRpZmYgPSAoRlRfTG9uZyllbnRyeS0+T2Zmc2V0IC0gcG9zOwogCiAKICAgICAgICAgICBpZiAoIGRpZmYgPiAwICYmIGRpZmYgPCBkaXN0ICkKQEAgLTE0MSwxNyArMTQxLDI1IEBACiAgICAgICAgIGlmICggZW50cnkgPT0gbGltaXQgKQogICAgICAgICB7CiAgICAgICAgICAgLyogYGxvY2EnIGlzIHRoZSBsYXN0IHRhYmxlICovCi0gICAgICAgICAgZGlzdCA9IHN0cmVhbS0+c2l6ZSAtIHBvczsKKyAgICAgICAgICBkaXN0ID0gKEZUX0xvbmcpc3RyZWFtLT5zaXplIC0gcG9zOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCBuZXdfbG9jYV9sZW4gPD0gZGlzdCApCisgICAgICAgIGlmICggbmV3X2xvY2FfbGVuIDw9IChGVF9VTG9uZylkaXN0ICkKICAgICAgICAgewotICAgICAgICAgIGZhY2UtPm51bV9sb2NhdGlvbnMgPSBmYWNlLT5yb290Lm51bV9nbHlwaHMgKyAxOworICAgICAgICAgIGZhY2UtPm51bV9sb2NhdGlvbnMgPSAoRlRfVUxvbmcpZmFjZS0+cm9vdC5udW1fZ2x5cGhzICsgMTsKICAgICAgICAgICB0YWJsZV9sZW4gICAgICAgICAgID0gbmV3X2xvY2FfbGVuOwogCiAgICAgICAgICAgRlRfVFJBQ0UyKCggImFkanVzdGluZyBudW1fbG9jYXRpb25zIHRvICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPm51bV9sb2NhdGlvbnMgKSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZmFjZS0+cm9vdC5udW1fZ2x5cGhzID0gZmFjZS0+bnVtX2xvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoRlRfTG9uZylmYWNlLT5udW1fbG9jYXRpb25zIC0gMSA6IDA7CisKKyAgICAgICAgICBGVF9UUkFDRTIoKCAiYWRqdXN0aW5nIG51bV9nbHlwaHMgdG8gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+cm9vdC5udW1fZ2x5cGhzICkpOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0cGxvYWQuaAppbmRleCBmNjFhYzA3Li5iYzkyMzY5IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dHBsb2FkLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUtc3BlY2lmaWMgdGFibGVzIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMiwgMjAwNSwgMjAwNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dHN1YnBpeC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0c3VicGl4LmMKaW5kZXggY2E2MDQ1MS4uMGQzOTFlOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0c3VicGl4LmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0c3VicGl4LmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgU3VicGl4ZWwgSGludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTAtMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTYzLDggKzYzLDggQEAKICAgLyogcnVsZXMgYmVsb3cuICBBIGJsYW5rIGVudHJ5ICIiIGlzIHJlcXVpcmVkIGF0IHRoZSBlbmQgb2YgdGhlc2UhICAgICAgICovCiAjZGVmaW5lIEZBTUlMWV9DTEFTU19SVUxFU19TSVpFICA3CiAKLSAgc3RhdGljIGNvbnN0IFNQSF9Gb250X0NsYXNzIEZBTUlMWV9DTEFTU19SdWxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZBTUlMWV9DTEFTU19SVUxFU19TSVpFXSA9CisgIHN0YXRpYyBjb25zdCBTUEhfRm9udF9DbGFzcyAgRkFNSUxZX0NMQVNTX1J1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZBTUlMWV9DTEFTU19SVUxFU19TSVpFXSA9CiAgIHsKICAgICB7ICJNUyBMZWdhY3kgRm9udHMiLAogICAgICAgeyAiQWhhcm9uaSIsCkBAIC0yMjMsOCArMjIzLDggQEAKICAgLyogcnVsZXMgYmVsb3cuICBBIGJsYW5rIGVudHJ5ICIiIGlzIHJlcXVpcmVkIGF0IHRoZSBlbmQgb2YgdGhlc2UhICAgICAgICovCiAjZGVmaW5lIFNUWUxFX0NMQVNTX1JVTEVTX1NJWkUgIDUKIAotICBjb25zdCBTUEhfRm9udF9DbGFzcyBTVFlMRV9DTEFTU19SdWxlcwotICAgICAgICAgICAgICAgICAgICAgICBbU1RZTEVfQ0xBU1NfUlVMRVNfU0laRV0gPQorICBzdGF0aWMgY29uc3QgU1BIX0ZvbnRfQ2xhc3MgIFNUWUxFX0NMQVNTX1J1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NUWUxFX0NMQVNTX1JVTEVTX1NJWkVdID0KICAgewogICAgIHsgIlJlZ3VsYXIgQ2xhc3MiLAogICAgICAgeyAiUmVndWxhciIsCkBAIC0yNzksOCArMjc5LDggQEAKICAgLyogRm9yY2Ugc3BlY2lhbCBsZWdhY3kgZml4ZXMgZm9yIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIENPTVBBVElCSUxJVFlfTU9ERV9SVUxFU19TSVpFICAxCiAKLSAgY29uc3QgU1BIX1R3ZWFrUnVsZSAgQ09NUEFUSUJJTElUWV9NT0RFX1J1bGVzCi0gICAgICAgICAgICAgICAgICAgICAgIFtDT01QQVRJQklMSVRZX01PREVfUlVMRVNfU0laRV0gPQorICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgQ09NUEFUSUJJTElUWV9NT0RFX1J1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQ09NUEFUSUJJTElUWV9NT0RFX1JVTEVTX1NJWkVdID0KICAgewogICAgIHsgIlZlcmRhbmEgQ2xvbmVzIiwgMCwgIiIsIDAgfSwKICAgfTsKQEAgLTI4OSw4ICsyODksOCBAQAogICAvKiBEb24ndCBkbyBzdWJwaXhlbCAoaWdub3JlX3hfbW9kZSkgaGludGluZzsgZG8gbm9ybWFsIGhpbnRpbmcuICAgICAgICAgKi8KICNkZWZpbmUgUElYRUxfSElOVElOR19SVUxFU19TSVpFICAyCiAKLSAgY29uc3QgU1BIX1R3ZWFrUnVsZSAgUElYRUxfSElOVElOR19SdWxlcwotICAgICAgICAgICAgICAgICAgICAgICBbUElYRUxfSElOVElOR19SVUxFU19TSVpFXSA9CisgIHN0YXRpYyBjb25zdCBTUEhfVHdlYWtSdWxlICBQSVhFTF9ISU5USU5HX1J1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbUElYRUxfSElOVElOR19SVUxFU19TSVpFXSA9CiAgIHsKICAgICAvKiB0aGVzZSBjaGFyYWN0ZXJzIGFyZSBhbG1vc3QgYWx3YXlzIHNhZmUgKi8KICAgICB7ICJDb3VyaWVyIE5ldyIsIDEyLCAiSXRhbGljIiwgJ3onIH0sCkBAIC0zMDEsOCArMzAxLDggQEAKICAgLyogU3VicGl4ZWwgaGludGluZyBpZ25vcmVzIFNIUElYIHJ1bGVzIG9uIFguICBGb3JjZSBTSFBJWCBmb3IgdGhlc2UuICAgICovCiAjZGVmaW5lIERPX1NIUElYX1JVTEVTX1NJWkUgIDEKIAotICBjb25zdCBTUEhfVHdlYWtSdWxlICBET19TSFBJWF9SdWxlcwotICAgICAgICAgICAgICAgICAgICAgICBbRE9fU0hQSVhfUlVMRVNfU0laRV0gPQorICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgRE9fU0hQSVhfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtET19TSFBJWF9SVUxFU19TSVpFXSA9CiAgIHsKICAgICB7ICItIiwgMCwgIiIsIDAgfSwKICAgfTsKQEAgLTMxMiw4ICszMTIsOCBAQAogICAvKiBib3VuZGFyeSBhbmQgZG9uJ3QgbW92ZSB0aGF0IHBvaW50IHRvIGEgWSBwaXhlbCBib3VuZGFyeS4gICAgICAgICAgICAgKi8KICNkZWZpbmUgU0tJUF9OT05QSVhFTF9ZX01PVkVTX1JVTEVTX1NJWkUgIDQKIAotICBjb25zdCBTUEhfVHdlYWtSdWxlICBTS0lQX05PTlBJWEVMX1lfTU9WRVNfUnVsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgW1NLSVBfTk9OUElYRUxfWV9NT1ZFU19SVUxFU19TSVpFXSA9CisgIHN0YXRpYyBjb25zdCBTUEhfVHdlYWtSdWxlICBTS0lQX05PTlBJWEVMX1lfTU9WRVNfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTS0lQX05PTlBJWEVMX1lfTU9WRVNfUlVMRVNfU0laRV0gPQogICB7CiAgICAgLyogZml4IHZ3eHl6IHRoaW5uZXNzKi8KICAgICB7ICJDb25zb2xhcyIsIDAsICIiLCAwIH0sCkBAIC0zMjgsOCArMzI4LDggQEAKIAogI2RlZmluZSBTS0lQX05PTlBJWEVMX1lfTU9WRVNfUlVMRVNfRVhDRVBUSU9OU19TSVpFICAxCiAKLSAgY29uc3QgU1BIX1R3ZWFrUnVsZSAgU0tJUF9OT05QSVhFTF9ZX01PVkVTX1J1bGVzX0V4Y2VwdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgW1NLSVBfTk9OUElYRUxfWV9NT1ZFU19SVUxFU19FWENFUFRJT05TX1NJWkVdID0KKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIFNLSVBfTk9OUElYRUxfWV9NT1ZFU19SdWxlc19FeGNlcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbU0tJUF9OT05QSVhFTF9ZX01PVkVTX1JVTEVTX0VYQ0VQVElPTlNfU0laRV0gPQogICB7CiAgICAgLyogRml4ZXMgPCBhbmQgPiAqLwogICAgIHsgIkNvdXJpZXIgTmV3IiwgMCwgIlJlZ3VsYXIiLCAwIH0sCkBAIC0zNDAsOCArMzQwLDggQEAKICAgLyogYm91bmRhcnkgYW5kIGRvbid0IG1vdmUgdGhhdCBwb2ludCB0byBhIFkgcGl4ZWwgYm91bmRhcnkuICAgICAgICAgICAgICovCiAjZGVmaW5lIFNLSVBfTk9OUElYRUxfWV9NT1ZFU19ERUxUQVBfUlVMRVNfU0laRSAgMgogCi0gIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIFNLSVBfTk9OUElYRUxfWV9NT1ZFU19ERUxUQVBfUnVsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgW1NLSVBfTk9OUElYRUxfWV9NT1ZFU19ERUxUQVBfUlVMRVNfU0laRV0gPQorICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgU0tJUF9OT05QSVhFTF9ZX01PVkVTX0RFTFRBUF9SdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NLSVBfTk9OUElYRUxfWV9NT1ZFU19ERUxUQVBfUlVMRVNfU0laRV0gPQogICB7CiAgICAgLyogTWFpbnRhaW4gdGhpY2tuZXNzIG9mIGRpYWdvbmFsIGluICdOJyAqLwogICAgIHsgIlRpbWVzIE5ldyBSb21hbiIsIDAsICJSZWd1bGFyL0JvbGQgQ2xhc3MiLCAnTicgfSwKQEAgLTM1Miw4ICszNTIsOCBAQAogICAvKiBTa2lwIFkgbW92ZXMgdGhhdCBtb3ZlIGEgcG9pbnQgb2ZmIGEgWSBwaXhlbCBib3VuZGFyeS4gICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0tJUF9PRkZQSVhFTF9ZX01PVkVTX1JVTEVTX1NJWkUgIDEKIAotICBjb25zdCBTUEhfVHdlYWtSdWxlICBTS0lQX09GRlBJWEVMX1lfTU9WRVNfUnVsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgW1NLSVBfT0ZGUElYRUxfWV9NT1ZFU19SVUxFU19TSVpFXSA9CisgIHN0YXRpYyBjb25zdCBTUEhfVHdlYWtSdWxlICBTS0lQX09GRlBJWEVMX1lfTU9WRVNfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTS0lQX09GRlBJWEVMX1lfTU9WRVNfUlVMRVNfU0laRV0gPQogICB7CiAgICAgeyAiLSIsIDAsICIiLCAwIH0sCiAgIH07CkBAIC0zNjEsOCArMzYxLDggQEAKIAogI2RlZmluZSBTS0lQX09GRlBJWEVMX1lfTU9WRVNfUlVMRVNfRVhDRVBUSU9OU19TSVpFICAxCiAKLSAgY29uc3QgU1BIX1R3ZWFrUnVsZSAgU0tJUF9PRkZQSVhFTF9ZX01PVkVTX1J1bGVzX0V4Y2VwdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgW1NLSVBfT0ZGUElYRUxfWV9NT1ZFU19SVUxFU19FWENFUFRJT05TX1NJWkVdID0KKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIFNLSVBfT0ZGUElYRUxfWV9NT1ZFU19SdWxlc19FeGNlcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbU0tJUF9PRkZQSVhFTF9ZX01PVkVTX1JVTEVTX0VYQ0VQVElPTlNfU0laRV0gPQogICB7CiAgICAgeyAiLSIsIDAsICIiLCAwIH0sCiAgIH07CkBAIC0zNzEsOCArMzcxLDggQEAKICAgLyogUm91bmQgbW92ZXMgdGhhdCBkb24ndCBtb3ZlIGEgcG9pbnQgdG8gYSBZIHBpeGVsIGJvdW5kYXJ5LiAgICAgICAgICAgICovCiAjZGVmaW5lIFJPVU5EX05PTlBJWEVMX1lfTU9WRVNfUlVMRVNfU0laRSAgMgogCi0gIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIFJPVU5EX05PTlBJWEVMX1lfTU9WRVNfUnVsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgW1JPVU5EX05PTlBJWEVMX1lfTU9WRVNfUlVMRVNfU0laRV0gPQorICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgUk9VTkRfTk9OUElYRUxfWV9NT1ZFU19SdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1JPVU5EX05PTlBJWEVMX1lfTU9WRVNfUlVMRVNfU0laRV0gPQogICB7CiAgICAgLyogRHJvaWQgZm9udCBpbnN0cnVjdGlvbnMgZG9uJ3Qgc25hcCBZIHRvIHBpeGVscyAqLwogICAgIHsgIkRyb2lkIFNhbnMiLCAwLCAiUmVndWxhci9JdGFsaWMgQ2xhc3MiLCAwIH0sCkBAIC0zODIsOCArMzgyLDggQEAKIAogI2RlZmluZSBST1VORF9OT05QSVhFTF9ZX01PVkVTX1JVTEVTX0VYQ0VQVElPTlNfU0laRSAgMQogCi0gIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIFJPVU5EX05PTlBJWEVMX1lfTU9WRVNfUnVsZXNfRXhjZXB0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICBbUk9VTkRfTk9OUElYRUxfWV9NT1ZFU19SVUxFU19FWENFUFRJT05TX1NJWkVdID0KKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIFJPVU5EX05PTlBJWEVMX1lfTU9WRVNfUnVsZXNfRXhjZXB0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1JPVU5EX05PTlBJWEVMX1lfTU9WRVNfUlVMRVNfRVhDRVBUSU9OU19TSVpFXSA9CiAgIHsKICAgICB7ICItIiwgMCwgIiIsIDAgfSwKICAgfTsKQEAgLTM5Miw4ICszOTIsOCBAQAogICAvKiBBbGxvdyBhIERpcmVjdF9Nb3ZlIGFsb25nIFggZnJlZWRvbSB2ZWN0b3IgaWYgbWF0Y2hlZC4gICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQUxMT1dfWF9ETU9WRV9SVUxFU19TSVpFICAxCiAKLSAgY29uc3QgU1BIX1R3ZWFrUnVsZSAgQUxMT1dfWF9ETU9WRV9SdWxlcwotICAgICAgICAgICAgICAgICAgICAgICBbQUxMT1dfWF9ETU9WRV9SVUxFU19TSVpFXSA9CisgIHN0YXRpYyBjb25zdCBTUEhfVHdlYWtSdWxlICBBTExPV19YX0RNT1ZFX1J1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUxMT1dfWF9ETU9WRV9SVUxFU19TSVpFXSA9CiAgIHsKICAgICAvKiBGaXhlcyB2YW5pc2hpbmcgZGlhZ29uYWwgaW4gNCAqLwogICAgIHsgIlZlcmRhbmEiLCAwLCAiUmVndWxhciIsICc0JyB9LApAQCAtNDAzLDggKzQwMyw4IEBACiAgIC8qIFJldHVybiBNUyByYXN0ZXJpemVyIHZlcnNpb24gMzUgaWYgbWF0Y2hlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBSQVNURVJJWkVSXzM1X1JVTEVTX1NJWkUgIDgKIAotICBjb25zdCBTUEhfVHdlYWtSdWxlICBSQVNURVJJWkVSXzM1X1J1bGVzCi0gICAgICAgICAgICAgICAgICAgICAgIFtSQVNURVJJWkVSXzM1X1JVTEVTX1NJWkVdID0KKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIFJBU1RFUklaRVJfMzVfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtSQVNURVJJWkVSXzM1X1JVTEVTX1NJWkVdID0KICAgewogICAgIC8qIFRoaXMgc2VlbXMgdG8gYmUgdGhlIG9ubHkgd2F5IHRvIG1ha2UgdGhlc2UgbG9vayBnb29kICovCiAgICAgeyAiVGltZXMgTmV3IFJvbWFuIiwgMCwgIlJlZ3VsYXIiLCAnaScgfSwKQEAgLTQyMSw4ICs0MjEsOCBAQAogICAvKiBEb24ndCByb3VuZCB0byB0aGUgc3VicGl4ZWwgZ3JpZC4gIFJvdW5kIHRvIHBpeGVsIGdyaWQuICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTk9STUFMX1JPVU5EX1JVTEVTX1NJWkUgIDEKIAotICBjb25zdCBTUEhfVHdlYWtSdWxlICBOT1JNQUxfUk9VTkRfUnVsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgW05PUk1BTF9ST1VORF9SVUxFU19TSVpFXSA9CisgIHN0YXRpYyBjb25zdCBTUEhfVHdlYWtSdWxlICBOT1JNQUxfUk9VTkRfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtOT1JNQUxfUk9VTkRfUlVMRVNfU0laRV0gPQogICB7CiAgICAgLyogRml4IHNlcmlmIHRoaWNrbmVzcyBmb3IgY2VydGFpbiBwcGVtcyAqLwogICAgIC8qIENhbiBwcm9iYWJseSBiZSBnZW5lcmFsaXplZCBzb21laG93ICAgKi8KQEAgLTQzMyw4ICs0MzMsOCBAQAogICAvKiBTa2lwIElVUCBpbnN0cnVjdGlvbnMgaWYgbWF0Y2hlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0tJUF9JVVBfUlVMRVNfU0laRSAgMQogCi0gIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIFNLSVBfSVVQX1J1bGVzCi0gICAgICAgICAgICAgICAgICAgICAgIFtTS0lQX0lVUF9SVUxFU19TSVpFXSA9CisgIHN0YXRpYyBjb25zdCBTUEhfVHdlYWtSdWxlICBTS0lQX0lVUF9SdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NLSVBfSVVQX1JVTEVTX1NJWkVdID0KICAgewogICAgIHsgIkFyaWFsIiwgMTMsICJSZWd1bGFyIiwgJ2EnIH0sCiAgIH07CkBAIC00NDMsOCArNDQzLDggQEAKICAgLyogU2tpcCBNSUFQIFR3aWxpZ2h0IGhhY2sgaWYgbWF0Y2hlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIE1JQVBfSEFDS19SVUxFU19TSVpFICAxCiAKLSAgY29uc3QgU1BIX1R3ZWFrUnVsZSAgTUlBUF9IQUNLX1J1bGVzCi0gICAgICAgICAgICAgICAgICAgICAgIFtNSUFQX0hBQ0tfUlVMRVNfU0laRV0gPQorICBzdGF0aWMgY29uc3QgU1BIX1R3ZWFrUnVsZSAgTUlBUF9IQUNLX1J1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbTUlBUF9IQUNLX1JVTEVTX1NJWkVdID0KICAgewogICAgIHsgIkdlbmV2YSIsIDEyLCAiIiwgMCB9LAogICB9OwpAQCAtNDUzLDggKzQ1Myw4IEBACiAgIC8qIFNraXAgREVMVEFQIGluc3RydWN0aW9ucyBpZiBtYXRjaGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBBTFdBWVNfU0tJUF9ERUxUQVBfUlVMRVNfU0laRSAgMjMKIAotICBjb25zdCBTUEhfVHdlYWtSdWxlICBBTFdBWVNfU0tJUF9ERUxUQVBfUnVsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgW0FMV0FZU19TS0lQX0RFTFRBUF9SVUxFU19TSVpFXSA9CisgIHN0YXRpYyBjb25zdCBTUEhfVHdlYWtSdWxlICBBTFdBWVNfU0tJUF9ERUxUQVBfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBTFdBWVNfU0tJUF9ERUxUQVBfUlVMRVNfU0laRV0gPQogICB7CiAgICAgeyAiR2VvcmdpYSIsIDAsICJSZWd1bGFyIiwgJ2snIH0sCiAgICAgLyogZml4IHZhcmlvdXMgcHJvYmxlbXMgd2l0aCBlIGluIGRpZmZlcmVudCB2ZXJzaW9ucyAqLwpAQCAtNDg5LDggKzQ4OSw4IEBACiAgIC8qIEFsd2F5cyBkbyBERUxUQVAgaW5zdHJ1Y3Rpb25zIGlmIG1hdGNoZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBBTFdBWVNfRE9fREVMVEFQX1JVTEVTX1NJWkUgIDEKIAotICBjb25zdCBTUEhfVHdlYWtSdWxlICBBTFdBWVNfRE9fREVMVEFQX1J1bGVzCi0gICAgICAgICAgICAgICAgICAgICAgIFtBTFdBWVNfRE9fREVMVEFQX1JVTEVTX1NJWkVdID0KKyAgc3RhdGljIGNvbnN0IFNQSF9Ud2Vha1J1bGUgIEFMV0FZU19ET19ERUxUQVBfUnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBTFdBWVNfRE9fREVMVEFQX1JVTEVTX1NJWkVdID0KICAgewogICAgIHsgIi0iLCAwLCAiIiwgMCB9LAogICB9OwpAQCAtNzQ0LDcgKzc0NCw3IEBACiAjZW5kaWYgLyogRk9SQ0VfTkFUVVJBTF9XSURUSFMgKi8KIAogCi0gIEZUX0xPQ0FMX0RFRiggRlRfQm9vbCApCisgIHN0YXRpYyBGVF9Cb29sCiAgIGlzX21lbWJlcl9vZl9mYW1pbHlfY2xhc3MoIGNvbnN0IEZUX1N0cmluZyogIGRldGVjdGVkX2ZvbnRfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgcnVsZV9mb250X25hbWUgKQogICB7CkBAIC03NzksNyArNzc5LDcgQEAKICAgfQogCiAKLSAgRlRfTE9DQUxfREVGKCBGVF9Cb29sICkKKyAgc3RhdGljIEZUX0Jvb2wKICAgaXNfbWVtYmVyX29mX3N0eWxlX2NsYXNzKCBjb25zdCBGVF9TdHJpbmcqICBkZXRlY3RlZF9mb250X3N0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogIHJ1bGVfZm9udF9zdHlsZSApCiAgIHsKQEAgLTkwMyw5ICs5MDMsOSBAQAogICBzcGhfc2V0X3R3ZWFrcyggVFRfTG9hZGVyICBsb2FkZXIsCiAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGdseXBoX2luZGV4ICkKICAgewotICAgIFRUX0ZhY2UgICAgIGZhY2UgICA9IChUVF9GYWNlKWxvYWRlci0+ZmFjZTsKKyAgICBUVF9GYWNlICAgICBmYWNlICAgPSBsb2FkZXItPmZhY2U7CiAgICAgRlRfU3RyaW5nKiAgZmFtaWx5ID0gZmFjZS0+cm9vdC5mYW1pbHlfbmFtZTsKLSAgICBpbnQgICAgICAgICBwcGVtICAgPSBsb2FkZXItPnNpemUtPm1ldHJpY3MueF9wcGVtOworICAgIEZUX1VJbnQgICAgIHBwZW0gICA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy54X3BwZW07CiAgICAgRlRfU3RyaW5nKiAgc3R5bGUgID0gZmFjZS0+cm9vdC5zdHlsZV9uYW1lOwogCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90cnVldHlwZS90dHN1YnBpeC5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0c3VicGl4LmgKaW5kZXggOGE1NGZjNy4uOTE1MWFhMyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0c3VicGl4LmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3RydWV0eXBlL3R0c3VicGl4LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgU3VicGl4ZWwgSGludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTAtMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTUwLDI2ICs1MCwyNiBAQAogICAvKiBUd2VhayBmbGFncyB0aGF0IGFyZSBzZXQgZm9yIGVhY2ggZ2x5cGggYnkgdGhlIGJlbG93IHJ1bGVzLiAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTUEhfVFdFQUtfQUxMT1dfWF9ETU9WRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEKLSNkZWZpbmUgU1BIX1RXRUFLX0FMV0FZU19ET19ERUxUQVAgICAgICAgICAgICAgICAgMHgwMDAwMDAyCi0jZGVmaW5lIFNQSF9UV0VBS19BTFdBWVNfU0tJUF9ERUxUQVAgICAgICAgICAgICAgIDB4MDAwMDAwNAotI2RlZmluZSBTUEhfVFdFQUtfQ09VUklFUl9ORVdfMl9IQUNLICAgICAgICAgICAgICAweDAwMDAwMDgKLSNkZWZpbmUgU1BIX1RXRUFLX0RFRU1CT0xERU4gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwCi0jZGVmaW5lIFNQSF9UV0VBS19ET19TSFBJWCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMAotI2RlZmluZSBTUEhfVFdFQUtfRU1CT0xERU4gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAKLSNkZWZpbmUgU1BIX1RXRUFLX01JQVBfSEFDSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwCi0jZGVmaW5lIFNQSF9UV0VBS19OT1JNQUxfUk9VTkQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMAotI2RlZmluZSBTUEhfVFdFQUtfTk9fQUxJR05SUF9BRlRFUl9JVVAgICAgICAgICAgICAweDAwMDAyMDAKLSNkZWZpbmUgU1BIX1RXRUFLX05PX0NBTExfQUZURVJfSVVQICAgICAgICAgICAgICAgMHgwMDAwNDAwCi0jZGVmaW5lIFNQSF9UV0VBS19OT19ERUxUQVBfQUZURVJfSVVQICAgICAgICAgICAgIDB4MDAwMDgwMAotI2RlZmluZSBTUEhfVFdFQUtfUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAKLSNkZWZpbmUgU1BIX1RXRUFLX1JBU1RFUklaRVJfMzUgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwCi0jZGVmaW5lIFNQSF9UV0VBS19ST1VORF9OT05QSVhFTF9ZX01PVkVTICAgICAgICAgIDB4MDAwNDAwMAotI2RlZmluZSBTUEhfVFdFQUtfU0tJUF9JVVAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAKLSNkZWZpbmUgU1BIX1RXRUFLX1NLSVBfTk9OUElYRUxfWV9NT1ZFUyAgICAgICAgICAgMHgwMDEwMDAwCi0jZGVmaW5lIFNQSF9UV0VBS19TS0lQX09GRlBJWEVMX1lfTU9WRVMgICAgICAgICAgIDB4MDAyMDAwMAotI2RlZmluZSBTUEhfVFdFQUtfVElNRVNfTkVXX1JPTUFOX0hBQ0sgICAgICAgICAgICAweDAwNDAwMDAKLSNkZWZpbmUgU1BIX1RXRUFLX1NLSVBfTk9OUElYRUxfWV9NT1ZFU19ERUxUQVAgICAgMHgwMDgwMDAwCisjZGVmaW5lIFNQSF9UV0VBS19BTExPV19YX0RNT1ZFICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMVVMCisjZGVmaW5lIFNQSF9UV0VBS19BTFdBWVNfRE9fREVMVEFQICAgICAgICAgICAgICAgIDB4MDAwMDAwMlVMCisjZGVmaW5lIFNQSF9UV0VBS19BTFdBWVNfU0tJUF9ERUxUQVAgICAgICAgICAgICAgIDB4MDAwMDAwNFVMCisjZGVmaW5lIFNQSF9UV0VBS19DT1VSSUVSX05FV18yX0hBQ0sgICAgICAgICAgICAgIDB4MDAwMDAwOFVMCisjZGVmaW5lIFNQSF9UV0VBS19ERUVNQk9MREVOICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMFVMCisjZGVmaW5lIFNQSF9UV0VBS19ET19TSFBJWCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMFVMCisjZGVmaW5lIFNQSF9UV0VBS19FTUJPTERFTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MFVMCisjZGVmaW5lIFNQSF9UV0VBS19NSUFQX0hBQ0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MFVMCisjZGVmaW5lIFNQSF9UV0VBS19OT1JNQUxfUk9VTkQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMFVMCisjZGVmaW5lIFNQSF9UV0VBS19OT19BTElHTlJQX0FGVEVSX0lVUCAgICAgICAgICAgIDB4MDAwMDIwMFVMCisjZGVmaW5lIFNQSF9UV0VBS19OT19DQUxMX0FGVEVSX0lVUCAgICAgICAgICAgICAgIDB4MDAwMDQwMFVMCisjZGVmaW5lIFNQSF9UV0VBS19OT19ERUxUQVBfQUZURVJfSVVQICAgICAgICAgICAgIDB4MDAwMDgwMFVMCisjZGVmaW5lIFNQSF9UV0VBS19QSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMFVMCisjZGVmaW5lIFNQSF9UV0VBS19SQVNURVJJWkVSXzM1ICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMFVMCisjZGVmaW5lIFNQSF9UV0VBS19ST1VORF9OT05QSVhFTF9ZX01PVkVTICAgICAgICAgIDB4MDAwNDAwMFVMCisjZGVmaW5lIFNQSF9UV0VBS19TS0lQX0lVUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMFVMCisjZGVmaW5lIFNQSF9UV0VBS19TS0lQX05PTlBJWEVMX1lfTU9WRVMgICAgICAgICAgIDB4MDAxMDAwMFVMCisjZGVmaW5lIFNQSF9UV0VBS19TS0lQX09GRlBJWEVMX1lfTU9WRVMgICAgICAgICAgIDB4MDAyMDAwMFVMCisjZGVmaW5lIFNQSF9UV0VBS19USU1FU19ORVdfUk9NQU5fSEFDSyAgICAgICAgICAgIDB4MDA0MDAwMFVMCisjZGVmaW5lIFNQSF9UV0VBS19TS0lQX05PTlBJWEVMX1lfTU9WRVNfREVMVEFQICAgIDB4MDA4MDAwMFVMCiAKIAogICBGVF9MT0NBTCggRlRfQm9vbCApCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvSmFtZmlsZSBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS9KYW1maWxlCmluZGV4IDhlMzY2YmEuLmQxYTNhZjUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS9KYW1maWxlCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy90eXBlMSBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDAxIGJ5CisjIENvcHlyaWdodCAyMDAxLTIwMTUgYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApAQCAtMTYsNyArMTYsMTMgQEAKIAogICBpZiAkKEZUMl9NVUxUSSkKICAgewotICAgIF9zb3VyY2VzID0gdDFhZm0gdDFkcml2ZXIgdDFvYmpzIHQxbG9hZCB0MWdsb2FkIHQxcGFyc2UgOworICAgIF9zb3VyY2VzID0gdDFhZm0KKyAgICAgICAgICAgICAgIHQxZHJpdmVyCisgICAgICAgICAgICAgICB0MWdsb2FkCisgICAgICAgICAgICAgICB0MWxvYWQKKyAgICAgICAgICAgICAgIHQxb2JqcworICAgICAgICAgICAgICAgdDFwYXJzZQorICAgICAgICAgICAgICAgOwogICB9CiAgIGVsc2UKICAgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxYWZtLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFhZm0uYwppbmRleCBkZTljMTk5Li43ZjMyMDU5IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFhZm0uYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFhZm0uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBRk0gc3VwcG9ydCBmb3IgVHlwZSAxIGZvbnRzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDExLCAyMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTY5LDggKzE2OSw4IEBACiAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAvKiBub3csIHJlYWQgZWFjaCBrZXJuIHBhaXIgKi8KLSAgICBrcCAgICAgICAgICAgICA9IGZpLT5LZXJuUGFpcnM7Ci0gICAgbGltaXQgICAgICAgICAgPSBwICsgNCAqIGZpLT5OdW1LZXJuUGFpcjsKKyAgICBrcCAgICA9IGZpLT5LZXJuUGFpcnM7CisgICAgbGltaXQgPSBwICsgNCAqIGZpLT5OdW1LZXJuUGFpcjsKIAogICAgIC8qIFBGTSBrZXJuaW5nIGRhdGEgYXJlIHN0b3JlZCBieSBlbmNvZGluZyByYXRoZXIgdGhhbiBnbHlwaCBpbmRleCwgKi8KICAgICAvKiBzbyBmaW5kIHRoZSBQb3N0U2NyaXB0IGNoYXJtYXAgb2YgdGhpcyBmb250IGFuZCBpbnN0YWxsIGl0ICAgICAgICovCkBAIC0zNjIsNyArMzYyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAga2VybmluZyApCiAgIHsKICAgICBBRk1fRm9udEluZm8gIGZpID0gKEFGTV9Gb250SW5mbykoIChUMV9GYWNlKWZhY2UgKS0+YWZtX2RhdGE7Ci0gICAgRlRfSW50ICAgICAgICBpOworICAgIEZUX1VJbnQgICAgICAgaTsKIAogCiAgICAgaWYgKCAhZmkgKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxYWZtLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFhZm0uaAppbmRleCA4ZWIxNzY0Li4wZjQyZjNlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFhZm0uaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFhZm0uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBRk0gc3VwcG9ydCBmb3IgVHlwZSAxIGZvbnRzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDAyLCAyMDA2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxZHJpdmVyLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFkcml2ZXIuYwppbmRleCAyNjAyYmRiLi41NzFmMmQyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFkcml2ZXIuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFkcml2ZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDEgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA0LCAyMDA2LCAyMDA3LCAyMDA5LCAyMDExLCAyMDEzLCAyMDE0IGJ5ICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzIsNyArMzIsNyBAQAogCiAjaW5jbHVkZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSAogI2luY2x1ZGUgRlRfU0VSVklDRV9HTFlQSF9ESUNUX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfWEZSRUU4Nl9OQU1FX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfRk9OVF9GT1JNQVRfSAogI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVfSAogI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKICNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9JTkZPX0gKQEAgLTE3Niw5ICsxNzYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFBTX0RpY3RfS2V5cyAga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBpZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICB2YWx1ZV9sZW4gKQorICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICB2YWx1ZV9sZW5fICkKICAgewotICAgIEZUX0xvbmcgIHJldHZhbCA9IC0xOworICAgIEZUX1VMb25nICByZXR2YWwgICAgPSAwOyAvKiBhbHdheXMgPj0gMSBpZiB2YWxpZCAqLworICAgIEZUX1VMb25nICB2YWx1ZV9sZW4gPSB2YWx1ZV9sZW5fIDwgMCA/IDAgOiAoRlRfVUxvbmcpdmFsdWVfbGVuXzsKKwogICAgIFQxX0ZhY2UgIHQxZmFjZSA9IChUMV9GYWNlKWZhY2U7CiAgICAgVDFfRm9udCAgdHlwZTEgID0gJnQxZmFjZS0+dHlwZTE7CiAKQEAgLTIyNSw3ICsyMjcsNyBAQAogICAgICAgaWYgKCBpZHggPCBzaXplb2YgKCB0eXBlMS0+Zm9udF9iYm94ICkgLwogICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIHR5cGUxLT5mb250X2Jib3gueE1pbiApICkKICAgICAgIHsKLSAgICAgICAgRlRfRml4ZWQgdmFsID0gMDsKKyAgICAgICAgRlRfRml4ZWQgIHZhbCA9IDA7CiAKIAogICAgICAgICByZXR2YWwgPSBzaXplb2YgKCB2YWwgKTsKQEAgLTI1OCw3ICsyNjAsNyBAQAogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFBTX0RJQ1RfRk9OVF9OQU1FOgotICAgICAgcmV0dmFsID0gKEZUX0xvbmcpKCBmdF9zdHJsZW4oIHR5cGUxLT5mb250X25hbWUgKSArIDEgKTsKKyAgICAgIHJldHZhbCA9IGZ0X3N0cmxlbiggdHlwZTEtPmZvbnRfbmFtZSApICsgMTsKICAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCiAgICAgICAgIGZ0X21lbWNweSggdmFsdWUsICh2b2lkICopKCB0eXBlMS0+Zm9udF9uYW1lICksIHJldHZhbCApOwogICAgICAgYnJlYWs7CkBAIC0yNzgsNyArMjgwLDcgQEAKICAgICBjYXNlIFBTX0RJQ1RfQ0hBUl9TVFJJTkdfS0VZOgogICAgICAgaWYgKCBpZHggPCAoRlRfVUludCl0eXBlMS0+bnVtX2dseXBocyApCiAgICAgICB7Ci0gICAgICAgIHJldHZhbCA9IChGVF9Mb25nKSggZnRfc3RybGVuKCB0eXBlMS0+Z2x5cGhfbmFtZXNbaWR4XSApICsgMSApOworICAgICAgICByZXR2YWwgPSBmdF9zdHJsZW4oIHR5cGUxLT5nbHlwaF9uYW1lc1tpZHhdICkgKyAxOwogICAgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQogICAgICAgICB7CiAgICAgICAgICAgZnRfbWVtY3B5KCB2YWx1ZSwgKHZvaWQgKikoIHR5cGUxLT5nbHlwaF9uYW1lc1tpZHhdICksIHJldHZhbCApOwpAQCAtMjkwLDcgKzI5Miw3IEBACiAgICAgY2FzZSBQU19ESUNUX0NIQVJfU1RSSU5HOgogICAgICAgaWYgKCBpZHggPCAoRlRfVUludCl0eXBlMS0+bnVtX2dseXBocyApCiAgICAgICB7Ci0gICAgICAgIHJldHZhbCA9IChGVF9Mb25nKSggdHlwZTEtPmNoYXJzdHJpbmdzX2xlbltpZHhdICsgMSApOworICAgICAgICByZXR2YWwgPSB0eXBlMS0+Y2hhcnN0cmluZ3NfbGVuW2lkeF0gKyAxOwogICAgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQogICAgICAgICB7CiAgICAgICAgICAgZnRfbWVtY3B5KCB2YWx1ZSwgKHZvaWQgKikoIHR5cGUxLT5jaGFyc3RyaW5nc1tpZHhdICksCkBAIC0zMTAsNyArMzEyLDcgQEAKICAgICAgIGlmICggdHlwZTEtPmVuY29kaW5nX3R5cGUgPT0gVDFfRU5DT0RJTkdfVFlQRV9BUlJBWSAmJgogICAgICAgICAgICBpZHggPCAoRlRfVUludCl0eXBlMS0+ZW5jb2RpbmcubnVtX2NoYXJzICAgICAgICkKICAgICAgIHsKLSAgICAgICAgcmV0dmFsID0gKEZUX0xvbmcpKCBmdF9zdHJsZW4oIHR5cGUxLT5lbmNvZGluZy5jaGFyX25hbWVbaWR4XSApICsgMSApOworICAgICAgICByZXR2YWwgPSBmdF9zdHJsZW4oIHR5cGUxLT5lbmNvZGluZy5jaGFyX25hbWVbaWR4XSApICsgMTsKICAgICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKICAgICAgICAgewogICAgICAgICAgIGZ0X21lbWNweSggdmFsdWUsICh2b2lkICopKCB0eXBlMS0+ZW5jb2RpbmcuY2hhcl9uYW1lW2lkeF0gKSwKQEAgLTMyOSw3ICszMzEsNyBAQAogICAgIGNhc2UgUFNfRElDVF9TVUJSOgogICAgICAgaWYgKCBpZHggPCAoRlRfVUludCl0eXBlMS0+bnVtX3N1YnJzICkKICAgICAgIHsKLSAgICAgICAgcmV0dmFsID0gKEZUX0xvbmcpKCB0eXBlMS0+c3VicnNfbGVuW2lkeF0gKyAxICk7CisgICAgICAgIHJldHZhbCA9IHR5cGUxLT5zdWJyc19sZW5baWR4XSArIDE7CiAgICAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCiAgICAgICAgIHsKICAgICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPnN1YnJzW2lkeF0gKSwgcmV0dmFsIC0gMSApOwpAQCAtNTIzLDMxICs1MjUsMzEgQEAKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBQU19ESUNUX1ZFUlNJT046Ci0gICAgICByZXR2YWwgPSAoRlRfTG9uZykoIGZ0X3N0cmxlbiggdHlwZTEtPmZvbnRfaW5mby52ZXJzaW9uICkgKyAxICk7CisgICAgICByZXR2YWwgPSBmdF9zdHJsZW4oIHR5cGUxLT5mb250X2luZm8udmVyc2lvbiApICsgMTsKICAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCiAgICAgICAgIGZ0X21lbWNweSggdmFsdWUsICh2b2lkICopKCB0eXBlMS0+Zm9udF9pbmZvLnZlcnNpb24gKSwgcmV0dmFsICk7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgUFNfRElDVF9OT1RJQ0U6Ci0gICAgICByZXR2YWwgPSAoRlRfTG9uZykoIGZ0X3N0cmxlbiggdHlwZTEtPmZvbnRfaW5mby5ub3RpY2UgKSArIDEgKTsKKyAgICAgIHJldHZhbCA9IGZ0X3N0cmxlbiggdHlwZTEtPmZvbnRfaW5mby5ub3RpY2UgKSArIDE7CiAgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQogICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfaW5mby5ub3RpY2UgKSwgcmV0dmFsICk7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgUFNfRElDVF9GVUxMX05BTUU6Ci0gICAgICByZXR2YWwgPSAoRlRfTG9uZykoIGZ0X3N0cmxlbiggdHlwZTEtPmZvbnRfaW5mby5mdWxsX25hbWUgKSArIDEgKTsKKyAgICAgIHJldHZhbCA9IGZ0X3N0cmxlbiggdHlwZTEtPmZvbnRfaW5mby5mdWxsX25hbWUgKSArIDE7CiAgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQogICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfaW5mby5mdWxsX25hbWUgKSwgcmV0dmFsICk7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgUFNfRElDVF9GQU1JTFlfTkFNRToKLSAgICAgIHJldHZhbCA9IChGVF9Mb25nKSggZnRfc3RybGVuKCB0eXBlMS0+Zm9udF9pbmZvLmZhbWlseV9uYW1lICkgKyAxICk7CisgICAgICByZXR2YWwgPSBmdF9zdHJsZW4oIHR5cGUxLT5mb250X2luZm8uZmFtaWx5X25hbWUgKSArIDE7CiAgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQogICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfaW5mby5mYW1pbHlfbmFtZSApLCByZXR2YWwgKTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBQU19ESUNUX1dFSUdIVDoKLSAgICAgIHJldHZhbCA9IChGVF9Mb25nKSggZnRfc3RybGVuKCB0eXBlMS0+Zm9udF9pbmZvLndlaWdodCApICsgMSApOworICAgICAgcmV0dmFsID0gZnRfc3RybGVuKCB0eXBlMS0+Zm9udF9pbmZvLndlaWdodCApICsgMTsKICAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCiAgICAgICAgIGZ0X21lbWNweSggdmFsdWUsICh2b2lkICopKCB0eXBlMS0+Zm9udF9pbmZvLndlaWdodCApLCByZXR2YWwgKTsKICAgICAgIGJyZWFrOwpAQCAtNTU5LDcgKzU2MSw3IEBACiAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXR1cm4gcmV0dmFsOworICAgIHJldHVybiByZXR2YWwgPT0gMCA/IC0xIDogKEZUX0xvbmcpcmV0dmFsOwogICB9CiAKIApAQCAtNTkwLDcgKzU5Miw3IEBACiAgIHsKICAgICB7IEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9GT05UX05BTUUsICZ0MV9zZXJ2aWNlX3BzX25hbWUgfSwKICAgICB7IEZUX1NFUlZJQ0VfSURfR0xZUEhfRElDVCwgICAgICAgICAgICZ0MV9zZXJ2aWNlX2dseXBoX2RpY3QgfSwKLSAgICB7IEZUX1NFUlZJQ0VfSURfWEY4Nl9OQU1FLCAgICAgICAgICAgIEZUX1hGODZfRk9STUFUX1RZUEVfMSB9LAorICAgIHsgRlRfU0VSVklDRV9JRF9GT05UX0ZPUk1BVCwgICAgICAgICAgRlRfRk9OVF9GT1JNQVRfVFlQRV8xIH0sCiAgICAgeyBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfSU5GTywgICAgICAmdDFfc2VydmljZV9wc19pbmZvIH0sCiAKICNpZm5kZWYgVDFfQ09ORklHX09QVElPTl9OT19BRk0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS90MWRyaXZlci5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxZHJpdmVyLmgKaW5kZXggNjM5Y2Q0YS4uMzRiY2Y4MSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxZHJpdmVyLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxZHJpdmVyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSGlnaC1sZXZlbCBUeXBlIDEgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS90MWVycm9ycy5oIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxZXJyb3JzLmgKaW5kZXggODc0MDUzMC4uZmM3YTliZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxZXJyb3JzLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxZXJyb3JzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHlwZSAxIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEsIDIwMTIgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS90MWdsb2FkLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFnbG9hZC5jCmluZGV4IGFmMTAyZmQuLjg1YWRhMmUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS90MWdsb2FkLmMKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxZ2xvYWQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDEgR2x5cGggTG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDA2LCAyMDA4LTIwMTAsIDIwMTMsIDIwMTQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNTQsNyArNTQsNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBzdGF0aWMgRlRfRXJyb3IKICAgVDFfUGFyc2VfR2x5cGhfQW5kX0dldF9DaGFyX1N0cmluZyggVDFfRGVjb2RlciAgZGVjb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgZ2x5cGhfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0RhdGEqICAgIGNoYXJfc3RyaW5nICkKQEAgLTkyLDcgKzkyLDcgQEAKICAgICBpZiAoICFlcnJvciApCiAgICAgICBlcnJvciA9IGRlY29kZXItPmZ1bmNzLnBhcnNlX2NoYXJzdHJpbmdzKAogICAgICAgICAgICAgICAgIGRlY29kZXIsIChGVF9CeXRlKiljaGFyX3N0cmluZy0+cG9pbnRlciwKLSAgICAgICAgICAgICAgICBjaGFyX3N0cmluZy0+bGVuZ3RoICk7CisgICAgICAgICAgICAgICAgKEZUX1VJbnQpY2hhcl9zdHJpbmctPmxlbmd0aCApOwogCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAogCkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICBmb3IgKCBnbHlwaF9pbmRleCA9IDA7IGdseXBoX2luZGV4IDwgdHlwZTEtPm51bV9nbHlwaHM7IGdseXBoX2luZGV4KysgKQogICAgIHsKICAgICAgIC8qIG5vdyBnZXQgbG9hZCB0aGUgdW5zY2FsZWQgb3V0bGluZSAqLwotICAgICAgKHZvaWQpVDFfUGFyc2VfR2x5cGgoICZkZWNvZGVyLCBnbHlwaF9pbmRleCApOworICAgICAgKHZvaWQpVDFfUGFyc2VfR2x5cGgoICZkZWNvZGVyLCAoRlRfVUludClnbHlwaF9pbmRleCApOwogICAgICAgaWYgKCBnbHlwaF9pbmRleCA9PSAwIHx8IGRlY29kZXIuYnVpbGRlci5hZHZhbmNlLnggPiAqbWF4X2FkdmFuY2UgKQogICAgICAgICAqbWF4X2FkdmFuY2UgPSBkZWNvZGVyLmJ1aWxkZXIuYWR2YW5jZS54OwogCkBAIC0zOTUsNyArMzk1LDYgQEAKICAgICAgIHsKICAgICAgICAgRlRfQkJveCAgICAgICAgICAgIGNib3g7CiAgICAgICAgIEZUX0dseXBoX01ldHJpY3MqICBtZXRyaWNzID0gJnQxZ2x5cGgtPm1ldHJpY3M7Ci0gICAgICAgIEZUX1ZlY3RvciAgICAgICAgICBhZHZhbmNlOwogCiAKICAgICAgICAgLyogY29weSB0aGUgX3Vuc2NhbGVkXyBhZHZhbmNlIHdpZHRoICovCkBAIC00MjcsMjMgKzQyNiwyNiBAQAogCiAjaWYgMQogICAgICAgICAvKiBhcHBseSB0aGUgZm9udCBtYXRyaXgsIGlmIGFueSAqLwotICAgICAgICBpZiAoIGZvbnRfbWF0cml4Lnh4ICE9IDB4MTAwMDBMIHx8IGZvbnRfbWF0cml4Lnl5ICE9IGZvbnRfbWF0cml4Lnh4IHx8Ci0gICAgICAgICAgICAgZm9udF9tYXRyaXgueHkgIT0gMCAgICAgICAgfHwgZm9udF9tYXRyaXgueXggIT0gMCAgICAgICAgICAgICAgKQorICAgICAgICBpZiAoIGZvbnRfbWF0cml4Lnh4ICE9IDB4MTAwMDBMIHx8IGZvbnRfbWF0cml4Lnl5ICE9IDB4MTAwMDBMIHx8CisgICAgICAgICAgICAgZm9udF9tYXRyaXgueHkgIT0gMCAgICAgICAgfHwgZm9udF9tYXRyaXgueXggIT0gMCAgICAgICAgKQorICAgICAgICB7CiAgICAgICAgICAgRlRfT3V0bGluZV9UcmFuc2Zvcm0oICZ0MWdseXBoLT5vdXRsaW5lLCAmZm9udF9tYXRyaXggKTsKIAorICAgICAgICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlID0gRlRfTXVsRml4KCBtZXRyaWNzLT5ob3JpQWR2YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udF9tYXRyaXgueHggKTsKKyAgICAgICAgICBtZXRyaWNzLT52ZXJ0QWR2YW5jZSA9IEZUX011bEZpeCggbWV0cmljcy0+dmVydEFkdmFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfbWF0cml4Lnl5ICk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoIGZvbnRfb2Zmc2V0LnggfHwgZm9udF9vZmZzZXQueSApCisgICAgICAgIHsKICAgICAgICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggJnQxZ2x5cGgtPm91dGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfb2Zmc2V0LngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfb2Zmc2V0LnkgKTsKIAotICAgICAgICBhZHZhbmNlLnggPSBtZXRyaWNzLT5ob3JpQWR2YW5jZTsKLSAgICAgICAgYWR2YW5jZS55ID0gMDsKLSAgICAgICAgRlRfVmVjdG9yX1RyYW5zZm9ybSggJmFkdmFuY2UsICZmb250X21hdHJpeCApOwotICAgICAgICBtZXRyaWNzLT5ob3JpQWR2YW5jZSA9IGFkdmFuY2UueCArIGZvbnRfb2Zmc2V0Lng7Ci0gICAgICAgIGFkdmFuY2UueCA9IDA7Ci0gICAgICAgIGFkdmFuY2UueSA9IG1ldHJpY3MtPnZlcnRBZHZhbmNlOwotICAgICAgICBGVF9WZWN0b3JfVHJhbnNmb3JtKCAmYWR2YW5jZSwgJmZvbnRfbWF0cml4ICk7Ci0gICAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlID0gYWR2YW5jZS55ICsgZm9udF9vZmZzZXQueTsKKyAgICAgICAgICBtZXRyaWNzLT5ob3JpQWR2YW5jZSArPSBmb250X29mZnNldC54OworICAgICAgICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlICs9IGZvbnRfb2Zmc2V0Lnk7CisgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgIGlmICggKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApID09IDAgKQpAQCAtNTA0LDcgKzUwNiw3IEBACiAKICAgICAgIC8qIFNldCB0aGUgY29udHJvbCBkYXRhIHRvIG51bGwgLSBpdCBpcyBubyBsb25nZXIgYXZhaWxhYmxlIGlmICAgKi8KICAgICAgIC8qIGxvYWRlZCBpbmNyZW1lbnRhbGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIHQxZ2x5cGgtPmNvbnRyb2xfZGF0YSA9IDA7CisgICAgICB0MWdseXBoLT5jb250cm9sX2RhdGEgPSBOVUxMOwogICAgICAgdDFnbHlwaC0+Y29udHJvbF9sZW4gID0gMDsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS90MWdsb2FkLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFnbG9hZC5oCmluZGV4IDBiZGVhM2EuLjA1ZjYwZDUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS90MWdsb2FkLmgKKysrIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxZ2xvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDEgR2x5cGggTG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDAyLCAyMDAzLCAyMDA4LCAyMDExIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxbG9hZC5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxbG9hZC5jCmluZGV4IDIyYjNmNmIuLmRiZjRlYWYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS90MWxvYWQuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFsb2FkLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHlwZSAxIGZvbnQgbG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIyNiw3ICsyMjYsNyBAQAogICAvKiBHaXZlbiBhIG5vcm1hbGl6ZWQgKGJsZW5kKSBjb29yZGluYXRlLCBmaWd1cmUgb3V0IHRoZSBkZXNpZ24gICAgICAgICAgKi8KICAgLyogY29vcmRpbmF0ZSBhcHByb3ByaWF0ZSBmb3IgdGhhdCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBGVF9MT0NBTF9ERUYoIEZUX0ZpeGVkICkKKyAgc3RhdGljIEZUX0ZpeGVkCiAgIG1tX2F4aXNfdW5tYXAoIFBTX0Rlc2lnbk1hcCAgYXhpc21hcCwKICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICAgICBuY3YgKQogICB7CkBAIC0yNTUsNyArMjU1LDcgQEAKICAgLyogR2l2ZW4gYSB2ZWN0b3Igb2Ygd2VpZ2h0cywgb25lIGZvciBlYWNoIGRlc2lnbiwgZmlndXJlIG91dCB0aGUgICAgICAgICovCiAgIC8qIG5vcm1hbGl6ZWQgYXhpcyBjb29yZGluYXRlcyB3aGljaCBnYXZlIHJpc2UgdG8gdGhvc2Ugd2VpZ2h0cy4gICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgc3RhdGljIHZvaWQKICAgbW1fd2VpZ2h0c191bm1hcCggRlRfRml4ZWQqICB3ZWlnaHRzLAogICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGF4aXNjb29yZHMsCiAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgYXhpc19jb3VudCApCkBAIC0zNjgsNDQgKzM2OCw0MyBAQAogICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRzICkKICAgewogICAgIFBTX0JsZW5kICBibGVuZCA9IGZhY2UtPmJsZW5kOwotICAgIEZUX0Vycm9yICBlcnJvcjsKICAgICBGVF9VSW50ICAgbiwgbTsKIAogCi0gICAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICBpZiAoICFibGVuZCApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKIAotICAgIGlmICggYmxlbmQgJiYgYmxlbmQtPm51bV9heGlzID09IG51bV9jb29yZHMgKQorICAgIGlmICggbnVtX2Nvb3JkcyA+IGJsZW5kLT5udW1fYXhpcyApCisgICAgICBudW1fY29vcmRzID0gYmxlbmQtPm51bV9heGlzOworCisgICAgLyogcmVjb21wdXRlIHRoZSB3ZWlnaHQgdmVjdG9yIGZyb20gdGhlIGJsZW5kIGNvb3JkaW5hdGVzICovCisgICAgZm9yICggbiA9IDA7IG4gPCBibGVuZC0+bnVtX2Rlc2lnbnM7IG4rKyApCiAgICAgewotICAgICAgLyogcmVjb21wdXRlIHRoZSB3ZWlnaHQgdmVjdG9yIGZyb20gdGhlIGJsZW5kIGNvb3JkaW5hdGVzICovCi0gICAgICBmb3IgKCBuID0gMDsgbiA8IGJsZW5kLT5udW1fZGVzaWduczsgbisrICkKKyAgICAgIEZUX0ZpeGVkICByZXN1bHQgPSAweDEwMDAwTDsgIC8qIDEuMCBmaXhlZCAqLworCisKKyAgICAgIGZvciAoIG0gPSAwOyBtIDwgYmxlbmQtPm51bV9heGlzOyBtKysgKQogICAgICAgewotICAgICAgICBGVF9GaXhlZCAgcmVzdWx0ID0gMHgxMDAwMEw7ICAvKiAxLjAgZml4ZWQgKi8KKyAgICAgICAgRlRfRml4ZWQgIGZhY3RvcjsKIAogCi0gICAgICAgIGZvciAoIG0gPSAwOyBtIDwgYmxlbmQtPm51bV9heGlzOyBtKysgKQotICAgICAgICB7Ci0gICAgICAgICAgRlRfRml4ZWQgIGZhY3RvcjsKKyAgICAgICAgLyogZ2V0IGN1cnJlbnQgYmxlbmQgYXhpcyBwb3NpdGlvbjsgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiB1c2UgYSBkZWZhdWx0IHZhbHVlIGlmIHdlIGRvbid0IGhhdmUgYSBjb29yZGluYXRlICovCisgICAgICAgIGZhY3RvciA9IG0gPCBudW1fY29vcmRzID8gY29vcmRzW21dIDogMHg4MDAwOworICAgICAgICBpZiAoIGZhY3RvciA8IDAgKQorICAgICAgICAgIGZhY3RvciA9IDA7CisgICAgICAgIGlmICggZmFjdG9yID4gMHgxMDAwMEwgKQorICAgICAgICAgIGZhY3RvciA9IDB4MTAwMDBMOwogCisgICAgICAgIGlmICggKCBuICYgKCAxIDw8IG0gKSApID09IDAgKQorICAgICAgICAgIGZhY3RvciA9IDB4MTAwMDBMIC0gZmFjdG9yOwogCi0gICAgICAgICAgLyogZ2V0IGN1cnJlbnQgYmxlbmQgYXhpcyBwb3NpdGlvbiAqLwotICAgICAgICAgIGZhY3RvciA9IGNvb3Jkc1ttXTsKLSAgICAgICAgICBpZiAoIGZhY3RvciA8IDAgKQotICAgICAgICAgICAgZmFjdG9yID0gMDsKLSAgICAgICAgICBpZiAoIGZhY3RvciA+IDB4MTAwMDBMICkKLSAgICAgICAgICAgIGZhY3RvciA9IDB4MTAwMDBMOwotCi0gICAgICAgICAgaWYgKCAoIG4gJiAoIDEgPDwgbSApICkgPT0gMCApCi0gICAgICAgICAgICBmYWN0b3IgPSAweDEwMDAwTCAtIGZhY3RvcjsKLQotICAgICAgICAgIHJlc3VsdCA9IEZUX011bEZpeCggcmVzdWx0LCBmYWN0b3IgKTsKLSAgICAgICAgfQotICAgICAgICBibGVuZC0+d2VpZ2h0X3ZlY3RvcltuXSA9IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0ID0gRlRfTXVsRml4KCByZXN1bHQsIGZhY3RvciApOwogICAgICAgfQotCi0gICAgICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICAgIGJsZW5kLT53ZWlnaHRfdmVjdG9yW25dID0gcmVzdWx0OwogICAgIH0KIAotICAgIHJldHVybiBlcnJvcjsKKyAgICByZXR1cm4gRlRfRXJyX09rOwogICB9CiAKIApAQCAtNDE1LDY4ICs0MTQsNzIgQEAKICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyogIGNvb3JkcyApCiAgIHsKICAgICBQU19CbGVuZCAgYmxlbmQgPSBmYWNlLT5ibGVuZDsKLSAgICBGVF9FcnJvciAgZXJyb3I7CiAgICAgRlRfVUludCAgIG4sIHA7CisgICAgRlRfRml4ZWQgIGZpbmFsX2JsZW5kc1tUMV9NQVhfTU1fREVTSUdOU107CiAKIAotICAgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0gICAgaWYgKCBibGVuZCAmJiBibGVuZC0+bnVtX2F4aXMgPT0gbnVtX2Nvb3JkcyApCisgICAgaWYgKCAhYmxlbmQgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBpZiAoIG51bV9jb29yZHMgPiBibGVuZC0+bnVtX2F4aXMgKQorICAgICAgbnVtX2Nvb3JkcyA9IGJsZW5kLT5udW1fYXhpczsKKworICAgIC8qIGNvbXB1dGUgdGhlIGJsZW5kIGNvb3JkaW5hdGVzIHRocm91Z2ggdGhlIGJsZW5kIGRlc2lnbiBtYXAgKi8KKworICAgIGZvciAoIG4gPSAwOyBuIDwgYmxlbmQtPm51bV9heGlzOyBuKysgKQogICAgIHsKLSAgICAgIC8qIGNvbXB1dGUgdGhlIGJsZW5kIGNvb3JkaW5hdGVzIHRocm91Z2ggdGhlIGJsZW5kIGRlc2lnbiBtYXAgKi8KLSAgICAgIEZUX0ZpeGVkICBmaW5hbF9ibGVuZHNbVDFfTUFYX01NX0RFU0lHTlNdOworICAgICAgRlRfTG9uZyAgICAgICBkZXNpZ247CisgICAgICBGVF9GaXhlZCAgICAgIHRoZV9ibGVuZDsKKyAgICAgIFBTX0Rlc2lnbk1hcCAgbWFwICAgICA9IGJsZW5kLT5kZXNpZ25fbWFwICsgbjsKKyAgICAgIEZUX0xvbmcqICAgICAgZGVzaWducyA9IG1hcC0+ZGVzaWduX3BvaW50czsKKyAgICAgIEZUX0ZpeGVkKiAgICAgYmxlbmRzICA9IG1hcC0+YmxlbmRfcG9pbnRzOworICAgICAgRlRfSW50ICAgICAgICBiZWZvcmUgID0gLTEsIGFmdGVyID0gLTE7CiAKIAotICAgICAgZm9yICggbiA9IDA7IG4gPCBibGVuZC0+bnVtX2F4aXM7IG4rKyApCisgICAgICAvKiB1c2UgYSBkZWZhdWx0IHZhbHVlIGlmIHdlIGRvbid0IGhhdmUgYSBjb29yZGluYXRlICovCisgICAgICBpZiAoIG4gPCBudW1fY29vcmRzICkKKyAgICAgICAgZGVzaWduID0gY29vcmRzW25dOworICAgICAgZWxzZQorICAgICAgICBkZXNpZ24gPSAoIGRlc2lnbnNbbWFwLT5udW1fcG9pbnRzIC0gMV0gLSBkZXNpZ25zWzBdICkgLyAyOworCisgICAgICBmb3IgKCBwID0gMDsgcCA8IChGVF9VSW50KW1hcC0+bnVtX3BvaW50czsgcCsrICkKICAgICAgIHsKLSAgICAgICAgRlRfTG9uZyAgICAgICBkZXNpZ24gID0gY29vcmRzW25dOwotICAgICAgICBGVF9GaXhlZCAgICAgIHRoZV9ibGVuZDsKLSAgICAgICAgUFNfRGVzaWduTWFwICBtYXAgICAgID0gYmxlbmQtPmRlc2lnbl9tYXAgKyBuOwotICAgICAgICBGVF9Mb25nKiAgICAgIGRlc2lnbnMgPSBtYXAtPmRlc2lnbl9wb2ludHM7Ci0gICAgICAgIEZUX0ZpeGVkKiAgICAgYmxlbmRzICA9IG1hcC0+YmxlbmRfcG9pbnRzOwotICAgICAgICBGVF9JbnQgICAgICAgIGJlZm9yZSAgPSAtMSwgYWZ0ZXIgPSAtMTsKKyAgICAgICAgRlRfTG9uZyAgcF9kZXNpZ24gPSBkZXNpZ25zW3BdOwogCiAKLSAgICAgICAgZm9yICggcCA9IDA7IHAgPCAoRlRfVUludCltYXAtPm51bV9wb2ludHM7IHArKyApCisgICAgICAgIC8qIGV4YWN0IG1hdGNoPyAqLworICAgICAgICBpZiAoIGRlc2lnbiA9PSBwX2Rlc2lnbiApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9Mb25nICBwX2Rlc2lnbiA9IGRlc2lnbnNbcF07Ci0KLQotICAgICAgICAgIC8qIGV4YWN0IG1hdGNoPyAqLwotICAgICAgICAgIGlmICggZGVzaWduID09IHBfZGVzaWduICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aGVfYmxlbmQgPSBibGVuZHNbcF07Ci0gICAgICAgICAgICBnb3RvIEZvdW5kOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICggZGVzaWduIDwgcF9kZXNpZ24gKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGFmdGVyID0gcDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGJlZm9yZSA9IHA7CisgICAgICAgICAgdGhlX2JsZW5kID0gYmxlbmRzW3BdOworICAgICAgICAgIGdvdG8gRm91bmQ7CiAgICAgICAgIH0KIAotICAgICAgICAvKiBub3cgaW50ZXJwb2xhdGUgaWYgbmVjZXNzYXJ5ICovCi0gICAgICAgIGlmICggYmVmb3JlIDwgMCApCi0gICAgICAgICAgdGhlX2JsZW5kID0gYmxlbmRzWzBdOworICAgICAgICBpZiAoIGRlc2lnbiA8IHBfZGVzaWduICkKKyAgICAgICAgeworICAgICAgICAgIGFmdGVyID0gKEZUX0ludClwOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKLSAgICAgICAgZWxzZSBpZiAoIGFmdGVyIDwgMCApCi0gICAgICAgICAgdGhlX2JsZW5kID0gYmxlbmRzW21hcC0+bnVtX3BvaW50cyAtIDFdOwotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICB0aGVfYmxlbmQgPSBGVF9NdWxEaXYoIGRlc2lnbiAgICAgICAgIC0gZGVzaWduc1tiZWZvcmVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRzIFthZnRlcl0gLSBibGVuZHMgW2JlZm9yZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpZ25zW2FmdGVyXSAtIGRlc2lnbnNbYmVmb3JlXSApOwotCi0gICAgICBGb3VuZDoKLSAgICAgICAgZmluYWxfYmxlbmRzW25dID0gdGhlX2JsZW5kOworICAgICAgICBiZWZvcmUgPSAoRlRfSW50KXA7CiAgICAgICB9CiAKLSAgICAgIGVycm9yID0gVDFfU2V0X01NX0JsZW5kKCBmYWNlLCBudW1fY29vcmRzLCBmaW5hbF9ibGVuZHMgKTsKKyAgICAgIC8qIG5vdyBpbnRlcnBvbGF0ZSBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIGlmICggYmVmb3JlIDwgMCApCisgICAgICAgIHRoZV9ibGVuZCA9IGJsZW5kc1swXTsKKworICAgICAgZWxzZSBpZiAoIGFmdGVyIDwgMCApCisgICAgICAgIHRoZV9ibGVuZCA9IGJsZW5kc1ttYXAtPm51bV9wb2ludHMgLSAxXTsKKworICAgICAgZWxzZQorICAgICAgICB0aGVfYmxlbmQgPSBGVF9NdWxEaXYoIGRlc2lnbiAgICAgICAgIC0gZGVzaWduc1tiZWZvcmVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kcyBbYWZ0ZXJdIC0gYmxlbmRzIFtiZWZvcmVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lnbnNbYWZ0ZXJdIC0gZGVzaWduc1tiZWZvcmVdICk7CisKKyAgICBGb3VuZDoKKyAgICAgIGZpbmFsX2JsZW5kc1tuXSA9IHRoZV9ibGVuZDsKICAgICB9CiAKLSAgICByZXR1cm4gZXJyb3I7CisgICAgcmV0dXJuIFQxX1NldF9NTV9CbGVuZCggZmFjZSwgYmxlbmQtPm51bV9heGlzLCBmaW5hbF9ibGVuZHMgKTsKICAgfQogCiAKQEAgLTQ5MCwyMCArNDkzLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIG51bV9jb29yZHMsCiAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApCiAgIHsKLSAgICAgRlRfTG9uZyAgIGxjb29yZHNbNF07ICAgICAgICAgIC8qIG1heGltdW0gYXhpcyBjb3VudCBpcyA0ICovCi0gICAgIEZUX1VJbnQgICBpOwotICAgICBGVF9FcnJvciAgZXJyb3I7CisgICAgIEZUX0xvbmcgIGxjb29yZHNbVDFfTUFYX01NX0FYSVNdOworICAgICBGVF9VSW50ICBpOwogCiAKLSAgICAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfQXJndW1lbnQgKTsKLSAgICAgaWYgKCBudW1fY29vcmRzIDw9IDQgJiYgbnVtX2Nvb3JkcyA+IDAgKQotICAgICB7Ci0gICAgICAgZm9yICggaSA9IDA7IGkgPCBudW1fY29vcmRzOyArK2kgKQotICAgICAgICAgbGNvb3Jkc1tpXSA9IEZJWEVEX1RPX0lOVCggY29vcmRzW2ldICk7Ci0gICAgICAgZXJyb3IgPSBUMV9TZXRfTU1fRGVzaWduKCBmYWNlLCBudW1fY29vcmRzLCBsY29vcmRzICk7Ci0gICAgIH0KKyAgICAgaWYgKCBudW1fY29vcmRzID4gVDFfTUFYX01NX0FYSVMgKQorICAgICAgIG51bV9jb29yZHMgPSBUMV9NQVhfTU1fQVhJUzsKIAotICAgICByZXR1cm4gZXJyb3I7CisgICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2Nvb3JkczsgKytpICkKKyAgICAgICBsY29vcmRzW2ldID0gRklYRURfVE9fSU5UKCBjb29yZHNbaV0gKTsKKworICAgICByZXR1cm4gVDFfU2V0X01NX0Rlc2lnbiggZmFjZSwgbnVtX2Nvb3JkcywgbGNvb3JkcyApOwogICB9CiAKIApAQCAtNTk5LDIzICs1OTksMzIgQEAKICAgICAvKiBlYWNoIHRva2VuIGlzIGFuIGltbWVkaWF0ZSBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBheGlzICovCiAgICAgZm9yICggbiA9IDA7IG4gPCBudW1fYXhpczsgbisrICkKICAgICB7Ci0gICAgICBUMV9Ub2tlbiAgICB0b2tlbiA9IGF4aXNfdG9rZW5zICsgbjsKLSAgICAgIEZUX0J5dGUqICAgIG5hbWU7Ci0gICAgICBGVF9QdHJEaXN0ICBsZW47CisgICAgICBUMV9Ub2tlbiAgdG9rZW4gPSBheGlzX3Rva2VucyArIG47CisgICAgICBGVF9CeXRlKiAgbmFtZTsKKyAgICAgIEZUX1VJbnQgICBsZW47CiAKIAogICAgICAgLyogc2tpcCBmaXJzdCBzbGFzaCwgaWYgYW55ICovCiAgICAgICBpZiAoIHRva2VuLT5zdGFydFswXSA9PSAnLycgKQogICAgICAgICB0b2tlbi0+c3RhcnQrKzsKIAotICAgICAgbGVuID0gdG9rZW4tPmxpbWl0IC0gdG9rZW4tPnN0YXJ0OworICAgICAgbGVuID0gKEZUX1VJbnQpKCB0b2tlbi0+bGltaXQgLSB0b2tlbi0+c3RhcnQgKTsKICAgICAgIGlmICggbGVuID09IDAgKQogICAgICAgewogICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CiAgICAgICAgIGdvdG8gRXhpdDsKICAgICAgIH0KIAotICAgICAgaWYgKCBGVF9BTExPQyggYmxlbmQtPmF4aXNfbmFtZXNbbl0sIChGVF9Mb25nKSggbGVuICsgMSApICkgKQorICAgICAgbmFtZSA9IChGVF9CeXRlKilibGVuZC0+YXhpc19uYW1lc1tuXTsKKyAgICAgIGlmICggbmFtZSApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMCgoICJwYXJzZV9ibGVuZF9heGlzX3R5cGVzOiIKKyAgICAgICAgICAgICAgICAgICAgIiBvdmVyd3JpdGluZyBheGlzIG5hbWUgYCVzJyB3aXRoIGAlKi5zJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwgbGVuLCB0b2tlbi0+c3RhcnQgKSk7CisgICAgICAgIEZUX0ZSRUUoIG5hbWUgKTsKKyAgICAgIH0KKworICAgICAgaWYgKCBGVF9BTExPQyggYmxlbmQtPmF4aXNfbmFtZXNbbl0sIGxlbiArIDEgKSApCiAgICAgICAgIGdvdG8gRXhpdDsKIAogICAgICAgbmFtZSA9IChGVF9CeXRlKilibGVuZC0+YXhpc19uYW1lc1tuXTsKQEAgLTY5Miw3ICs3MDEsOSBAQAogICAgICAgICAgIH0KIAogICAgICAgICAgIG51bV9heGlzID0gbl9heGlzOwotICAgICAgICAgIGVycm9yID0gdDFfYWxsb2NhdGVfYmxlbmQoIGZhY2UsIG51bV9kZXNpZ25zLCBudW1fYXhpcyApOworICAgICAgICAgIGVycm9yID0gdDFfYWxsb2NhdGVfYmxlbmQoIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpbnVtX2Rlc2lnbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpbnVtX2F4aXMgKTsKICAgICAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgICAgIGdvdG8gRXhpdDsKICAgICAgICAgICBibGVuZCA9IGZhY2UtPmJsZW5kOwpAQCAtNzU3LDcgKzc2OCw3IEBACiAgICAgb2xkX2N1cnNvciA9IHBhcnNlci0+cm9vdC5jdXJzb3I7CiAgICAgb2xkX2xpbWl0ICA9IHBhcnNlci0+cm9vdC5saW1pdDsKIAotICAgIGVycm9yID0gdDFfYWxsb2NhdGVfYmxlbmQoIGZhY2UsIDAsIG51bV9heGlzICk7CisgICAgZXJyb3IgPSB0MV9hbGxvY2F0ZV9ibGVuZCggZmFjZSwgMCwgKEZUX1VJbnQpbnVtX2F4aXMgKTsKICAgICBpZiAoIGVycm9yICkKICAgICAgIGdvdG8gRXhpdDsKICAgICBibGVuZCA9IGZhY2UtPmJsZW5kOwpAQCAtNzg1LDYgKzc5NiwxMyBAQAogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICB9CiAKKyAgICAgIGlmICggbWFwLT5kZXNpZ25fcG9pbnRzICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAicGFyc2VfYmxlbmRfZGVzaWduX21hcDogZHVwbGljYXRlIHRhYmxlXG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKwogICAgICAgLyogYWxsb2NhdGUgZGVzaWduIG1hcCBkYXRhICovCiAgICAgICBpZiAoIEZUX05FV19BUlJBWSggbWFwLT5kZXNpZ25fcG9pbnRzLCBudW1fcG9pbnRzICogMiApICkKICAgICAgICAgZ290byBFeGl0OwpAQCAtODQ4LDcgKzg2Niw3IEBACiAKICAgICBpZiAoICFibGVuZCB8fCAhYmxlbmQtPm51bV9kZXNpZ25zICkKICAgICB7Ci0gICAgICBlcnJvciA9IHQxX2FsbG9jYXRlX2JsZW5kKCBmYWNlLCBudW1fZGVzaWducywgMCApOworICAgICAgZXJyb3IgPSB0MV9hbGxvY2F0ZV9ibGVuZCggZmFjZSwgKEZUX1VJbnQpbnVtX2Rlc2lnbnMsIDAgKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICBibGVuZCA9IGZhY2UtPmJsZW5kOwpAQCAtODkwLDggKzkwOCw4IEBACiAgIHBhcnNlX2J1aWxkY2hhciggVDFfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgIFQxX0xvYWRlciAgbG9hZGVyICkKICAgewotICAgIGZhY2UtPmxlbl9idWlsZGNoYXIgPSBUMV9Ub0ZpeGVkQXJyYXkoICZsb2FkZXItPnBhcnNlciwgMCwgTlVMTCwgMCApOwotCisgICAgZmFjZS0+bGVuX2J1aWxkY2hhciA9IChGVF9VSW50KVQxX1RvRml4ZWRBcnJheSggJmxvYWRlci0+cGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5VTEwsIDAgKTsKICAgICByZXR1cm47CiAgIH0KIApAQCAtMTAzOCw5ICsxMDU2LDExIEBACiAgIH0KIAogCisgIC8qIHJldHVybiAxIGluIGNhc2Ugb2Ygc3VjY2VzcyAqLworCiAgIHN0YXRpYyBpbnQKICAgcmVhZF9iaW5hcnlfZGF0YSggVDFfUGFyc2VyICBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICBzaXplLAogICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiogIGJhc2UsCiAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgaW5jcmVtZW50YWwgKQogICB7CkBAIC0xMDcyLDcgKzEwOTIsNyBAQAogICAgICAgaWYgKCBzID49IDAgJiYgcyA8IGxpbWl0IC0gKmJhc2UgKQogICAgICAgewogICAgICAgICBwYXJzZXItPnJvb3QuY3Vyc29yICs9IHMgKyAxOwotICAgICAgICAqc2l6ZSA9IHM7CisgICAgICAgICpzaXplID0gKEZUX1VMb25nKXM7CiAgICAgICAgIHJldHVybiAhcGFyc2VyLT5yb290LmVycm9yOwogICAgICAgfQogICAgIH0KQEAgLTExMDMsNiArMTEyMyw3IEBACiAgICAgRlRfSW50ICAgICAgcmVzdWx0OwogCiAKKyAgICAvKiBpbnB1dCBpcyBzY2FsZWQgYnkgMTAwMCB0byBhY2NvbW1vZGF0ZSBkZWZhdWx0IEZvbnRNYXRyaXggKi8KICAgICByZXN1bHQgPSBUMV9Ub0ZpeGVkQXJyYXkoIHBhcnNlciwgNiwgdGVtcCwgMyApOwogCiAgICAgaWYgKCByZXN1bHQgPCA2ICkKQEAgLTExMjAsMTUgKzExNDEsMTIgQEAKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvKiBTZXQgVW5pdHMgcGVyIEVNIGJhc2VkIG9uIEZvbnRNYXRyaXggdmFsdWVzLiAgV2Ugc2V0IHRoZSB2YWx1ZSB0byAqLwotICAgIC8qIDEwMDAgLyB0ZW1wX3NjYWxlLCBiZWNhdXNlIHRlbXBfc2NhbGUgd2FzIGFscmVhZHkgbXVsdGlwbGllZCBieSAgICovCi0gICAgLyogMTAwMCAoaW4gdDFfdG9maXhlZCwgZnJvbSBwc29ianMuYykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgIHJvb3QtPnVuaXRzX3Blcl9FTSA9IChGVF9VU2hvcnQpRlRfRGl2Rml4KCAxMDAwLCB0ZW1wX3NjYWxlICk7Ci0KLSAgICAvKiB3ZSBuZWVkIHRvIHNjYWxlIHRoZSB2YWx1ZXMgYnkgMS4wL3RlbXBfc2NhbGUgKi8KKyAgICAvKiBhdHlwaWNhbCBjYXNlICovCiAgICAgaWYgKCB0ZW1wX3NjYWxlICE9IDB4MTAwMDBMICkKICAgICB7CisgICAgICAvKiBzZXQgdW5pdHMgcGVyIEVNIGJhc2VkIG9uIEZvbnRNYXRyaXggdmFsdWVzICovCisgICAgICByb290LT51bml0c19wZXJfRU0gPSAoRlRfVVNob3J0KUZUX0RpdkZpeCggMTAwMCwgdGVtcF9zY2FsZSApOworCiAgICAgICB0ZW1wWzBdID0gRlRfRGl2Rml4KCB0ZW1wWzBdLCB0ZW1wX3NjYWxlICk7CiAgICAgICB0ZW1wWzFdID0gRlRfRGl2Rml4KCB0ZW1wWzFdLCB0ZW1wX3NjYWxlICk7CiAgICAgICB0ZW1wWzJdID0gRlRfRGl2Rml4KCB0ZW1wWzJdLCB0ZW1wX3NjYWxlICk7CkBAIC0xMTkwLDEwICsxMjA4LDI3IEBACiAgICAgICBlbHNlCiAgICAgICAgIGNvdW50ID0gKEZUX0ludClUMV9Ub0ludCggcGFyc2VyICk7CiAKKyAgICAgIC8qIG9ubHkgY29tcG9zaXRlIGZvbnRzICh3aGljaCB3ZSBkb24ndCBzdXBwb3J0KSAqLworICAgICAgLyogY2FuIGhhdmUgbGFyZ2VyIHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIGNvdW50ID4gMjU2ICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAicGFyc2VfZW5jb2Rpbmc6IGludmFsaWQgZW5jb2RpbmcgYXJyYXkgc2l6ZVxuIiApKTsKKyAgICAgICAgcGFyc2VyLT5yb290LmVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCiAgICAgICBUMV9Ta2lwX1NwYWNlcyggcGFyc2VyICk7CiAgICAgICBpZiAoIHBhcnNlci0+cm9vdC5jdXJzb3IgPj0gbGltaXQgKQogICAgICAgICByZXR1cm47CiAKKyAgICAgIC8qIFBvc3RTY3JpcHQgaGFwcGlseSBhbGxvd3Mgb3ZlcndyaXRpbmcgb2YgZW5jb2RpbmcgYXJyYXlzICovCisgICAgICBpZiAoIGVuY29kZS0+Y2hhcl9pbmRleCApCisgICAgICB7CisgICAgICAgIEZUX0ZSRUUoIGVuY29kZS0+Y2hhcl9pbmRleCApOworICAgICAgICBGVF9GUkVFKCBlbmNvZGUtPmNoYXJfbmFtZSApOworICAgICAgICBUMV9SZWxlYXNlX1RhYmxlKCBjaGFyX3RhYmxlICk7CisgICAgICB9CisKICAgICAgIC8qIHdlIHVzZSBhIFQxX1RhYmxlIHRvIHN0b3JlIG91ciBjaGFybmFtZXMgKi8KICAgICAgIGxvYWRlci0+bnVtX2NoYXJzID0gZW5jb2RlLT5udW1fY2hhcnMgPSBjb3VudDsKICAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBlbmNvZGUtPmNoYXJfaW5kZXgsIGNvdW50ICkgICAgIHx8CkBAIC0xMjg1LDcgKzEzMjAsNyBAQAogCiAgICAgICAgICAgaWYgKCBjdXIgKyAyIDwgbGltaXQgJiYgKmN1ciA9PSAnLycgJiYgbiA8IGNvdW50ICkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9QdHJEaXN0ICBsZW47CisgICAgICAgICAgICBGVF9VSW50ICBsZW47CiAKIAogICAgICAgICAgICAgY3VyKys7CkBAIC0xMjk3LDcgKzEzMzIsNyBAQAogICAgICAgICAgICAgaWYgKCBwYXJzZXItPnJvb3QuZXJyb3IgKQogICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGxlbiA9IHBhcnNlci0+cm9vdC5jdXJzb3IgLSBjdXI7CisgICAgICAgICAgICBsZW4gPSAoRlRfVUludCkoIHBhcnNlci0+cm9vdC5jdXJzb3IgLSBjdXIgKTsKIAogICAgICAgICAgICAgcGFyc2VyLT5yb290LmVycm9yID0gVDFfQWRkX1RhYmxlKCBjaGFyX3RhYmxlLCBjaGFyY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyLCBsZW4gKyAxICk7CkBAIC0xNDA3LDcgKzE0NDIsOCBAQAogICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgZm9yICg7OykKICAgICB7Ci0gICAgICBGVF9Mb25nICAgaWR4LCBzaXplOworICAgICAgRlRfTG9uZyAgIGlkeDsKKyAgICAgIEZUX1VMb25nICBzaXplOwogICAgICAgRlRfQnl0ZSogIGJhc2U7CiAKIApAQCAtMTQ1Nyw3ICsxNDkzLDcgQEAKICAgICAgICAgLyogc29tZSBmb250cyBkZWZpbmUgZW1wdHkgc3ViciByZWNvcmRzIC0tIHRoaXMgaXMgbm90IHRvdGFsbHkgKi8KICAgICAgICAgLyogY29tcGxpYW50IHRvIHRoZSBzcGVjaWZpY2F0aW9uICh3aGljaCBzYXlzIHRoZXkgc2hvdWxkIGF0ICAgKi8KICAgICAgICAgLyogbGVhc3QgY29udGFpbiBhIGByZXR1cm4nKSwgYnV0IHdlIHN1cHBvcnQgdGhlbSBhbnl3YXkgICAgICAgKi8KLSAgICAgICAgaWYgKCBzaXplIDwgZmFjZS0+dHlwZTEucHJpdmF0ZV9kaWN0LmxlbklWICkKKyAgICAgICAgaWYgKCBzaXplIDwgKEZUX1VMb25nKWZhY2UtPnR5cGUxLnByaXZhdGVfZGljdC5sZW5JViApCiAgICAgICAgIHsKICAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CiAgICAgICAgICAgZ290byBGYWlsOwpAQCAtMTQ2OCw3ICsxNTA0LDcgQEAKICAgICAgICAgICBnb3RvIEZhaWw7CiAgICAgICAgIEZUX01FTV9DT1BZKCB0ZW1wLCBiYXNlLCBzaXplICk7CiAgICAgICAgIHBzYXV4LT50MV9kZWNyeXB0KCB0ZW1wLCBzaXplLCA0MzMwICk7Ci0gICAgICAgIHNpemUgLT0gZmFjZS0+dHlwZTEucHJpdmF0ZV9kaWN0LmxlbklWOworICAgICAgICBzaXplIC09IChGVF9VTG9uZylmYWNlLT50eXBlMS5wcml2YXRlX2RpY3QubGVuSVY7CiAgICAgICAgIGVycm9yID0gVDFfQWRkX1RhYmxlKCB0YWJsZSwgKEZUX0ludClpZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICsgZmFjZS0+dHlwZTEucHJpdmF0ZV9kaWN0LmxlbklWLCBzaXplICk7CiAgICAgICAgIEZUX0ZSRUUoIHRlbXAgKTsKQEAgLTE1MDUsMTAgKzE1NDEsMTAgQEAKIAogICAgIFBTQXV4X1NlcnZpY2UgIHBzYXV4ICAgICAgICA9IChQU0F1eF9TZXJ2aWNlKWZhY2UtPnBzYXV4OwogCi0gICAgRlRfQnl0ZSogICAgICAgY3VyOworICAgIEZUX0J5dGUqICAgICAgIGN1ciAgICAgICAgICA9IHBhcnNlci0+cm9vdC5jdXJzb3I7CiAgICAgRlRfQnl0ZSogICAgICAgbGltaXQgICAgICAgID0gcGFyc2VyLT5yb290LmxpbWl0OwogICAgIEZUX0ludCAgICAgICAgIG4sIG51bV9nbHlwaHM7Ci0gICAgRlRfVUludCAgICAgICAgbm90ZGVmX2luZGV4ID0gMDsKKyAgICBGVF9JbnQgICAgICAgICBub3RkZWZfaW5kZXggPSAwOwogICAgIEZUX0J5dGUgICAgICAgIG5vdGRlZl9mb3VuZCA9IDA7CiAKIApAQCAtMTUxOSw2ICsxNTU1LDE1IEBACiAgICAgICBnb3RvIEZhaWw7CiAgICAgfQogCisgICAgLyogd2UgY2VydGFpbmx5IG5lZWQgbW9yZSB0aGFuIDggYnl0ZXMgcGVyIGdseXBoICovCisgICAgaWYgKCBudW1fZ2x5cGhzID4gKCBsaW1pdCAtIGN1ciApID4+IDMgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMCgoICJwYXJzZV9jaGFyc3RyaW5nczogYWRqdXN0aW5nIG51bWJlciBvZiBnbHlwaHMiCisgICAgICAgICAgICAgICAgICAiIChmcm9tICVkIHRvICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgIG51bV9nbHlwaHMsICggbGltaXQgLSBjdXIgKSA+PiAzICkpOworICAgICAgbnVtX2dseXBocyA9ICggbGltaXQgLSBjdXIgKSA+PiAzOworICAgIH0KKwogICAgIC8qIHNvbWUgZm9udHMgbGlrZSBPcHRpbWEtT2JsaXF1ZSBub3Qgb25seSBkZWZpbmUgdGhlIC9DaGFyU3RyaW5ncyAqLwogICAgIC8qIGFycmF5IGJ1dCBhY2Nlc3MgaXQgYWxzbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmICggbnVtX2dseXBocyA9PSAwIHx8IHBhcnNlci0+cm9vdC5lcnJvciApCkBAIC0xNTU1LDcgKzE2MDAsNyBAQAogCiAgICAgZm9yICg7OykKICAgICB7Ci0gICAgICBGVF9Mb25nICAgc2l6ZTsKKyAgICAgIEZUX1VMb25nICBzaXplOwogICAgICAgRlRfQnl0ZSogIGJhc2U7CiAKIApAQCAtMTYwNiw3ICsxNjUxLDcgQEAKIAogICAgICAgaWYgKCAqY3VyID09ICcvJyApCiAgICAgICB7Ci0gICAgICAgIEZUX1B0ckRpc3QgIGxlbjsKKyAgICAgICAgRlRfVUludCAgbGVuOwogCiAKICAgICAgICAgaWYgKCBjdXIgKyAyID49IGxpbWl0ICkKQEAgLTE2MTYsNyArMTY2MSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBjdXIrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBza2lwIGAvJyAqLwotICAgICAgICBsZW4gPSBwYXJzZXItPnJvb3QuY3Vyc29yIC0gY3VyOworICAgICAgICBsZW4gPSAoRlRfVUludCkoIHBhcnNlci0+cm9vdC5jdXJzb3IgLSBjdXIgKTsKIAogICAgICAgICBpZiAoICFyZWFkX2JpbmFyeV9kYXRhKCBwYXJzZXIsICZzaXplLCAmYmFzZSwgSVNfSU5DUkVNRU5UQUwgKSApCiAgICAgICAgICAgcmV0dXJuOwpAQCAtMTY0OSw3ICsxNjk0LDcgQEAKICAgICAgICAgICBGVF9CeXRlKiAgdGVtcDsKIAogCi0gICAgICAgICAgaWYgKCBzaXplIDw9IGZhY2UtPnR5cGUxLnByaXZhdGVfZGljdC5sZW5JViApCisgICAgICAgICAgaWYgKCBzaXplIDw9IChGVF9VTG9uZylmYWNlLT50eXBlMS5wcml2YXRlX2RpY3QubGVuSVYgKQogICAgICAgICAgIHsKICAgICAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKICAgICAgICAgICAgIGdvdG8gRmFpbDsKQEAgLTE2NjAsNyArMTcwNSw3IEBACiAgICAgICAgICAgICBnb3RvIEZhaWw7CiAgICAgICAgICAgRlRfTUVNX0NPUFkoIHRlbXAsIGJhc2UsIHNpemUgKTsKICAgICAgICAgICBwc2F1eC0+dDFfZGVjcnlwdCggdGVtcCwgc2l6ZSwgNDMzMCApOwotICAgICAgICAgIHNpemUgLT0gZmFjZS0+dHlwZTEucHJpdmF0ZV9kaWN0LmxlbklWOworICAgICAgICAgIHNpemUgLT0gKEZUX1VMb25nKWZhY2UtPnR5cGUxLnByaXZhdGVfZGljdC5sZW5JVjsKICAgICAgICAgICBlcnJvciA9IFQxX0FkZF9UYWJsZSggY29kZV90YWJsZSwgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCArIGZhY2UtPnR5cGUxLnByaXZhdGVfZGljdC5sZW5JViwgc2l6ZSApOwogICAgICAgICAgIEZUX0ZSRUUoIHRlbXAgKTsKQEAgLTE4MzgsMTUgKzE4ODMsMTEgQEAKICAgfTsKIAogCi0jZGVmaW5lIFQxX0ZJRUxEX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoIHNpemVvZiAoIHQxX2tleXdvcmRzICkgLyBzaXplb2YgKCB0MV9rZXl3b3Jkc1swXSApICkKLQotCiAgIHN0YXRpYyBGVF9FcnJvcgogICBwYXJzZV9kaWN0KCBUMV9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgIFQxX0xvYWRlciAgbG9hZGVyLAogICAgICAgICAgICAgICBGVF9CeXRlKiAgIGJhc2UsCi0gICAgICAgICAgICAgIEZUX0xvbmcgICAgc2l6ZSApCisgICAgICAgICAgICAgIEZUX1VMb25nICAgc2l6ZSApCiAgIHsKICAgICBUMV9QYXJzZXIgIHBhcnNlciA9ICZsb2FkZXItPnBhcnNlcjsKICAgICBGVF9CeXRlICAgKmxpbWl0LCAqc3RhcnRfYmluYXJ5ID0gTlVMTDsKQEAgLTE5MDIsNyArMTk0Myw3IEBACiAgICAgICBlbHNlIGlmICggKmN1ciA9PSAnUicgJiYgY3VyICsgNiA8IGxpbWl0ICYmICooY3VyICsgMSkgPT0gJ0QnICYmCiAgICAgICAgICAgICAgICAgaGF2ZV9pbnRlZ2VyICkKICAgICAgIHsKLSAgICAgICAgRlRfTG9uZyAgIHM7CisgICAgICAgIEZUX1VMb25nICBzOwogICAgICAgICBGVF9CeXRlKiAgYjsKIAogCkBAIC0xOTE1LDcgKzE5NTYsNyBAQAogICAgICAgZWxzZSBpZiAoICpjdXIgPT0gJy0nICYmIGN1ciArIDYgPCBsaW1pdCAmJiAqKGN1ciArIDEpID09ICd8JyAmJgogICAgICAgICAgICAgICAgIGhhdmVfaW50ZWdlciApCiAgICAgICB7Ci0gICAgICAgIEZUX0xvbmcgICBzOworICAgICAgICBGVF9VTG9uZyAgczsKICAgICAgICAgRlRfQnl0ZSogIGI7CiAKIApAQCAtMTkyOCw3ICsxOTY5LDcgQEAKICAgICAgIC8qIGxvb2sgZm9yIGltbWVkaWF0ZXMgKi8KICAgICAgIGVsc2UgaWYgKCAqY3VyID09ICcvJyAmJiBjdXIgKyAyIDwgbGltaXQgKQogICAgICAgewotICAgICAgICBGVF9QdHJEaXN0ICBsZW47CisgICAgICAgIEZUX1VJbnQgIGxlbjsKIAogCiAgICAgICAgIGN1cisrOwpAQCAtMTkzOCw3ICsxOTc5LDcgQEAKICAgICAgICAgaWYgKCBwYXJzZXItPnJvb3QuZXJyb3IgKQogICAgICAgICAgIGdvdG8gRXhpdDsKIAotICAgICAgICBsZW4gPSBwYXJzZXItPnJvb3QuY3Vyc29yIC0gY3VyOworICAgICAgICBsZW4gPSAoRlRfVUludCkoIHBhcnNlci0+cm9vdC5jdXJzb3IgLSBjdXIgKTsKIAogICAgICAgICBpZiAoIGxlbiA+IDAgJiYgbGVuIDwgMjIgJiYgcGFyc2VyLT5yb290LmN1cnNvciA8IGxpbWl0ICkKICAgICAgICAgewpAQCAtMTk1NSw5ICsxOTk2LDkgQEAKICAgICAgICAgICAgIGlmICggIW5hbWUgKQogICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgaWYgKCBjdXJbMF0gPT0gbmFtZVswXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICAgICBsZW4gPT0gKEZUX1B0ckRpc3QpZnRfc3RybGVuKCAoY29uc3QgY2hhciAqKW5hbWUgKSAmJgotICAgICAgICAgICAgICAgICBmdF9tZW1jbXAoIGN1ciwgbmFtZSwgbGVuICkgPT0gMCAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBpZiAoIGN1clswXSA9PSBuYW1lWzBdICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgIGxlbiA9PSBmdF9zdHJsZW4oIChjb25zdCBjaGFyICopbmFtZSApICYmCisgICAgICAgICAgICAgICAgIGZ0X21lbWNtcCggY3VyLCBuYW1lLCBsZW4gKSA9PSAwICAgICAgICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgLyogV2UgZm91bmQgaXQgLS0gcnVuIHRoZSBwYXJzaW5nIGNhbGxiYWNrISAgICAgKi8KICAgICAgICAgICAgICAgLyogV2UgcmVjb3JkIGV2ZXJ5IGluc3RhbmNlIG9mIGV2ZXJ5IGZpZWxkICAgICAgKi8KQEAgLTIyMTIsOCArMjI1Myw4IEBACiAgICAgLyogdGhlIGBsZW5ndGhzJyBmaWVsZCBtdXN0IGJlIHJlbGVhc2VkIGxhdGVyICAgICAgICAgICAgICovCiAgICAgdHlwZTEtPmdseXBoX25hbWVzX2Jsb2NrICAgID0gbG9hZGVyLmdseXBoX25hbWVzLmJsb2NrOwogICAgIHR5cGUxLT5nbHlwaF9uYW1lcyAgICAgICAgICA9IChGVF9TdHJpbmcqKilsb2FkZXIuZ2x5cGhfbmFtZXMuZWxlbWVudHM7Ci0gICAgbG9hZGVyLmdseXBoX25hbWVzLmJsb2NrICAgID0gMDsKLSAgICBsb2FkZXIuZ2x5cGhfbmFtZXMuZWxlbWVudHMgPSAwOworICAgIGxvYWRlci5nbHlwaF9uYW1lcy5ibG9jayAgICA9IE5VTEw7CisgICAgbG9hZGVyLmdseXBoX25hbWVzLmVsZW1lbnRzID0gTlVMTDsKIAogICAgIC8qIHdlIG11c3Qgbm93IGJ1aWxkIHR5cGUxLmVuY29kaW5nIHdoZW4gd2UgaGF2ZSBhIGN1c3RvbSBhcnJheSAqLwogICAgIGlmICggdHlwZTEtPmVuY29kaW5nX3R5cGUgPT0gVDFfRU5DT0RJTkdfVFlQRV9BUlJBWSApCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFsb2FkLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFsb2FkLmgKaW5kZXggNTQ2ZmMzMy4uZGU0MjJlNyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxbG9hZC5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS90MWxvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDEgZm9udCBsb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDAyLCAyMDA0LCAyMDA2LCAyMDA3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3Qxb2Jqcy5jIGIvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3Qxb2Jqcy5jCmluZGV4IGUxMTc3MGYuLmQ5MjEwNjMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS90MW9ianMuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFvYmpzLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHlwZSAxIG9iamVjdHMgbWFuYWdlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwOSwgMjAxMSwgMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgIGlmICggZnVuY3MgKQogICAgICAgICBmdW5jcy0+ZGVzdHJveSggKFBTSF9HbG9iYWxzKXNpemUtPnJvb3QuaW50ZXJuYWwgKTsKIAotICAgICAgc2l6ZS0+cm9vdC5pbnRlcm5hbCA9IDA7CisgICAgICBzaXplLT5yb290LmludGVybmFsID0gTlVMTDsKICAgICB9CiAgIH0KIApAQCAtMTQ0LDcgKzE0NCw3IEBACiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIFQxX0dseXBoU2xvdF9Eb25lKCBGVF9HbHlwaFNsb3QgIHNsb3QgKQogICB7Ci0gICAgc2xvdC0+aW50ZXJuYWwtPmdseXBoX2hpbnRzID0gMDsKKyAgICBzbG90LT5pbnRlcm5hbC0+Z2x5cGhfaGludHMgPSBOVUxMOwogICB9CiAKIApAQCAtMjI0LDcgKzIyNCw3IEBACiAgICAgfQogCiAgICAgVDFfRG9uZV9CbGVuZCggZmFjZSApOwotICAgIGZhY2UtPmJsZW5kID0gMDsKKyAgICBmYWNlLT5ibGVuZCA9IE5VTEw7CiAjZW5kaWYKIAogICAgIC8qIHJlbGVhc2UgZm9udCBpbmZvIHN0cmluZ3MgKi8KQEAgLTM0NSw3ICszNDUsNyBAQAogICAgICAgZ290byBFeGl0OwogCiAgICAgLyogY2hlY2sgdGhlIGZhY2UgaW5kZXggKi8KLSAgICBpZiAoIGZhY2VfaW5kZXggPiAwICkKKyAgICBpZiAoICggZmFjZV9pbmRleCAmIDB4RkZGRiApID4gMCApCiAgICAgewogICAgICAgRlRfRVJST1IoKCAiVDFfRmFjZV9Jbml0OiBpbnZhbGlkIGZhY2UgaW5kZXhcbiIgKSk7CiAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CkBAIC0zNzUsOSArMzc1LDYgQEAKICAgICAgIGlmICggZmFjZS0+YmxlbmQgKQogICAgICAgICByb290LT5mYWNlX2ZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTOwogCi0gICAgICAvKiBYWFg6IFRPRE8gLS0gYWRkIGtlcm5pbmcgd2l0aCAuYWZtIHN1cHBvcnQgKi8KLQotCiAgICAgICAvKiBUaGUgZm9sbG93aW5nIGNvZGUgdG8gZXh0cmFjdCB0aGUgZmFtaWx5IGFuZCB0aGUgc3R5bGUgaXMgdmVyeSAgICovCiAgICAgICAvKiBzaW1wbGlzdGljIGFuZCBtaWdodCBnZXQgc29tZSB0aGluZ3Mgd3JvbmcuICBGb3IgYSBmdWxsLWZlYXR1cmVkICovCiAgICAgICAvKiBhbGdvcml0aG0geW91IG1pZ2h0IGhhdmUgYSBsb29rIGF0IHRoZSB3aGl0ZXBhcGVyIGdpdmVuIGF0ICAgICAgICovCkBAIC00NTcsNyArNDU0LDcgQEAKIAogICAgICAgLyogbm8gZW1iZWRkZWQgYml0bWFwIHN1cHBvcnQgKi8KICAgICAgIHJvb3QtPm51bV9maXhlZF9zaXplcyA9IDA7Ci0gICAgICByb290LT5hdmFpbGFibGVfc2l6ZXMgPSAwOworICAgICAgcm9vdC0+YXZhaWxhYmxlX3NpemVzID0gTlVMTDsKIAogICAgICAgcm9vdC0+YmJveC54TWluID0gICB0eXBlMS0+Zm9udF9iYm94LnhNaW4gICAgICAgICAgICA+PiAxNjsKICAgICAgIHJvb3QtPmJib3gueU1pbiA9ICAgdHlwZTEtPmZvbnRfYmJveC55TWluICAgICAgICAgICAgPj4gMTY7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFvYmpzLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFvYmpzLmgKaW5kZXggNTRjY2JiOS4uNmI0ZjNjYiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3Qxb2Jqcy5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS90MW9ianMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDEgb2JqZWN0cyBtYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDAyLCAyMDA2LCAyMDExIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxcGFyc2UuYyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS90MXBhcnNlLmMKaW5kZXggY2NmOWY0Yy4uMGI2ODUwMiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxcGFyc2UuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFwYXJzZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFR5cGUgMSBwYXJzZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMDUsIDIwMDgsIDIwMDksIDIwMTItMjAxNCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNDMsMTMgKzE0MywxMyBAQAogICAgIEZUX1VMb25nICAgc2l6ZTsKIAogCi0gICAgcHNhdXgtPnBzX3BhcnNlcl9mdW5jcy0+aW5pdCggJnBhcnNlci0+cm9vdCwgMCwgMCwgbWVtb3J5ICk7CisgICAgcHNhdXgtPnBzX3BhcnNlcl9mdW5jcy0+aW5pdCggJnBhcnNlci0+cm9vdCwgTlVMTCwgTlVMTCwgbWVtb3J5ICk7CiAKICAgICBwYXJzZXItPnN0cmVhbSAgICAgICA9IHN0cmVhbTsKICAgICBwYXJzZXItPmJhc2VfbGVuICAgICA9IDA7Ci0gICAgcGFyc2VyLT5iYXNlX2RpY3QgICAgPSAwOworICAgIHBhcnNlci0+YmFzZV9kaWN0ICAgID0gTlVMTDsKICAgICBwYXJzZXItPnByaXZhdGVfbGVuICA9IDA7Ci0gICAgcGFyc2VyLT5wcml2YXRlX2RpY3QgPSAwOworICAgIHBhcnNlci0+cHJpdmF0ZV9kaWN0ID0gTlVMTDsKICAgICBwYXJzZXItPmluX3BmYiAgICAgICA9IDA7CiAgICAgcGFyc2VyLT5pbl9tZW1vcnkgICAgPSAwOwogICAgIHBhcnNlci0+c2luZ2xlX2Jsb2NrID0gMDsKQEAgLTI3Myw3ICsyNzMsNyBAQAogICAgICAgLyogbWFkZSBvZiBzZXZlcmFsIHNlZ21lbnRzLiAgV2UgdGh1cyBmaXJzdCByZWFkIHRoZSBudW1iZXIgb2YgICAqLwogICAgICAgLyogc2VnbWVudHMgdG8gY29tcHV0ZSB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgcHJpdmF0ZSBkaWN0aW9uYXJ5ICAqLwogICAgICAgLyogdGhlbiByZS1yZWFkIHRoZW0gaW50byBtZW1vcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgRlRfTG9uZyAgICBzdGFydF9wb3MgPSBGVF9TVFJFQU1fUE9TKCk7CisgICAgICBGVF9VTG9uZyAgIHN0YXJ0X3BvcyA9IEZUX1NUUkVBTV9QT1MoKTsKICAgICAgIEZUX1VTaG9ydCAgdGFnOwogCiAKQEAgLTMzNCw3ICszMzQsNiBAQAogICAgICAgLyogZmlyc3Qgb2YgYWxsLCBsb29rIGF0IHRoZSBgZWV4ZWMnIGtleXdvcmQgKi8KICAgICAgIEZUX0J5dGUqICAgIGN1ciAgID0gcGFyc2VyLT5iYXNlX2RpY3Q7CiAgICAgICBGVF9CeXRlKiAgICBsaW1pdCA9IGN1ciArIHBhcnNlci0+YmFzZV9sZW47Ci0gICAgICBGVF9CeXRlICAgICBjOwogICAgICAgRlRfUG9pbnRlciAgcG9zX2xmOwogICAgICAgRlRfQm9vbCAgICAgdGVzdF9jcjsKIApAQCAtMzQyLDkgKzM0MSw5IEBACiAgICAgQWdhaW46CiAgICAgICBmb3IgKDs7KQogICAgICAgewotICAgICAgICBjID0gY3VyWzBdOwotICAgICAgICBpZiAoIGMgPT0gJ2UnICYmIGN1ciArIDkgPCBsaW1pdCApICAvKiA5ID0gNSBsZXR0ZXJzIGZvciBgZWV4ZWMnICsgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2hpdGVzcGFjZSArIDQgY2hhcnMgICAgICAgICovCisgICAgICAgIGlmICggY3VyWzBdID09ICdlJyAgICYmCisgICAgICAgICAgICAgY3VyICsgOSA8IGxpbWl0ICkgICAgICAvKiA5ID0gNSBsZXR0ZXJzIGZvciBgZWV4ZWMnICsgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdoaXRlc3BhY2UgKyA0IGNoYXJzICAgICAgICAqLwogICAgICAgICB7CiAgICAgICAgICAgaWYgKCBjdXJbMV0gPT0gJ2UnICYmCiAgICAgICAgICAgICAgICBjdXJbMl0gPT0gJ3gnICYmCkBAIC0zNzQsOCArMzczLDE1IEBACiAKICAgICAgIHdoaWxlICggY3VyIDwgbGltaXQgKQogICAgICAgewotICAgICAgICBpZiAoICpjdXIgPT0gJ2UnICYmIGZ0X3N0cm5jbXAoIChjaGFyKiljdXIsICJlZXhlYyIsIDUgKSA9PSAwICkKLSAgICAgICAgICBnb3RvIEZvdW5kOworICAgICAgICBpZiAoIGN1clswXSA9PSAnZScgICAmJgorICAgICAgICAgICAgIGN1ciArIDUgPCBsaW1pdCApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIGN1clsxXSA9PSAnZScgJiYKKyAgICAgICAgICAgICAgIGN1clsyXSA9PSAneCcgJiYKKyAgICAgICAgICAgICAgIGN1clszXSA9PSAnZScgJiYKKyAgICAgICAgICAgICAgIGN1cls0XSA9PSAnYycgKQorICAgICAgICAgICAgZ290byBGb3VuZDsKKyAgICAgICAgfQogCiAgICAgICAgIFQxX1NraXBfUFNfVG9rZW4oIHBhcnNlciApOwogICAgICAgICBpZiAoIHBhcnNlci0+cm9vdC5lcnJvciApCkBAIC0zODksNiArMzk1LDE1IEBACiAKICAgICAgIGN1ciAgID0gbGltaXQ7CiAgICAgICBsaW1pdCA9IHBhcnNlci0+YmFzZV9kaWN0ICsgcGFyc2VyLT5iYXNlX2xlbjsKKworICAgICAgaWYgKCBjdXIgPj0gbGltaXQgKQorICAgICAgeworICAgICAgICBGVF9FUlJPUigoICJUMV9HZXRfUHJpdmF0ZV9EaWN0OiIKKyAgICAgICAgICAgICAgICAgICAiIHByZW1hdHVyZSBlbmQgaW4gcHJpdmF0ZSBkaWN0aW9uYXJ5XG4iICkpOworICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKwogICAgICAgZ290byBBZ2FpbjsKIAogICAgICAgLyogbm93IGRldGVybWluZSB3aGVyZSB0byB3cml0ZSB0aGUgX2VuY3J5cHRlZF8gYmluYXJ5IHByaXZhdGUgICovCkBAIC00MTEsOSArNDI2LDExIEBACiAgICAgICAvKiBmaW5lIHRoYXQgYXJlIHZpb2xhdGluZyB0aGlzIGxpbWl0YXRpb24sIHNvIHdlIGFkZCBhIGhldXJpc3RpYyAgKi8KICAgICAgIC8qIHRlc3QgdG8gc3RvcCBhdCBcciBvbmx5IGlmIGl0IGlzIG5vdCB1c2VkIGZvciBFT0wuICAgICAgICAgICAgICAqLwogCi0gICAgICBwb3NfbGYgID0gZnRfbWVtY2hyKCBjdXIsICdcbicsIGxpbWl0IC0gY3VyICk7Ci0gICAgICB0ZXN0X2NyID0gRlRfQk9PTCggIXBvc19sZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwb3NfbGYgPiBmdF9tZW1jaHIoIGN1ciwgJ1xyJywgbGltaXQgLSBjdXIgKSApOworICAgICAgcG9zX2xmICA9IGZ0X21lbWNociggY3VyLCAnXG4nLCAoc2l6ZV90KSggbGltaXQgLSBjdXIgKSApOworICAgICAgdGVzdF9jciA9IEZUX0JPT0woICFwb3NfbGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIHBvc19sZiA+IGZ0X21lbWNociggY3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpKCBsaW1pdCAtIGN1ciApICkgKTsKIAogICAgICAgd2hpbGUgKCBjdXIgPCBsaW1pdCAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgICAgKCAqY3VyID09ICcgJyAgICAgICAgICAgICAgICB8fApAQCAtNDI5LDcgKzQ0Niw3IEBACiAgICAgICAgIGdvdG8gRXhpdDsKICAgICAgIH0KIAotICAgICAgc2l6ZSA9IChGVF9VTG9uZykoIHBhcnNlci0+YmFzZV9sZW4gLSAoIGN1ciAtIHBhcnNlci0+YmFzZV9kaWN0ICkgKTsKKyAgICAgIHNpemUgPSBwYXJzZXItPmJhc2VfbGVuIC0gKEZUX1VMb25nKSggY3VyIC0gcGFyc2VyLT5iYXNlX2RpY3QgKTsKIAogICAgICAgaWYgKCBwYXJzZXItPmluX21lbW9yeSApCiAgICAgICB7CkBAIC00NDMsNyArNDYwLDcgQEAKICAgICAgICAgcGFyc2VyLT5zaW5nbGVfYmxvY2sgPSAxOwogICAgICAgICBwYXJzZXItPnByaXZhdGVfZGljdCA9IHBhcnNlci0+YmFzZV9kaWN0OwogICAgICAgICBwYXJzZXItPnByaXZhdGVfbGVuICA9IHNpemU7Ci0gICAgICAgIHBhcnNlci0+YmFzZV9kaWN0ICAgID0gMDsKKyAgICAgICAgcGFyc2VyLT5iYXNlX2RpY3QgICAgPSBOVUxMOwogICAgICAgICBwYXJzZXItPmJhc2VfbGVuICAgICA9IDA7CiAgICAgICB9CiAKQEAgLTQ1OSw3ICs0NzYsNyBAQAogICAgICAgICAgICBmdF9pc3hkaWdpdCggY3VyWzJdICkgJiYgZnRfaXN4ZGlnaXQoIGN1clszXSApICkKICAgICAgIHsKICAgICAgICAgLyogQVNDSUkgaGV4YWRlY2ltYWwgZW5jb2RpbmcgKi8KLSAgICAgICAgRlRfTG9uZyAgbGVuOworICAgICAgICBGVF9VTG9uZyAgbGVuOwogCiAKICAgICAgICAgcGFyc2VyLT5yb290LmN1cnNvciA9IGN1cjsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS90MXBhcnNlLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFwYXJzZS5oCmluZGV4IGZiMWM4YTg4Li45M2IwMmUzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDFwYXJzZS5oCisrKyBiL3RoaXJkX3BhcnR5L2ZyZWV0eXBlL3NyYy90eXBlMS90MXBhcnNlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHlwZSAxIHBhcnNlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMiwgMjAwMywgMjAwOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTc3LDEyICs3Nyw2IEBACiAKIAogI2RlZmluZSBUMV9BZGRfVGFibGUoIHAsIGksIG8sIGwgKSAgKHApLT5mdW5jcy5hZGQoIChwKSwgaSwgbywgbCApCi0jZGVmaW5lIFQxX0RvbmVfVGFibGUoIHAgKSAgICAgICAgICBcCi0gICAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIChwKS0+ZnVuY3MuZG9uZSApICBcCi0gICAgICAgICAgICAgIChwKS0+ZnVuY3MuZG9uZSggcCApOyBcCi0gICAgICAgICAgfSB3aGlsZSAoIDAgKQogI2RlZmluZSBUMV9SZWxlYXNlX1RhYmxlKCBwICkgICAgICAgICAgXAogICAgICAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3QxdG9rZW5zLmggYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDF0b2tlbnMuaAppbmRleCBlMzcyNzZiLi4zOTkyNjUyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDF0b2tlbnMuaAorKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdDF0b2tlbnMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDEgdG9rZW5pemVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA2LCAyMDA4LCAyMDA5IGJ5ICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZnJlZXR5cGUvc3JjL3R5cGUxL3R5cGUxLmMgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdHlwZTEuYwppbmRleCBjY2MxMmJlLi40YzcwZWE3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdHlwZTEuYworKysgYi90aGlyZF9wYXJ0eS9mcmVldHlwZS9zcmMvdHlwZTEvdHlwZTEuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBUeXBlIDEgZHJpdmVyIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDAxIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGhpcmRfcGFydHkuZ3lwIGIvdGhpcmRfcGFydHkvdGhpcmRfcGFydHkuZ3lwCmluZGV4IDFlYzA1MDkuLjQzZTEwOTMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3RoaXJkX3BhcnR5Lmd5cAorKysgYi90aGlyZF9wYXJ0eS90aGlyZF9wYXJ0eS5neXAKQEAgLTM3LDE3ICszNywxOCBAQAogICAgICAgXSwKICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCiAgICAgICAgICAnZnJlZXR5cGUvaW5jbHVkZScsCisgICAgICAgICAnZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZScsCiAgICAgICBdLAogICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdmcmVldHlwZS9pbmNsdWRlL2ZyZWV0eXBlLmgnLAorICAgICAgICAnZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oJywKKyAgICAgICAgJ2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRtbS5oJywKKyAgICAgICAgJ2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRvdHZhbC5oJywKKyAgICAgICAgJ2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvZnRvdXRsbi5oJywKKyAgICAgICAgJ2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnJlZXR5cGUvZnRvYmpzLmgnLAorICAgICAgICAnZnJlZXR5cGUvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mcmVldHlwZS9mdHN0cmVhbS5oJywKKyAgICAgICAgJ2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnJlZXR5cGUvdHR0eXBlcy5oJywKKyAgICAgICAgJ2ZyZWV0eXBlL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWJsZXMuaCcsCiAgICAgICAgICdmcmVldHlwZS9pbmNsdWRlL2Z0MmJ1aWxkLmgnLAotICAgICAgICAnZnJlZXR5cGUvaW5jbHVkZS9mdG1tLmgnLAotICAgICAgICAnZnJlZXR5cGUvaW5jbHVkZS9mdG90dmFsLmgnLAotICAgICAgICAnZnJlZXR5cGUvaW5jbHVkZS9mdG91dGxuLmgnLAotICAgICAgICAnZnJlZXR5cGUvaW5jbHVkZS90dHRhYmxlcy5oJywKLSAgICAgICAgJ2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvZnRvYmpzLmgnLAotICAgICAgICAnZnJlZXR5cGUvaW5jbHVkZS9pbnRlcm5hbC9mdHN0cmVhbS5oJywKLSAgICAgICAgJ2ZyZWV0eXBlL2luY2x1ZGUvaW50ZXJuYWwvdHR0eXBlcy5oJywKICAgICAgICAgJ2ZyZWV0eXBlL3NyYy9jZmYvY2Zmb2Jqcy5oJywKICAgICAgICAgJ2ZyZWV0eXBlL3NyYy9jZmYvY2ZmdHlwZXMuaCcsCiAgICAgICAgICdmcmVldHlwZS9zcmMvY2ZmL2NmZi5jJywK