ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmOWRjNWQyLi5iNWI5YTA0IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDQgKzEsMTAxIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXZWQgRGVjICA3IDE0OjUyOjI1IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKKworCSogW2NvbnRyb2xzL2xpc3Rib3guY10KKwlGaXhlZCBwcm9ibGVtcyBkdWUgdG8gbmV3IHNjcm9sbC1iYXIgY29kZS4KKworCSogW2xvYWRlci9zaWduYWwuY10gW21pc2NlbXUvaW9wb3J0cy5jXQorCUhhbmRsZSBJL08gb3Bjb2RlcyB0aGF0IHVzZSBhbiBhYnNvbHV0ZSBhZGRyZXNzLgorCisJKiBbb2JqZWN0cy90ZXh0LmNdCisJSW1wbGVtZW50ZWQgVGFiYmVkVGV4dE91dCgpLgorCitTYXQgRGVjICAzIDE4OjUzOjA4IDE5OTQgIEtlbm5ldGggTWFjRG9uYWxkICA8Sy5NYWNEb25hbGRAZWQuYWMudWs+CisKKwkqIFtvYmplY3RzL21ldGFmaWxlLmNdCisJSW1wbGVtZW50ZWQgR2V0TWV0YWZpbGUoKS4KKwlGaXhlZCBidWcgaW4gUGxheU1ldGFGaWxlKCkgd2hlbiByZWFkaW5nIGRpc2MgYmFzZWQgbWV0YWZpbGUgcmVjb3Jkcy4KKwlBZGRlZCBNRVRBX1BPTFlQT0xZR09OLCBNRVRBX0RFTEVURU9CSkVDVCBhbmQgTUVUQV9FT0YgdG8gCisJUGxheU1ldGFGaWxlUmVjb3JkKCkuCisJCitXZWQgTm92IDMwIDA2OjMyOjI1IDE5OTQgIE1hcnRpbiB2b24gTG9ld2lzICAobWFydGluQGNzLmNzdWZyZXNuby5lZHUpCisKKwkqIFtJbWFrZWZpbGVdCisJd2luZS5zeW06IFJlbW92ZSBnY2MyX2NvbXBpbGVkIGFuZCBmcmllbmRzCisKKwkqIFtjb250cm9scy9saXN0Ym94LmNdW2lmMTYzMi9yZWxheS5jXVtpZjE2MzIvcmVsYXkuY10KKwkgIFtsb2FkZXIvcmVzb3VyY2UuY11bbWVtb3J5L2hlYXAuY11bb2JqZWN0cy9kaWIuY11bd2luZG93cy9kaWFsb2cuY10KKwlSZXBsYWNlICNpZmRlZiBERUJVR19YWFggd2l0aCBpZihkZWJ1Z2dpbmdfeHh4KXsKKworCSogW2lmMTYzMi9jYWxsLlNdCisJQ2FsbFRvTGliTWFpbjogTmV3IGZ1bmN0aW9uCisKKwkqIFtpZjE2MzIvcmVsYXkuY11baW5jbHVkZS9vcHRpb25zLmhdW21pc2MvbWFpbi5jXQorCSAgW21pc2NlbXUvaW50MWEuY11bbWlzY2VtdS9pbnQyMS5jXVttaXNjZW11L2tlcm5lbC5jXQorCXJlbW92ZWQgT3B0aW9ucy5yZWxheV9kZWJ1ZworCisJKiBbaW5jbHVkZS9oZWFwLmhdCisJSEVBUF9PV05FUjogVXNlIGRzIGluc3RlYWQgb2YgY3M6aXAKKworCSogW2xvYWRlci9uZV9pbWFnZS5jXQorCUxvYWRORUltYWdlOiBSZW1lbWJlciBjdXJyZW50IGV4ZSwgaGFuZGxlIG5vZGF0YSBkbGxzCisJSW5pdE5FRExMOiBoYW5kbGUgbm9kYXRhIGRsbHMsIGNhbGwgQ2FsbFRvTGliTWFpbgorCisJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCisJQ3JlYXRlU2VsZWN0b3JzOiBJbml0aWFsaXplIGF1dG9fZGF0YV9zZWwgd2l0aCAwCisKKwkqIFttZW1vcnkvaGVhcC5jXQorCUhFQVBfQ2hlY2tIZWFwOiBDaGVjayBwcmV2CisJSEVBUF9DaGVja0xvY2FsSGVhcHM6IG5ldyBmdW5jdGlvbgorCisJKiBbbWlzYy9wcm9maWxlXQorCVJlbWVtYmVyIGFuZCBkdW1wIG9ubHkgY2hhbmdlZCBwcm9maWxlcworCisJKiBbdG9vbHMvbWFrZWRlYnVnXQorCUludHJvZHVjZSBkZWJ1Z2dpbmdfeHh4IGZsYWdzCisKK1N1biBOb3YgMjcgMjM6MTM6MjIgTUVUIDE5OTQJPGVyaWtAeHM0YWxsLm5sPgorCisJKiBbY2xpcGJvYXJkLmggY29sb3IuaCBkYy5oIGRvc19mcy5oIGV2ZW50LmggZm9udC5oIGdyYXBoaWNzLmgKKwlpZjE2MzIuaCBrZXJuZWwuaCBsaWJyYXJ5LmggbWlzY2VtdS5oIG5lX2ltYWdlLmggbm9uY2xpZW50LmggCisJcGVfaW1hZ2UuaCBzZWxlY3RvcnMuaCB3aW50eXBlcy5oXQorCUFkZGVkLgorCisJKiBbKi8qXQorCS0gQ29tbWVudGVkIGFsbCAnc3RhdGljIGNoYXIgY29weXJpZ2h0IHN0YXRlbWVudHMnLCBzZWUgbWlzYy9tYWluLmMKKwktIG1vdmVkIHByb3RvdHlwZXMgdG8gaGVhZGVycyBmaWxlcywgZml4ZWQgd3JvbmcgcHJvdG90eXBlcy4KKwktICpwbGVhc2UqIGFkZCBhIGhlYWRlciBmaWxlIGZvciBlYWNoIC5jIGlmIHlvdSBuZWVkIHRvIGV4cG9ydAorCSAgdGhpbmdzLgorCisJKiBbbWlzYy9tYWluLmNdCisJQWRkZWQgb25lIHN0YXRpYyBzdHJpbmcgd2hpY2ggbGlzdCB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycy4KKworRnJpIE5vdiAyNSAxNjoyNDoyNyBNRVQgMTk5NAkJICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCisKKwkqIFtDb25maWd1cmVdCisJTWFkZSB0aGUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2VzIG1vcmUgYXV0b21hdGljLiAgQWRkZWQKKwlhIFtmb250c10gc2VjdGlvbiB0byB0aGUgd2luZS5jb25mIGZpbGUuICBNYWRlIHRoZSBkZWZhdWx0cworCWJldHRlci4gIEdlbmVyYWxseSBjbGVhbmVkIGl0IHVwLgorCisJKiBbcmMvc3lzcmVzX05vLnJjXSBbcmMvc3lzcmVzX0RlLnJjXSBbcmMvc3lzcmVzLmNdCisJTm9yd2VnaWFuIHJlc291cmNlcyBhbmQgc21hbGwgZml4ZXMgdG8gdGhlIGdlcm1hbiByZXNvdXJjZXMuCisKK1dlZCBOb3YgMjMgMjA6Mjg6NTkgMTk5NCAgTWFydGluIHZvbiBMb2V3aXMgIChtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdSkKKworCSogW2RlYnVnZ2VyL2JyZWFrLmNdCisJYmFyaygpLCB0b2dnbGVfbmV4dCgpLCBzaG91bGRfY29udGludWUoKTogTmV3IGZ1bmN0aW9ucworCWluc2VydF9icmVhaygpOiBGaXhlZCwgYWRkcyB3cml0ZSBhY2Nlc3MgdG8gcGFnZSBiZWZvcmUgd3JpdGluZworCXdpbmVfYnAubmV4dF9hZGRyOiBuZXcgc3RydWN0dXJlIGZpZWxkCisKKwkqIFtkZWJ1Z2dlci9kYmcueV0KKwlDaGFuZ2VkIHN5bWJvbCdzIHZhbHVlIHRvIGJlIGl0J3MgdmFsdWUgaW5zdGVhZCBvZiB0aGUgdmFsdWUKKwlwb2ludGVkIHRvIGJ5IHRoZSBzeW1ib2wuCisJQ2hhbmdlZCBTSUdUUkFQIGhhbmRsaW5nIHRvIGFsbG93IGNvbnRpbnVhdGlvbiBhZnRlciBicmVhayBwb2ludAorCisJKiBbbWlzYy9zaGVsbC5jXQorCVNoZWxsQWJvdXQoKTogTG9hZCByZXNvdXJjZSBmcm9tIG1lbW9yeQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTdW4gTm92IDIwIDE4OjMwOjA2IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKIAogCSogW2NvbnRyb2xzL3Njcm9sbC5jXSBbaW5jbHVkZS9zY3JvbGwuaF0KZGlmZiAtLWdpdCBhL0NvbmZpZ3VyZSBiL0NvbmZpZ3VyZQppbmRleCBkNDAyNTgyLi5kOTVkNTA4IDEwMDY0NAotLS0gYS9Db25maWd1cmUKKysrIGIvQ29uZmlndXJlCkBAIC01LDkgKzUsMTQgQEAKIDogJHtFRElUT1I6PXZpfQogOiAke1BBR0VSOj1tb3JlfQogCitXSU5FTElCPScnCitTSE9SVE5BTUVTPScnCitYUE09JycKK0xBTkc9bm90X21hdGNoaW5nCitORVdCVUlMRD0nJwogQUxMREVGSU5FUz0nJwogCi0jIEFzayBxdWVzdGlvbiAnc3RyJyBhbmQgc2V0cyAndmFyJyByZXBseSAoZGVmYXVsdGluZyB0byAnZGVmJyBvbiBDUikKKyMgQXNrIHF1ZXN0aW9uICdzdHInIGFuZCBzZXQgJ3ZhcicgdG8gcmVwbHkgKGRlZmF1bHRpbmcgdG8gJ2RlZicgb24gQ1IpCiBwcm9tcHQgKCkKIHsKIAlzdHI9IiQxIgpAQCAtMzAsMjkgKzM1LDYgQEAKIHRoZW4KIAlXSU5FTElCPScjZGVmaW5lIFdJTkVMSUIgLURXSU5FTElCJwogCUFMTERFRklORVM9IiRBTExERUZJTkVTIC1EV0lORUxJQiIKLWVsc2UKLQlXSU5FTElCPScnCi0KLSMJQ29tbWVudGVkIG91dCB1bnRpbCB0aGUgcHJvY2Vzc29yIGVtdWxhdG9yIHN0YXJ0cyB0byB3b3JrLgotIwotIwllY2hvCi0jCWVjaG8gLW4gJ1VzZSBwcm9jZXNzb3IgZW11bGF0b3IgKCpET0VTKk5PVCpXT1JLKllFVCopIChZL04pIFtOXT8gJwotIwlyZWFkIGlucHV0Ci0jCWlmIFsgIiRpbnB1dCIgPSAneScgLW8gIiRpbnB1dCIgPSAnWScgXQotIwl0aGVuCi0jCQlQUk9DRU1VPScjZGVmaW5lIFBST0NFTVUnCi0jCQlBTExERUZJTkVTPSIkQUxMREVGSU5FUyAtRFBST0NFTVUiCi0jCQllY2hvCi0jCQllY2hvIC1uICdib2NocyBkaXJlY3RvcnkgWy91c3Ivc3JjL2JvY2hzXT8gJwotIwkJcmVhZCBpbnB1dAotIwkJaWYgWyAiJGlucHV0IiA9ICcnIF0KLSMJCXRoZW4KLSMJCQlBTExERUZJTkVTPSIkQUxMREVGSU5FUyAtRFBST0NfRU1VX0RJUj0vdXNyL3NyYy9ib2NocyIKLSMJCWVsc2UKLSMJCQlBTExERUZJTkVTPSIkQUxMREVGSU5FUyAtRFBST0NfRU1VX0RJUj0iJGlucHV0Ci0jCQlmaQotIwlmaQotCiBmaQogCiBlY2hvCkBAIC02Miw4ICs0NCw2IEBACiB0aGVuCiAJU0hPUlROQU1FUz0nI2RlZmluZSBTaG9ydE5hbWVzIC1EU0hPUlROQU1FUycKIAlBTExERUZJTkVTPSIkQUxMREVGSU5FUyAtRFNIT1JUTkFNRVMiCi1lbHNlCi0JU0hPUlROQU1FUz0nJwogZmkKIAogZWNobwpAQCAtNzMsMTQgKzUzLDMzIEBACiB0aGVuCiAJWFBNPScjZGVmaW5lIFVTRV9YUE0nCiAJQUxMREVGSU5FUz0iJEFMTERFRklORVMgLURVU0VfWFBNIgotZWxzZQotCVhQTT0nJworZmkKKworTEFOR1M9YGVjaG8gRW4gcmMvc3lzcmVzXyoucmMgfCBzZWQgLWUgJ3MvcmNcL3N5c3Jlc18vL2cnIC1lICdzL1wucmMvL2cnIC1lICdzLyAvXC8vZzsnYAord2hpbGUJZXhwciAiJExBTkdTIiA6ICIuKiRMQU5HIiA9PSAwID4gL2Rldi9udWxsCitkbworCXByb21wdCAiTGFuZ3VhZ2UgKCRMQU5HUykiIExBTkcgRW4KKwlpZglleHByICIkTEFOR1MiIDogIi4qJExBTkciID09IDAgPiAvZGV2L251bGwKKwl0aGVuCisJCWVjaG8gIlwiJExBTkdcIiBpcyBub3QgYSBzdXBwb3J0ZWQgbGFuZ3VhZ2UuIgorCWZpCitkb25lCitBTExERUZJTkVTPSIkQUxMREVGSU5FUyAtQUxBTkdcKCRMQU5HXCkiCisKK2lmIFsgImAoZG9tYWlubmFtZSlgIiA9ICdhbXNjb25zLmNvbScgXQordGhlbgorCWVjaG8KKwllY2hvIC1uICdOZXcgYnVpbGQgcHJvZ3JhbSAoWS9OKSBbTl0/ICcKKwlyZWFkIGlucHV0CisJaWYgWyAiJGlucHV0IiA9ICd5JyAtbyAiJGlucHV0IiA9ICdZJyBdCisJdGhlbgorCQlORVdCVUlMRD0nI2RlZmluZSBOZXdCdWlsZCAtRE5FV0JVSUxEJworCQlBTExERUZJTkVTPSIkQUxMREVGSU5FUyAtRE5FV0JVSUxEIgorCWZpCiBmaQogCiBwcm9tcHQgIkdsb2JhbCBjb25maWdmaWxlIG5hbWUiIFdJTkVfQ09ORklHRklMRSAvdXNyL2xvY2FsL2V0Yy93aW5lLmNvbmYKIAotV0lORV9JTklfR0xPQkFMPScjZGVmaW5lIFdJTkVfSU5JX0dMT0JBTCAiJyRXSU5FX0NPTkZJR0ZJTEUnIicKLQogaWYgWyAtciAkV0lORV9DT05GSUdGSUxFIF0KIHRoZW4KIAlERUZBVUxUX0FOUz1OCkBAIC0xMDgsMTggKzEwNywyMiBAQAogCQlmaQogCWZpCiAKLQljYXNlIGBhd2sgJ0JFR0lOIHtzPTB9IHtpZiAoJDM9PSJtc2RvcyIpIHMrK30gRU5EIHtwcmludCBzfScgL2V0Yy9mc3RhYmAgaW4KLQkwKQlDRl9DPS9jOzsKLQkxKQlDRl9DPWBhd2sgJ3tpZiAoJDM9PSJtc2RvcyIpIHByaW50ICQyfScgL2V0Yy9mc3RhYmA7OwotCSopCUNGX0M9YGF3ayAne2lmICgkMz09Im1zZG9zIikge3ByaW50ICQyO2V4aXR9fScgL2V0Yy9mc3RhYmA7OwotCWVzYWMKLQotCXByb21wdCAiV2hpY2ggZGlyZWN0b3J5IGRvIHlvdSB3YW50IHRvIHVzZSBhcyBBOiIgQ0ZfQSAvYQorCUNGX0E9YG1vdW50IHwgYXdrICcvXlwvZGV2XC9mZC8ge3ByaW50ICQzO2V4aXR9IEVORCB7cHJpbnQgIi9hIn0nYAorCXByb21wdCAiV2hpY2ggZGlyZWN0b3J5IGRvIHlvdSB3YW50IHRvIHVzZSBhcyBBOiIgQ0ZfQSAkQ0ZfQQorCUNGX0M9YGF3ayAne2lmICgkMz09Im1zZG9zIikge3ByaW50ICQyO2V4aXR9fSBFTkQge3ByaW50ICIvYyJ9JyAvZXRjL2ZzdGFiYAogCXByb21wdCAiV2hpY2ggZGlyZWN0b3J5IGRvIHlvdSB3YW50IHRvIHVzZSBhcyBDOiIgQ0ZfQyAkQ0ZfQwogCXByb21wdCAiV2hlcmUgaXMgdGhlIFdpbmRvd3MgZGlyZWN0b3J5IiBDRl9XaW5kb3dzICdjOlx3aW5kb3dzJwogCXByb21wdCAiV2hlcmUgaXMgdGhlIFN5c3RlbSBkaXJlY3RvcnkiIENGX1N5c3RlbSAnYzpcd2luZG93c1xzeXN0ZW0nCi0JcHJvbXB0ICJXaGVyZSBzaG91bGQgV2luZG93cyBhcHBzIHN0b3JlIHRlbXAgZmlsZXMiIENGX1RlbXAgJ2M6XHRlbXAnCi0JcHJvbXB0ICJXaGljaCBwYXRoIHNob3VsZCBiZSB1c2VkIHRvIGZpbmQgZXhlY3V0YWJsZXMgYW5kIERMTCdzIiBDRl9QYXRoICdjOlx3aW5kb3dzO2M6XHdpbmRvd3Ncc3lzdGVtJworCWlmIFsgLXIgIiRDRl9DL2F1dG9leGVjLmJhdCIgXQorCXRoZW4KKwkJQ0ZfVGVtcD1gdHIgQS1aIGEteiA8ICIkQ0ZfQy9hdXRvZXhlYy5iYXRYIiB8IHNlZCAtbiAncy9eICpzZXQgKnRlbXA9ICpcKGM6LipbYS16XVwpLiovXDEvcCdgCisJZmkKKwlpZiBbIC16ICIkQ0ZfVGVtcCIgXQorCXRoZW4KKwkJQ0ZfVGVtcD0nYzpcdGVtcCcKKwlmaQorCXByb21wdCAiV2hlcmUgc2hvdWxkIFdpbmRvd3MgYXBwcyBzdG9yZSB0ZW1wIGZpbGVzIiBDRl9UZW1wICRDRl9UZW1wCisJcHJvbXB0ICJXaGljaCBwYXRoIHNob3VsZCBiZSB1c2VkIHRvIGZpbmQgcHJvZ3MvRExMJ3MiIENGX1BhdGggIiRDRl9XaW5kb3dzOyRDRl9TeXN0ZW0iCiAJcHJvbXB0ICJXaGVyZSBpcyBzeXNyZXMuZGxsIiBDRl9TeXN0ZW1SZXNvdXJjZXMgYHB3ZGAvc3lzcmVzLmRsbAogCXByb21wdCAiV2hlcmUgaXMgQ09NMSIgQ0ZfQ29tMSAnL2Rldi9jdWEwJwogCXByb21wdCAiV2hlcmUgaXMgQ09NMiIgQ0ZfQ29tMiAnL2Rldi9jdWExJwpAQCAtMTM1LDkgKzEzOCw3IEBACiAKIAlwcm9tcHQgIkV4Y2x1ZGUgd2hpY2ggbWVzc2FnZXMgZnJvbSB0aGUgbG9nIiBDRl9FeGNsdWRlICdXTV9TSVpFO1dNX1RJTUVSJwogCi0JZWNobwotCWVjaG8gIlRoZSBjb25maWcgZmlsZSAkV0lORV9DT05GSUdGSUxFIG5vdyBsb29rcyBsaWtlIHRoaXM6IgotCXRlZSAkV0lORV9DT05GSUdGSUxFIDw8IEVPRgorCWNhdCA+ICAkV0lORV9DT05GSUdGSUxFIDw8IEVPRgogW2RyaXZlc10KIEE9JENGX0EKIEM9JENGX0MKQEAgLTE0OSw2ICsxNTAsMTYgQEAKIFBhdGg9JENGX1BhdGgKIFN5c3RlbVJlc291cmNlcz0kQ0ZfU3lzdGVtUmVzb3VyY2VzCiAKK1tmb250c10KK3N5c3RlbT0qLWhlbHZldGljYQorbXNzYW5zc2VyaWY9Ki1oZWx2ZXRpY2EKK21zc2VyaWY9Ki10aW1lcworZml4ZWRzeXM9Ki1maXhlZAorYXJpYWw9Ki1oZWx2ZXRpY2EKK2hlbHY9Ki1oZWx2ZXRpY2EKK3JvbWFuPSotdGltZXMKK2RlZmF1bHQ9Ki0qCisKIFtzZXJpYWxwb3J0c10KIENvbTE9JENGX0NvbTEKIENvbTI9JENGX0NvbTIKQEAgLTE2Miw2ICsxNzMsMTIgQEAKIEVPRgogCiAJZWNobworCXNlZCAnMSBpXAorVGhlIGNvbmZpZyBmaWxlICciJFdJTkVfQ09ORklHRklMRSInIG5vdyBsb29rcyBsaWtlIHRoaXM6XAorXAorJyA8ICRXSU5FX0NPTkZJR0ZJTEUgfCAkUEFHRVIKKworCWVjaG8KIAllY2hvIC1uICJEbyB5b3Ugd2FudCB0byBlZGl0IGl0IHVzaW5nICRFRElUT1IgKFkvTikgW05dPyAiCiAJcmVhZCBpbnB1dAogCWlmIFsgIiRpbnB1dCIgPSAneScgLW8gIiRpbnB1dCIgPSAnWScgXQpAQCAtMTc1LDIzICsxOTIsNiBAQAogCWZpCiBmaQogCi1wcm9tcHQgIkxhbmd1YWdlIChFbi9EZSkiIExBTkcgRW4KLUFMTERFRklORVM9IiRBTExERUZJTkVTIC1BTEFOR1woJExBTkdcKSIKLQotTkVXQlVJTEQ9JycKLWlmIFsgImAoZG9tYWlubmFtZSlgIiA9ICdhbXNjb25zLmNvbScgXQotdGhlbgotICAgIGVjaG8KLSAgICBlY2hvIC1uICdOZXcgYnVpbGQgcHJvZ3JhbSAoWS9OKSBbTl0/ICcKLSAgICByZWFkIGlucHV0Ci0gICAgaWYgWyAiJGlucHV0IiA9ICd5JyAtbyAiJGlucHV0IiA9ICdZJyBdCi0gICAgdGhlbgotCU5FV0JVSUxEPScjZGVmaW5lIE5ld0J1aWxkIC1ETkVXQlVJTEQnCi0JQUxMREVGSU5FUz0iJEFMTERFRklORVMgLURORVdCVUlMRCIKLSAgICBmaQotZmkKLQotTkVXTElOVVhMRFQ9JycKIGlmIGdyZXAgLXMgc2VnX25vdF9wcmVzZW50IC91c3IvaW5jbHVkZS9saW51eC9sZHQuaCAyPiAvZGV2L251bGwKIHRoZW4KIAlBTExERUZJTkVTPSIkQUxMREVGSU5FUyAtRE5FV19MRFRfU1RSVUNUIgpAQCAtMjAzLDEyICsyMDMsMTIgQEAKICRTSE9SVE5BTUVTCiAkWFBNCiAkTkVXQlVJTEQKLSRXSU5FX0lOSV9HTE9CQUwKLSRFTkRJQU4KLSRQUk9DRU1VRElSCisjZGVmaW5lIFdJTkVfSU5JX0dMT0JBTCAiJFdJTkVfQ09ORklHRklMRSIKICNkZWZpbmUgQXV0b0RlZmluZXMgJEFMTERFRklORVMKIEVPRgogCitlY2hvCitlY2hvICJDcmVhdGluZyBNYWtlZmlsZXMuICBUaGlzIG1heSB0YWtlIGEgd2hpbGUuIgogeG1rbWYgLWEKIAogaWYgWyAwIC1sdCBgZmluZCAuIC1uYW1lICIqLnJlaiIgLXByaW50IHwgd2MgLWxgIF0KQEAgLTIyMyw1ICsyMjMsOCBAQAogCiBFT0YKIAlmaW5kIC4gLW5hbWUgIioucmVqIiAtcHJpbnQKLQllY2hvCisJZXhpdCAxCiBmaQorCitlY2hvCitlY2hvICJDb25maWd1cmUgZmluaXNoZWQuICBEbyAnbWFrZScgdG8gY29tcGlsZSBXaW5lLiIKZGlmZiAtLWdpdCBhL0RFVkVMT1BFUlMtSElOVFMgYi9ERVZFTE9QRVJTLUhJTlRTCmluZGV4IGQ5NWQ4N2QuLmVjY2E1YTAgMTAwNjQ0Ci0tLSBhL0RFVkVMT1BFUlMtSElOVFMKKysrIGIvREVWRUxPUEVSUy1ISU5UUwpAQCAtMTA3LDYgKzEwNywxOSBAQAogI2RlZmluZSBERUJVR19YWFhYIG9yICN1bmRlZmluZSBERUJVR19YWFhYIGJldHdlZW4gI2luY2x1ZGU8c3RkZGVidWcuaD4gYW5kCiAjaW5jbHVkZSA8ZGVidWcuaD4gaW4gdGhhdCBzcGVjaWZpYyBmaWxlLiBJbiBhZGRpdGlvbiB5b3UgY2FuIGNoYW5nZSB0aGUgCiB0eXBlcyBvZiBkaXNwbGF5ZWQgbWVzc2FnZXMgYnkgc3VwcGx5aW5nIHRoZSAiLWRlYnVnbXNnIiBvcHRpb24gdG8gV2luZS4gCitJZiB5b3VyIGRlYnVnZ2luZyBjb2RlIGlzIG1vcmUgY29tcGxleCB0aGFuIGp1c3QgcHJpbnRmLCB5b3UgY2FuIHVzZSB0aGUKK3N5bWJvbHMgZGVidWdnaW5nX1hYWCBhcyB3ZWxsLiBUaGVzZSBhcmUgdHJ1ZSB3aGVuIFhYWCBpcyBlbmFibGVkLCBlaXRoZXIKK3Blcm1hbmVudCBvciBpbiB0aGUgY29tbWFuZCBsaW5lLiBTbyBpbnN0ZWFkIG9mIHdyaXRpbmcKKworI2lmZGVmIERFQlVHX1dJTgorCUR1bXBTb21lU3RydWN0dXJlKCZzdHIpOworI2VuZGlmCisKK3dyaXRlCisJaWYoZGVidWdnaW5nX3dpbilEdW1wU29tZVN0cnVjdHVyZSgmc3RyKTsKK0Rvbid0IHdvcnJ5IGFib3V0IHRoZSBpbmVmZmljaWVuY3kgb2YgdGhlIHRlc3QuIElmIGl0IGlzIHBlcm1hbmVudGx5IAorZGlzYWJsZWQgKHRodXMgZGVidWdnaW5nX3dpbiBpcyAwIGF0IGNvbXBpbGUgdGltZSksIHRoZSBjb21waWxlciB3aWxsIAorZWxpbWluYXRlIHRoZSBkZWFkIGNvZGUuCiAKIFRoZSBmaWxlIGhhbmRsZSAic3RkZGViIiBpcyBpbnRlbmRlZCBmb3IgZGlzcGxheWluZyBzdGFuZGFyZCBpbmZvcm1hdGlvbmFsCiBtZXNzYWdlcywgd2hlcmVhcyAic3RkbmltcCIgaXMgaW50ZW5kZWQgZm9yIGRpc3BsYXlpbmcgbWVzc2FnZXMgY29uY2VybmluZwpkaWZmIC0tZ2l0IGEvSW1ha2VmaWxlIGIvSW1ha2VmaWxlCmluZGV4IGMzNThkNjcuLjFmMGIxM2IgMTAwNjQ0Ci0tLSBhL0ltYWtlZmlsZQorKysgYi9JbWFrZWZpbGUKQEAgLTEwNiw3ICsxMDYsNyBAQAogI2VuZGlmCiAKIHdpbmUuc3ltOiB3aW5lCi0Jbm0gd2luZXxzb3J0ID53aW5lLnN5bQorCW5tIHdpbmV8Z3JlcCAtdiBfY29tcGlsZWR8c29ydCA+d2luZS5zeW0KIAogY2xlYW46OgogCSQoUk0pIHdpbmUuc3ltCmRpZmYgLS1naXQgYS9jb250cm9scy9idXR0b24uYyBiL2NvbnRyb2xzL2J1dHRvbi5jCmluZGV4IDJjN2ZkNjEuLjJlNGFiNWUgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL2J1dHRvbi5jCisrKyBiL2NvbnRyb2xzL2J1dHRvbi5jCkBAIC0zLDIzICszLDE3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTMgSm9oYW5uZXMgUnVzY2hlaW5za2kKICAqIENvcHlyaWdodCAoQykgMTk5MyBEYXZpZCBNZXRjYWxmZQogICogQ29weXJpZ2h0IChDKSAxOTk0IEFsZXhhbmRyZSBKdWxsaWFyZAotICovCiAKIHN0YXRpYyBjaGFyIENvcHlyaWdodDFbXSA9ICJDb3B5cmlnaHQgSm9oYW5uZXMgUnVzY2hlaW5za2ksIDE5OTMiOwogc3RhdGljIGNoYXIgQ29weXJpZ2h0MltdID0gIkNvcHlyaWdodCBEYXZpZCBNZXRjYWxmZSwgMTk5MyI7CiBzdGF0aWMgY2hhciBDb3B5cmlnaHQzW10gPSAiQ29weXJpZ2h0IEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5NCI7CisqLwogCi0jaW5jbHVkZSAiYnV0dG9uLmgiCiAjaW5jbHVkZSAid2luLmgiCiAjaW5jbHVkZSAidXNlci5oIgogI2luY2x1ZGUgInN5c2NvbG9yLmgiCi0KLQotICAvKiB3aW5kb3dzL2dyYXBoaWNzLmMgKi8KLWV4dGVybiB2b2lkIEdSQVBIX0RyYXdSZWxpZWZSZWN0KCBIREMgaGRjLCBSRUNUICpyZWN0LCBpbnQgaGlnaGxpZ2h0X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRvd19zaXplLCBCT09MIHByZXNzZWQgKTsKLWV4dGVybiBCT09MIEdSQVBIX0RyYXdCaXRtYXAoIEhEQyBoZGMsIEhCSVRNQVAgaGJpdG1hcCwgaW50IHhkZXN0LCBpbnQgeWRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4c3JjLCBpbnQgeXNyYywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcm9wICk7CisjaW5jbHVkZSAiZ3JhcGhpY3MuaCIKKyNpbmNsdWRlICJidXR0b24uaCIKIAogZXh0ZXJuIHZvaWQgREVGV05EX1NldFRleHQoIEhXTkQgaHduZCwgTFBTVFIgdGV4dCApOyAgLyogd2luZG93cy9kZWZ3bmQuYyAqLwogCmRpZmYgLS1naXQgYS9jb250cm9scy9jb21iby5jIGIvY29udHJvbHMvY29tYm8uYwppbmRleCBlZDhmMDdkLi5iNWM5MTg2IDEwMDY0NAotLS0gYS9jb250cm9scy9jb21iby5jCisrKyBiL2NvbnRyb2xzL2NvbWJvLmMKQEAgLTMsOSArMyw4IEBACiAgKgogICogQ29weXJpZ2h0ICBNYXJ0aW4gQXlvdHRlLCAxOTkzCiAgKgotICovCi0KIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCBNYXJ0aW4gQXlvdHRlLCAxOTkzIjsKKyovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMjAsMTUgKzE5LDggQEAKICNpbmNsdWRlICJwcm90b3R5cGVzLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKIC8qICNkZWZpbmUgREVCVUdfQ09NQk8gKi8KLS8qICN1bmRlZiAgREVCVUdfQ09NQk8gKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgotCi0gIC8qIHdpbmRvd3MvZ3JhcGhpY3MuYyAqLwotZXh0ZXJuIHZvaWQgR1JBUEhfRHJhd1JlbGllZlJlY3QoIEhEQyBoZGMsIFJFQ1QgKnJlY3QsIGludCBoaWdobGlnaHRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2hhZG93X3NpemUsIEJPT0wgcHJlc3NlZCApOwotZXh0ZXJuIEJPT0wgR1JBUEhfRHJhd0JpdG1hcCggSERDIGhkYywgSEJJVE1BUCBoYml0bWFwLCBpbnQgeGRlc3QsIGludCB5ZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHhzcmMsIGludCB5c3JjLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3AgKTsKLQorI2luY2x1ZGUgImdyYXBoaWNzLmgiCiAKIEhCSVRNQVAgaENvbWJvQml0ID0gMDsKIApkaWZmIC0tZ2l0IGEvY29udHJvbHMvZGVza3RvcC5jIGIvY29udHJvbHMvZGVza3RvcC5jCmluZGV4IDUzNTc5ZjEuLmUwNzViZWUgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL2Rlc2t0b3AuYworKysgYi9jb250cm9scy9kZXNrdG9wLmMKQEAgLTIsOSArMiw5IEBACiAgKiBEZXNrdG9wIHdpbmRvdyBjbGFzcy4KICAqCiAgKiBDb3B5cmlnaHQgMTk5NCBBbGV4YW5kcmUgSnVsbGlhcmQKLSAqLwogCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5NCI7CisqLwogCiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTMsMTEgKzEzLDggQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlICJ3aW4uaCIKICNpbmNsdWRlICJkZXNrdG9wLmgiCi0jaW5jbHVkZSAicHJvdG90eXBlcy5oIgotCi1leHRlcm4gQk9PTCBHUkFQSF9EcmF3Qml0bWFwKCBIREMgaGRjLCBIQklUTUFQIGhiaXRtYXAsIGludCB4ZGVzdCwgaW50IHlkZXN0LAotCQkJICAgICAgaW50IHhzcmMsIGludCB5c3JjLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0JCQkgICAgICBpbnQgcm9wICk7ICAgICAgICAgICAgICAgICAgICAgLyogZ3JhcGhpY3MuYyAqLworI2luY2x1ZGUgImRvc19mcy5oIgorI2luY2x1ZGUgImdyYXBoaWNzLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIERFU0tUT1BfTG9hZEJpdG1hcApAQCAtMzUsNyArMzIsNyBAQAogCiAgICAgICAvKiBSZWFkIGFsbCB0aGUgZmlsZSBpbnRvIG1lbW9yeSAqLwogCi0gICAgaWYgKCEodW5peEZpbGVOYW1lID0gR2V0VW5peEZpbGVOYW1lKCBmaWxlbmFtZSApKSkgcmV0dXJuIDA7CisgICAgaWYgKCEodW5peEZpbGVOYW1lID0gRE9TX0dldFVuaXhGaWxlTmFtZSggZmlsZW5hbWUgKSkpIHJldHVybiAwOwogICAgIGlmICgoZmlsZSA9IG9wZW4oIHVuaXhGaWxlTmFtZSwgT19SRE9OTFkgKSkgPT0gLTEpIHJldHVybiAwOwogICAgIHNpemUgPSBsc2VlayggZmlsZSwgMCwgU0VFS19FTkQgKTsKICAgICBpZiAoIShidWZmZXIgPSAoY2hhciAqKW1hbGxvYyggc2l6ZSApKSkKQEAgLTE1MSw3ICsxNDgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgU2V0RGVza1BhdHRlcm4gICAoVVNFUi4yNzkpCiAgKi8KLUJPT0wgU2V0RGVza1BhdHRlcm4oKQorQk9PTCBTZXREZXNrUGF0dGVybih2b2lkKQogewogICAgIGNoYXIgYnVmZmVyWzEwMF07CiAgICAgR2V0UHJvZmlsZVN0cmluZyggImRlc2t0b3AiLCAiUGF0dGVybiIsICIoTm9uZSkiLCBidWZmZXIsIDEwMCApOwpkaWZmIC0tZ2l0IGEvY29udHJvbHMvZWRpdC5jIGIvY29udHJvbHMvZWRpdC5jCmluZGV4IGI5MDdmNDkuLmEwNGIyYjkgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL2VkaXQuYworKysgYi9jb250cm9scy9lZGl0LmMKQEAgLTQsOSArNCw5IEBACiAgKiBDb3B5cmlnaHQgIERhdmlkIFcuIE1ldGNhbGZlLCAxOTk0CiAgKgogICogUmVsZWFzZSAzLCBKdWx5IDE5OTQKLSAqLwogCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIERhdmlkIFcuIE1ldGNhbGZlLCAxOTk0IjsKKyovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpkaWZmIC0tZ2l0IGEvY29udHJvbHMvbGlzdGJveC5jIGIvY29udHJvbHMvbGlzdGJveC5jCmluZGV4IDE4NTE0MmIuLjg2YzM5NDAgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL2xpc3Rib3guYworKysgYi9jb250cm9scy9saXN0Ym94LmMKQEAgLTMsMTAgKzMsOCBAQAogICoKICAqIENvcHlyaWdodCAgTWFydGluIEF5b3R0ZSwgMTk5MwogICoKLSAqLwotCi0KIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCBNYXJ0aW4gQXlvdHRlLCAxOTkzIjsKKyovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMTcsMTIgKzE1LDkgQEAKICNpbmNsdWRlICJoZWFwLmgiCiAjaW5jbHVkZSAid2luLmgiCiAjaW5jbHVkZSAibXNkb3MuaCIKLSNpbmNsdWRlICJ3aW5lLmgiCiAjaW5jbHVkZSAibGlzdGJveC5oIgotI2luY2x1ZGUgInByb3RvdHlwZXMuaCIKKyNpbmNsdWRlICJkb3NfZnMuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgotLyogI2RlZmluZSBERUJVR19MSVNUQk9YICovCi0vKiAjdW5kZWYgIERFQlVHX0xJU1RCT1ggKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAjZGVmaW5lIEdNRU1fWkVST0lOSVQgMHgwMDQwCkBAIC05MSwxNCArODYsOCBAQAogCQkJbHBobC0+aFduZExvZ2ljUGFyZW50ID0gR2V0UGFyZW50KGh3bmQpOwogCQlscGhsLT5oRm9udCA9IEdldFN0b2NrT2JqZWN0KFNZU1RFTV9GT05UKTsKIAkJbHBobC0+Q29sdW1uc1dpZHRoID0gd25kUHRyLT5yZWN0Q2xpZW50LnJpZ2h0IC0gd25kUHRyLT5yZWN0Q2xpZW50LmxlZnQ7Ci0JCWlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19WU0NST0xMKSB7Ci0JCQlTZXRTY3JvbGxSYW5nZShod25kLCBTQl9WRVJULCAxLCBMaXN0TWF4Rmlyc3RWaXNpYmxlKGxwaGwpLCBUUlVFKTsKLQkJCVNob3dTY3JvbGxCYXIoaHduZCwgU0JfVkVSVCwgRkFMU0UpOwotCQkJfQotCQlpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfSFNDUk9MTCkgewotCQkJU2V0U2Nyb2xsUmFuZ2UoaHduZCwgU0JfSE9SWiwgMSwgMSwgVFJVRSk7Ci0JCQlTaG93U2Nyb2xsQmFyKGh3bmQsIFNCX0hPUlosIEZBTFNFKTsKLQkJCX0KKyAgICAgICAgICAgICAgICBTZXRTY3JvbGxSYW5nZShod25kLCBTQl9WRVJULCAxLCBMaXN0TWF4Rmlyc3RWaXNpYmxlKGxwaGwpLCBUUlVFKTsKKyAgICAgICAgICAgICAgICBTZXRTY3JvbGxSYW5nZShod25kLCBTQl9IT1JaLCAxLCAxLCBUUlVFKTsKIAkJaWYgKCh3bmRQdHItPmR3U3R5bGUgJiBMQlNfT1dORVJEUkFXRklYRUQpID09IExCU19PV05FUkRSQVdGSVhFRCkgewogCQkJfQogCQlyZXR1cm4gMDsKQEAgLTI0Miw3ICsyMzEsNiBAQAogCQkJaWYgKHkgPCA0KSB7CiAJCQkJaWYgKGxwaGwtPkZpcnN0VmlzaWJsZSA+IDEpIHsKIAkJCQkJbHBobC0+Rmlyc3RWaXNpYmxlLS07Ci0JCQkJCWlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19WU0NST0xMKQogCQkJCQlTZXRTY3JvbGxQb3MoaHduZCwgU0JfVkVSVCwgbHBobC0+Rmlyc3RWaXNpYmxlLCBUUlVFKTsKIAkJCQkJSW52YWxpZGF0ZVJlY3QoaHduZCwgTlVMTCwgVFJVRSk7CiAJCQkJCVVwZGF0ZVdpbmRvdyhod25kKTsKQEAgLTI1Myw3ICsyNDEsNiBAQAogCQkJaWYgKHkgPiAocmVjdC5ib3R0b20gLSA0KSkgewogCQkJCWlmIChscGhsLT5GaXJzdFZpc2libGUgPCBMaXN0TWF4Rmlyc3RWaXNpYmxlKGxwaGwpKSB7CiAJCQkJCWxwaGwtPkZpcnN0VmlzaWJsZSsrOwotCQkJCQlpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfVlNDUk9MTCkKIAkJCQkJU2V0U2Nyb2xsUG9zKGh3bmQsIFNCX1ZFUlQsIGxwaGwtPkZpcnN0VmlzaWJsZSwgVFJVRSk7CiAJCQkJCUludmFsaWRhdGVSZWN0KGh3bmQsIE5VTEwsIFRSVUUpOwogCQkJCQlVcGRhdGVXaW5kb3coaHduZCk7CkBAIC0yODcsMTIgKzI3NCwxMiBAQAogCQkJCWhXbmRDdGwgPSBHZXROZXh0RGxnVGFiSXRlbShscGhsLT5oV25kTG9naWNQYXJlbnQsCiAJCQkJCWh3bmQsICEoR2V0S2V5U3RhdGUoVktfU0hJRlQpIDwgMCkpOwogCQkJCVNldEZvY3VzKGhXbmRDdGwpOwotI2lmZGVmIERFQlVHX0xJU1RCT1gKKwkJCQlpZihkZWJ1Z2dpbmdfbGlzdGJveCl7CiAJCQkJaWYgKChHZXRLZXlTdGF0ZShWS19TSElGVCkgPCAwKSkKIAkJCQkJZHByaW50Zl9saXN0Ym94KHN0ZGRlYiwiTGlzdEJveCBQcmV2aW91c0RsZ1RhYkl0ZW0gJTA0WCAhXG4iLCBoV25kQ3RsKTsKIAkJCQllbHNlCiAJCQkJCWRwcmludGZfbGlzdGJveChzdGRkZWIsIkxpc3RCb3ggTmV4dERsZ1RhYkl0ZW0gJTA0WCAhXG4iLCBoV25kQ3RsKTsKLSNlbmRpZgorCQkJCX0KIAkJCQlicmVhazsKIAkJCWNhc2UgVktfSE9NRToKIAkJCQlscGhsLT5JdGVtRm9jdXNlZCA9IDA7CkBAIC0zNDIsOCArMzI5LDcgQEAKIAkJCQlTZW5kTWVzc2FnZShscGhsLT5oV25kTG9naWNQYXJlbnQsIFdNX0NPTU1BTkQsIAogCSAgICAJICAgIHduZFB0ci0+d0lEbWVudSwgTUFLRUxPTkcoaHduZCwgTEJOX1NFTENIQU5HRSkpOwogCQkJfQotCQlpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfVlNDUk9MTCkKLQkJCVNldFNjcm9sbFBvcyhod25kLCBTQl9WRVJULCBscGhsLT5GaXJzdFZpc2libGUsIFRSVUUpOworICAgICAgICAgICAgICAgIFNldFNjcm9sbFBvcyhod25kLCBTQl9WRVJULCBscGhsLT5GaXJzdFZpc2libGUsIFRSVUUpOwogCQlJbnZhbGlkYXRlUmVjdChod25kLCBOVUxMLCBUUlVFKTsKIAkJVXBkYXRlV2luZG93KGh3bmQpOwogCQlicmVhazsKQEAgLTM1Nyw5ICszNDMsNyBAQAogCQlpZiAod1BhcmFtID09IDApIGJyZWFrOwogCQlicmVhazsKIAljYXNlIFdNX1NFVFJFRFJBVzoKLSNpZmRlZiBERUJVR19MSVNUQk9YCi0JCXByaW50ZigiTGlzdEJveCBXTV9TRVRSRURSQVcgaFduZD0lMDRYIHc9JTA0WCAhXG4iLCBod25kLCB3UGFyYW0pOwotI2VuZGlmCisJCWRwcmludGZfbGlzdGJveChzdGRkZWIsIkxpc3RCb3ggV01fU0VUUkVEUkFXIGhXbmQ9JTA0WCB3PSUwNFggIVxuIiwgaHduZCwgd1BhcmFtKTsKIAkJbHBobCA9IExpc3RCb3hHZXRXaW5kb3dBbmRTdG9yYWdlKGh3bmQsICZ3bmRQdHIpOwogCQlpZiAobHBobCA9PSBOVUxMKSByZXR1cm4gMDsKIAkJbHBobC0+YlJlZHJhd0ZsYWcgPSB3UGFyYW07CkBAIC00ODksOSArNDczLDcgQEAKIAkJCQl3UGFyYW0pOwogCQlscGhsID0gTGlzdEJveEdldFN0b3JhZ2VIZWFkZXIoaHduZCk7CiAJCWxwaGwtPkZpcnN0VmlzaWJsZSA9IHdQYXJhbTsKLQkJd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaHduZCk7Ci0JCWlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19WU0NST0xMKQotCQkgICAgU2V0U2Nyb2xsUG9zKGh3bmQsIFNCX1ZFUlQsIGxwaGwtPkZpcnN0VmlzaWJsZSwgVFJVRSk7CisgICAgICAgICAgICAgICAgU2V0U2Nyb2xsUG9zKGh3bmQsIFNCX1ZFUlQsIGxwaGwtPkZpcnN0VmlzaWJsZSwgVFJVRSk7CiAJCUludmFsaWRhdGVSZWN0KGh3bmQsIE5VTEwsIFRSVUUpOwogCQlVcGRhdGVXaW5kb3coaHduZCk7CiAJCWJyZWFrOwpAQCAtNTUzLDEwICs1MzUsNiBAQAogCQkgICAgTUFLRUxPTkcoaHduZCwgQ1RMQ09MT1JfTElTVEJPWCkpOwogCWlmIChoQnJ1c2ggPT0gKEhCUlVTSClOVUxMKSAgaEJydXNoID0gR2V0U3RvY2tPYmplY3QoV0hJVEVfQlJVU0gpOwogCUdldENsaWVudFJlY3QoaHduZCwgJnJlY3QpOwotLyoKLQlpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfVlNDUk9MTCkgcmVjdC5yaWdodCAtPSAxNjsKLQlpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfSFNDUk9MTCkgcmVjdC5ib3R0b20gLT0gMTY7Ci0qLwogCUZpbGxSZWN0KGhkYywgJnJlY3QsIGhCcnVzaCk7CiAJbWF4d2lkdGggPSByZWN0LnJpZ2h0OwogCXJlY3QucmlnaHQgPSBscGhsLT5Db2x1bW5zV2lkdGg7CkBAIC02MDgsMTMgKzU4Niw2IEBACiAJfQogRW5kT2ZQYWludDoKICAgICBFbmRQYWludCggaHduZCwgJnBzICk7Ci0gICAgaWYgKChscGhsLT5JdGVtc0NvdW50ID4gbHBobC0+SXRlbXNWaXNpYmxlKSAmCi0JKHduZFB0ci0+ZHdTdHlsZSAmIFdTX1ZTQ1JPTEwpKSB7Ci0vKgotICAgICAgICBJbnZhbGlkYXRlUmVjdCh3bmRQdHItPmhXbmRWU2Nyb2xsLCBOVUxMLCBUUlVFKTsKLSAgICAgICAgVXBkYXRlV2luZG93KHduZFB0ci0+aFduZFZTY3JvbGwpOwotKi8KLSAJfQogfQogCiAKQEAgLTY0NCw4ICs2MTUsNiBAQAogCQkgICAgTUFLRUxPTkcoaHduZCwgQ1RMQ09MT1JfTElTVEJPWCkpOwogCWlmIChoQnJ1c2ggPT0gKEhCUlVTSClOVUxMKSAgaEJydXNoID0gR2V0U3RvY2tPYmplY3QoV0hJVEVfQlJVU0gpOwogCUdldENsaWVudFJlY3QoaHduZCwgJnJlY3QpOwotCWlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19WU0NST0xMKSByZWN0LnJpZ2h0IC09IDE2OwotCWlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19IU0NST0xMKSByZWN0LmJvdHRvbSAtPSAxNjsKIAlGaWxsUmVjdChoZGMsICZyZWN0LCBoQnJ1c2gpOwogCW1heHdpZHRoID0gcmVjdC5yaWdodDsKIAlyZWN0LnJpZ2h0ID0gbHBobC0+Q29sdW1uc1dpZHRoOwpAQCAtNzA0LDE0ICs2NzMsNiBAQAogCX0KIEVuZE9mUGFpbnQ6CiAgICAgRW5kUGFpbnQoIGh3bmQsICZwcyApOwotICAgIGlmICgobHBobC0+SXRlbXNDb3VudCA+IGxwaGwtPkl0ZW1zVmlzaWJsZSkgJgotCQkod25kUHRyLT5kd1N0eWxlICYgV1NfVlNDUk9MTCkpIHsKLS8qCi0gICAgICAgIEludmFsaWRhdGVSZWN0KHduZFB0ci0+aFduZFZTY3JvbGwsIE5VTEwsIFRSVUUpOwotICAgICAgICBVcGRhdGVXaW5kb3cod25kUHRyLT5oV25kVlNjcm9sbCk7Ci0qLwotICAgICAgICB9Ci0KIH0KIAogCkBAIC03MjksOCArNjkwLDYgQEAKICAgICBscGxzID0gbHBobC0+bHBGaXJzdDsKICAgICBpZiAobHBscyA9PSBOVUxMKSByZXR1cm4gTEJfRVJSOwogICAgIEdldENsaWVudFJlY3QoaHduZCwgJnJlY3QpOwotICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19WU0NST0xMKSByZWN0LnJpZ2h0IC09IDE2OwotICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19IU0NST0xMKSByZWN0LmJvdHRvbSAtPSAxNjsKICAgICBoID0gdzIgPSAwOwogICAgIHcgPSBscGhsLT5Db2x1bW5zV2lkdGg7CiAgICAgZm9yKGkgPSAxOyBpIDw9IGxwaGwtPkl0ZW1zQ291bnQ7IGkrKykgewpAQCAtODgyLDE4ICs4NDEsMTIgQEAKIAlpZiAoKCh3bmRQdHItPmR3U3R5bGUgJiBMQlNfT1dORVJEUkFXVkFSSUFCTEUpID09IExCU19PV05FUkRSQVdWQVJJQUJMRSkgfHwKIAkJKCh3bmRQdHItPmR3U3R5bGUgJiBMQlNfT1dORVJEUkFXRklYRUQpID09IExCU19PV05FUkRSQVdGSVhFRCkpCiAJCUxpc3RCb3hBc2tNZWFzdXJlKHduZFB0ciwgbHBobCwgbHBsc25ldyk7Ci0JaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX1ZTQ1JPTEwpCi0JCVNldFNjcm9sbFJhbmdlKGh3bmQsIFNCX1ZFUlQsIDEsIExpc3RNYXhGaXJzdFZpc2libGUobHBobCksIAotCQkgICAgKGxwaGwtPkZpcnN0VmlzaWJsZSAhPSAxICYmIGxwaGwtPmJSZWRyYXdGbGFnKSk7Ci0JaWYgKCh3bmRQdHItPmR3U3R5bGUgJiBXU19IU0NST0xMKSAmJiBscGhsLT5JdGVtc1BlckNvbHVtbiAhPSAwKQorICAgICAgICBTZXRTY3JvbGxSYW5nZShod25kLCBTQl9WRVJULCAxLCBMaXN0TWF4Rmlyc3RWaXNpYmxlKGxwaGwpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgKGxwaGwtPkZpcnN0VmlzaWJsZSAhPSAxICYmIGxwaGwtPmJSZWRyYXdGbGFnKSk7CisJaWYgKGxwaGwtPkl0ZW1zUGVyQ29sdW1uICE9IDApCiAJCVNldFNjcm9sbFJhbmdlKGh3bmQsIFNCX0hPUlosIDEsIGxwaGwtPkl0ZW1zVmlzaWJsZSAvIAogCQkJbHBobC0+SXRlbXNQZXJDb2x1bW4gKyAxLAogCQkJKGxwaGwtPkZpcnN0VmlzaWJsZSAhPSAxICYmIGxwaGwtPmJSZWRyYXdGbGFnKSk7Ci0JaWYgKCgobHBobC0+SXRlbXNDb3VudCAtIGxwaGwtPkZpcnN0VmlzaWJsZSkgPT0gbHBobC0+SXRlbXNWaXNpYmxlKSAmJiAKLQkJKGxwaGwtPkl0ZW1zVmlzaWJsZSAhPSAwKSkgewotCQlpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfVlNDUk9MTCkgU2hvd1Njcm9sbEJhcihod25kLCBTQl9WRVJULCBUUlVFKTsKLQkJaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX0hTQ1JPTEwpIFNob3dTY3JvbGxCYXIoaHduZCwgU0JfSE9SWiwgVFJVRSk7Ci0JCX0KIAlpZiAoKGxwaGwtPkZpcnN0VmlzaWJsZSA8PSB1SW5kZXgpICYmCiAJCSgobHBobC0+Rmlyc3RWaXNpYmxlICsgbHBobC0+SXRlbXNWaXNpYmxlKSA+PSB1SW5kZXgpKSB7CiAJCUludmFsaWRhdGVSZWN0KGh3bmQsIE5VTEwsIFRSVUUpOwpAQCAtOTc3LDE3ICs5MzAsMTAgQEAKICAgICBscGhsLT5JdGVtc0NvdW50LS07CiAgICAgaWYgKGxwbHMtPmhEYXRhICE9IDApIExJU1RfSEVBUF9GUkVFKGxwaGwsIGxwbHMtPmhEYXRhKTsKICAgICBpZiAobHBscy0+aE1lbSAhPSAwKSBMSVNUX0hFQVBfRlJFRShscGhsLCBscGxzLT5oTWVtKTsKLSAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfVlNDUk9MTCkKLQlTZXRTY3JvbGxSYW5nZShod25kLCBTQl9WRVJULCAxLCBMaXN0TWF4Rmlyc3RWaXNpYmxlKGxwaGwpLCBUUlVFKTsKLSAgICBpZiAoKHduZFB0ci0+ZHdTdHlsZSAmIFdTX0hTQ1JPTEwpICYmIGxwaGwtPkl0ZW1zUGVyQ29sdW1uICE9IDApCisgICAgU2V0U2Nyb2xsUmFuZ2UoaHduZCwgU0JfVkVSVCwgMSwgTGlzdE1heEZpcnN0VmlzaWJsZShscGhsKSwgVFJVRSk7CisgICAgaWYgKGxwaGwtPkl0ZW1zUGVyQ29sdW1uICE9IDApCiAJU2V0U2Nyb2xsUmFuZ2UoaHduZCwgU0JfSE9SWiwgMSwgbHBobC0+SXRlbXNWaXNpYmxlIC8gCiAJICAgIGxwaGwtPkl0ZW1zUGVyQ29sdW1uICsgMSwgVFJVRSk7Ci0gICAgaWYgKGxwaGwtPkl0ZW1zQ291bnQgPCBscGhsLT5JdGVtc1Zpc2libGUpIHsKLQlpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfVlNDUk9MTCkKLQkgICAgU2hvd1Njcm9sbEJhcihod25kLCBTQl9WRVJULCBGQUxTRSk7Ci0JaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX0hTQ1JPTEwpCi0JICAgIFNob3dTY3JvbGxCYXIoaHduZCwgU0JfSE9SWiwgRkFMU0UpOwotCX0KICAgICBpZiAoKGxwaGwtPkZpcnN0VmlzaWJsZSA8PSB1SW5kZXgpICYmCiAgICAgICAgICgobHBobC0+Rmlyc3RWaXNpYmxlICsgbHBobC0+SXRlbXNWaXNpYmxlKSA+PSB1SW5kZXgpKSB7CiAgICAgICAgIEludmFsaWRhdGVSZWN0KGh3bmQsIE5VTEwsIFRSVUUpOwpAQCAtMTA1NiwxNSArMTAwMiwxMCBAQAogICAgIGlmICgod25kUHRyLT5kd1N0eWxlICYmIExCU19OT1RJRlkpICE9IDApCiAJU2VuZE1lc3NhZ2UobHBobC0+aFduZExvZ2ljUGFyZW50LCBXTV9DT01NQU5ELCAKICAgICAJICAgIHduZFB0ci0+d0lEbWVudSwgTUFLRUxPTkcoaHduZCwgTEJOX1NFTENIQU5HRSkpOwotICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19WU0NST0xMKQotCVNldFNjcm9sbFJhbmdlKGh3bmQsIFNCX1ZFUlQsIDEsIExpc3RNYXhGaXJzdFZpc2libGUobHBobCksIFRSVUUpOwotICAgIGlmICgod25kUHRyLT5kd1N0eWxlICYgV1NfSFNDUk9MTCkgJiYgbHBobC0+SXRlbXNQZXJDb2x1bW4gIT0gMCkKKyAgICBTZXRTY3JvbGxSYW5nZShod25kLCBTQl9WRVJULCAxLCBMaXN0TWF4Rmlyc3RWaXNpYmxlKGxwaGwpLCBUUlVFKTsKKyAgICBpZiAobHBobC0+SXRlbXNQZXJDb2x1bW4gIT0gMCkKIAlTZXRTY3JvbGxSYW5nZShod25kLCBTQl9IT1JaLCAxLCBscGhsLT5JdGVtc1Zpc2libGUgLyAKIAkgICAgbHBobC0+SXRlbXNQZXJDb2x1bW4gKyAxLCBUUlVFKTsKLSAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfVlNDUk9MTCkKLQlTaG93U2Nyb2xsQmFyKGh3bmQsIFNCX1ZFUlQsIEZBTFNFKTsKLSAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfSFNDUk9MTCkKLQlTaG93U2Nyb2xsQmFyKGh3bmQsIFNCX0hPUlosIEZBTFNFKTsKICAgICBJbnZhbGlkYXRlUmVjdChod25kLCBOVUxMLCBUUlVFKTsKICAgICBVcGRhdGVXaW5kb3coaHduZCk7CiAgICAgcmV0dXJuIFRSVUU7CmRpZmYgLS1naXQgYS9jb250cm9scy9tZW51LmMgYi9jb250cm9scy9tZW51LmMKaW5kZXggOGJjNjUwZi4uM2FjODk0NiAxMDA2NDQKLS0tIGEvY29udHJvbHMvbWVudS5jCisrKyBiL2NvbnRyb2xzL21lbnUuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCiAgKiAgICAgICAgTWVudXMgZnVuY3Rpb25zCi0gKi8KIHN0YXRpYyBjaGFyIFJDU0lkW10gPSAiJElkJCI7CiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIE1hcnRpbiBBeW90dGUsIDE5OTMiOwogc3RhdGljIGNoYXIgQ29weXJpZ2h0MltdID0gIkNvcHlyaWdodCAgQWxleGFuZHJlIEp1bGxpYXJkLCAxOTk0IjsKKyovCiAKIC8qCiAgKiBOb3RlOiB0aGUgc3R5bGUgTUZfTU9VU0VTRUxFQ1QgaXMgdXNlZCB0byBtYXJrIHBvcHVwIGl0ZW1zIHRoYXQKQEAgLTExLDcgKzExLDYgQEAKICAqIFRoaXMgaXMgcHJvYmFibHkgbm90IHRoZSBtZWFuaW5nIHRoaXMgc3R5bGUgaGFzIGluIE1TLVdpbmRvd3MuCiAgKi8KIAotCiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMjMsMTQgKzIyLDEzIEBACiAjaW5jbHVkZSAibWVudS5oIgogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJ3aW4uaCIKKyNpbmNsdWRlICJsaWJyYXJ5LmgiCiAjaW5jbHVkZSAibWVzc2FnZS5oIgorI2luY2x1ZGUgImdyYXBoaWNzLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKIC8qICNkZWZpbmUgREVCVUdfTUVOVSAqLwotLyogI3VuZGVmIERFQlVHX01FTlUgKi8KIC8qICNkZWZpbmUgREVCVUdfTUVOVUNBTEMgKi8KLS8qICN1bmRlZiBERUJVR19NRU5VQ0FMQyAqLwogLyogI2RlZmluZSBERUJVR19NRU5VU0hPUlRDVVQgKi8KLS8qICN1bmRlZiBERUJVR19NRU5VU0hPUlRDVVQgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAKQEAgLTYwLDEyICs1OCw2IEBACiAKIAogZXh0ZXJuIHZvaWQgTkNfRHJhd1N5c0J1dHRvbihIV05EIGh3bmQsIEhEQyBoZGMsIEJPT0wgZG93bik7ICAvKiBub25jbGllbnQuYyAqLwotZXh0ZXJuIHZvaWQgQ1VSU09SX1NldFdpbkN1cnNvciggSFdORCBod25kLCBIQ1VSU09SIGhjdXJzb3IgKTsgICAvKiBjdXJzb3IuYyAqLwotZXh0ZXJuIEJPT0wgR1JBUEhfRHJhd0JpdG1hcCggSERDIGhkYywgSEJJVE1BUCBoYml0bWFwLCBpbnQgeGRlc3QsIGludCB5ZGVzdCwKLQkJCSAgICAgIGludCB4c3JjLCBpbnQgeXNyYywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotCQkJICAgICAgaW50IHJvcCApOyAgICAgICAgICAgICAgICAgICAgIC8qIGdyYXBoaWNzLmMgKi8KLQotZXh0ZXJuIEhJTlNUQU5DRSBoU3lzUmVzOwogCiBzdGF0aWMgSEJJVE1BUCBoU3RkQ2hlY2sgPSAwOwogc3RhdGljIEhCSVRNQVAgaFN0ZE1uQXJyb3cgPSAwOwpkaWZmIC0tZ2l0IGEvY29udHJvbHMvc2Nyb2xsLmMgYi9jb250cm9scy9zY3JvbGwuYwppbmRleCAxNjhjOTY0Li5lMjgzNDdhIDEwMDY0NAotLS0gYS9jb250cm9scy9zY3JvbGwuYworKysgYi9jb250cm9scy9zY3JvbGwuYwpAQCAtMiwxMyArMiwxMiBAQAogICogSW50ZXJmYWNlIGNvZGUgdG8gU0NST0xMQkFSIHdpZGdldAogICoKICAqIENvcHlyaWdodCAgTWFydGluIEF5b3R0ZSwgMTk5MworICogQ29weXJpZ2h0ICBBbGV4YW5kcmUgSnVsbGlhcmQsIDE5OTQKICAqCiAgKiBTbWFsbCBmaXhlcyBhbmQgaW1wbGVtZW50ZWQgU0JfVEhVTUJQT1NJVElPTgogICogYnkgUGV0ZXIgQnJvYWRodXJzdCwgOTQwNjExCiAgKi8KIAotc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IE1hcnRpbiBBeW90dGUsIDE5OTMiOwotCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTE4LDEwICsxNywxMCBAQAogI2luY2x1ZGUgInN5c21ldHJpY3MuaCIKICNpbmNsdWRlICJzY3JvbGwuaCIKICNpbmNsdWRlICJ1c2VyLmgiCisjaW5jbHVkZSAiZ3JhcGhpY3MuaCIKICNpbmNsdWRlICJ3aW4uaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogLyogI2RlZmluZSBERUJVR19TQ1JPTEwgKi8KLS8qICN1bmRlZiAgREVCVUdfU0NST0xMICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogCkBAIC00OCwxMCArNDcsNiBAQAogICAgKCgoZmxhZ3MpJkVTQl9ESVNBQkxFX1JJR0hUKSA/IGhSZ0Fycm93SSA6ICgocHJlc3NlZCkgPyBoUmdBcnJvd0Q6aFJnQXJyb3cpKQogCiAKLSAgLyogd2luZG93cy9ncmFwaGljcy5jICovCi1leHRlcm4gdm9pZCBHUkFQSF9EcmF3UmVsaWVmUmVjdCggSERDIGhkYywgUkVDVCAqcmVjdCwgaW50IGhpZ2hsaWdodF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaGFkb3dfc2l6ZSwgQk9PTCBwcmVzc2VkICk7Ci0KICAgLyogTWluaW11bSBzaXplIG9mIHRoZSByZWN0YW5nbGUgYmV0d2VlbiB0aGUgYXJyb3dzICovCiAjZGVmaW5lIFNDUk9MTF9NSU5fUkVDVCAgNCAgCiAKQEAgLTgwNSw3ICs4MDAsOCBAQAogCiAgICAgaWYgKCEoaW5mb1B0ciA9IFNDUk9MTF9HZXRTY3JvbGxJbmZvKCBod25kLCBuQmFyICkpKSByZXR1cm47CiAKLSAgICBkcHJpbnRmX3Njcm9sbCggc3RkZGViLCJTZXRTY3JvbGxSYW5nZSBtaW49JWQgbWF4PSVkXG4iLCBNaW5WYWwsIE1heFZhbCApOworICAgIGRwcmludGZfc2Nyb2xsKCBzdGRkZWIsIlNldFNjcm9sbFJhbmdlIGh3bmQ9JXggYmFyPSVkIG1pbj0lZCBtYXg9JWRcbiIsCisgICAgICAgICAgICAgICAgICAgIGh3bmQsIG5CYXIsIE1pblZhbCwgTWF4VmFsICk7CiAKICAgICAgIC8qIEludmFsaWQgcmFuZ2UgLT4gcmFuZ2UgaXMgc2V0IHRvICgwLDApICovCiAgICAgaWYgKChNaW5WYWwgPiBNYXhWYWwpIHx8ICgobG9uZylNYXhWYWwgLSBNaW5WYWwgPiAzMjc2N0wpKQpAQCAtODE1LDggKzgxMSw4IEBACiAgICAgaW5mb1B0ci0+TWluVmFsID0gTWluVmFsOwogICAgIGluZm9QdHItPk1heFZhbCA9IE1heFZhbDsKIAotICAgICAgLyogTm9uLWNsaWVudCBzY3JvbGwtYmFyIGlzIGhpZGRlbiBpZmYgcmFuZ2UgaXMgKDAsMCkgKi8KLSAgICBpZiAobkJhciAhPSBTQl9DVEwpIFNob3dTY3JvbGxCYXIoIGh3bmQsIG5CYXIsIChNaW5WYWwgfHwgTWF4VmFsKSApOworICAgICAgLyogTm9uLWNsaWVudCBzY3JvbGwtYmFyIGlzIGhpZGRlbiBpZiBtaW49PW1heCAqLworICAgIGlmIChuQmFyICE9IFNCX0NUTCkgU2hvd1Njcm9sbEJhciggaHduZCwgbkJhciwgKE1pblZhbCAhPSBNYXhWYWwpICk7CiAgICAgaWYgKGJSZWRyYXcpIFNDUk9MTF9SZWZyZXNoU2Nyb2xsQmFyKCBod25kLCBuQmFyICk7CiB9CiAKQEAgLTg0Miw3ICs4MzgsNyBAQAogICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKTsKIAogICAgIGlmICghd25kUHRyKSByZXR1cm47Ci0gICAgZHByaW50Zl9zY3JvbGwoIHN0ZGRlYiwgIlNob3dTY3JvbGxCYXI6ICV4ICVkICVkXG4iLCBod25kLCB3QmFyLCBmU2hvdyApOworICAgIGRwcmludGZfc2Nyb2xsKCBzdGRkZWIsICJTaG93U2Nyb2xsQmFyOiBod25kPSV4IGJhcj0lZCBvbj0lZFxuIiwgaHduZCwgd0JhciwgZlNob3cgKTsKIAogICAgIHN3aXRjaCh3QmFyKQogICAgIHsKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL3N0YXRpYy5jIGIvY29udHJvbHMvc3RhdGljLmMKaW5kZXggMTEwODE3Zi4uOTA4OTA5NSAxMDA2NDQKLS0tIGEvY29udHJvbHMvc3RhdGljLmMKKysrIGIvY29udHJvbHMvc3RhdGljLmMKQEAgLTMsOSArMyw4IEBACiAgKgogICogQ29weXJpZ2h0ICBEYXZpZCBXLiBNZXRjYWxmZSwgMTk5MwogICoKLSAqLwotCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIERhdmlkIFcuIE1ldGNhbGZlLCAxOTkzIjsKKyovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTk4LDEwICs5NywxMiBAQAogICAgICAgICAgICAgcmV0dXJuIERlZldpbmRvd1Byb2MoaFduZCwgdU1zZywgd1BhcmFtLCBsUGFyYW0pOwogCiAJY2FzZSBXTV9DUkVBVEU6Ci0JICAgIGlmIChzdHlsZSA8IDBMIHx8IHN0eWxlID4gTEFTVF9TVEFUSUNfVFlQRSkgeworCSAgICBpZiAoc3R5bGUgPCAwTCB8fCBzdHlsZSA+IExBU1RfU1RBVElDX1RZUEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiU1RBVElDOiBVbmtub3duIHN0eWxlIDB4JTAybHhcbiIsIHN0eWxlICk7CiAJCWxSZXN1bHQgPSAtMUw7CiAJCWJyZWFrOwotCQl9CisgICAgICAgICAgICB9CiAJICAgIC8qIGluaXRpYWxpc2UgY29sb3VycyAqLwogCSAgICBjb2xvcl93aW5kb3dmcmFtZSAgPSBHZXRTeXNDb2xvcihDT0xPUl9XSU5ET1dGUkFNRSk7CiAJICAgIGNvbG9yX2JhY2tncm91bmQgICA9IEdldFN5c0NvbG9yKENPTE9SX0JBQ0tHUk9VTkQpOwpAQCAtMTE2LDExICsxMTcsMTEgQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAJY2FzZSBXTV9QQUlOVDoKLQkgICAgaWYgKHN0YXRpY1BhaW50RnVuY1tzdHlsZV0pCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgUEFJTlRTVFJVQ1QgcHM7CiAgICAgICAgICAgICAgICAgQmVnaW5QYWludCggaFduZCwgJnBzICk7Ci0JCShzdGF0aWNQYWludEZ1bmNbc3R5bGVdKSggaFduZCwgcHMuaGRjICk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY1BhaW50RnVuY1tzdHlsZV0pCisgICAgICAgICAgICAgICAgICAgIChzdGF0aWNQYWludEZ1bmNbc3R5bGVdKSggaFduZCwgcHMuaGRjICk7CiAgICAgICAgICAgICAgICAgRW5kUGFpbnQoIGhXbmQsICZwcyApOwogICAgICAgICAgICAgfQogCSAgICBicmVhazsKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL3dpZGdldHMuYyBiL2NvbnRyb2xzL3dpZGdldHMuYwppbmRleCA4MzhkMDllLi45MzI1OTRlIDEwMDY0NAotLS0gYS9jb250cm9scy93aWRnZXRzLmMKKysrIGIvY29udHJvbHMvd2lkZ2V0cy5jCkBAIC0yLDkgKzIsOSBAQAogICogV2luZG93cyB3aWRnZXRzIChidWlsdC1pbiB3aW5kb3cgY2xhc3NlcykKICAqCiAgKiBDb3B5cmlnaHQgMTk5MyBBbGV4YW5kcmUgSnVsbGlhcmQKLSAqLwogCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5MyI7CisqLwogCiAjaW5jbHVkZSAid2luLmgiCiAjaW5jbHVkZSAiYnV0dG9uLmgiCmRpZmYgLS1naXQgYS9kZWJ1Z2dlci9icmVhay5jIGIvZGVidWdnZXIvYnJlYWsuYwppbmRleCA3MDU1MjhjLi4yYzI3NmRhIDEwMDY0NAotLS0gYS9kZWJ1Z2dlci9icmVhay5jCisrKyBiL2RlYnVnZ2VyL2JyZWFrLmMKQEAgLTEsMTEgKzEsMTkgQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpZmRlZiBsaW51eAorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKICNkZWZpbmUgTl9CUCAyNQogCitleHRlcm4gaW50IGRiZ19tb2RlOworCiBzdHJ1Y3Qgd2luZV9icHsKICAgdW5zaWduZWQgbG9uZyBhZGRyOworICB1bnNpZ25lZCBsb25nIG5leHRfYWRkcjsKICAgY2hhciBpbl91c2U7CiAgIGNoYXIgZW5hYmxlZDsKICAgdW5zaWduZWQgY2hhciBkYXRhYnl0ZTsKQEAgLTEzLDEzICsyMSwxOSBAQAogCiBzdGF0aWMgc3RydWN0IHdpbmVfYnAgd2JwW05fQlBdID0ge3swLH0sfTsKIAotdm9pZCBpbmZvX2JyZWFrKCkKK3N0YXRpYyBpbnQgY3VycmVudF9icCA9IC0xOworc3RhdGljIGludCBjb250X21vZGU9MDsJLyogMCAtIGNvbnRpbnVvdXMgZXhlY3V0aW9uCisJCQkgICAxIC0gYWR2YW5jaW5nIGFmdGVyIGJyZWFrcG9pbnQKKwkJCSAgIDIgLSBzaW5nbGUgc3RlcCAtIG5vdCBpbXBsZW1lbnRlZAorCQkJKi8KKwordm9pZCBpbmZvX2JyZWFrKHZvaWQpCiB7CiAgIGludCBqOwogICBmcHJpbnRmKHN0ZGVyciwiQnJlYWtwb2ludCBzdGF0dXNcbiIpOwogICBmb3Ioaj0wOyBqPE5fQlA7IGorKykKICAgICBpZih3YnBbal0uaW5fdXNlKQotICAgICAgZnByaW50ZihzdGRlcnIsIiVkOiAlYyAlOC44eFxuIiwgaiwgKHdicFtqXS5lbmFibGVkID8gJ3knIDogJ24nKSwKKyAgICAgIGZwcmludGYoc3RkZXJyLCIlZDogJWMgJThseFxuIiwgaiwgKHdicFtqXS5lbmFibGVkID8gJ3knIDogJ24nKSwKIAkgICAgICB3YnBbal0uYWRkcik7CiB9CiAKQEAgLTQ4LDExICs2MiwzNCBAQAogCXdicFtqXS5pbl91c2UgPSAxOwogCXdicFtqXS5lbmFibGVkID0gMTsKIAl3YnBbal0uYWRkciA9IGFkZHI7CisJd2JwW2pdLm5leHRfYWRkciA9IDA7CiAJcmV0dXJuOwogICAgICAgfQogICBmcHJpbnRmKHN0ZGVyciwiTm8gbW9yZSBicmVha3BvaW50c1xuIik7CiB9CiAKK3N0YXRpYyB2b2lkIGJhcmsoKQoreworICBzdGF0aWMgaW50IGJhcmtlZD0wOworICBpZihiYXJrZWQpcmV0dXJuOworICBiYXJrZWQ9MTsKKyAgcGVycm9yKCJTb3JyeSwgY2FuJ3Qgc2V0IGJyZWFrIHBvaW50Iik7CisjaWZkZWYgbGludXgKKyAge3N0cnVjdCB1dHNuYW1lIGJ1ZjsKKyAgdW5hbWUoJmJ1Zik7CisgIGlmKHN0cmNtcChidWYuc3lzbmFtZSwiTGludXgiKT09MCkKKyAgewlpZihzdHJjbXAoYnVmLnJlbGVhc2UsIjEuMS42MiIpPDApCisJICBmcHJpbnRmKHN0ZGVyciwiWW91ciBjdXJyZW50IExpbnV4IHJlbGVhc2UgaXMgJXMuICIKKwkJIllvdSBzaG91bGQgdXBncmFkZSB0byAxLjEuNjIgb3IgaGlnaGVyXG4iCisJCSJBbHRlcm5hdGl2ZWx5LCBpbiAvdXNyL3NyYy9saW51eC9mcy9leGVjLmMsIgorCQkiIGNoYW5nZSBNQVBfU0hBUkVEIHRvIE1BUF9QUklWQVRFLlxuIiwgYnVmLnJlbGVhc2UpOworICB9IGVsc2UKKyAgZnByaW50ZihzdGRlcnIsIldoeSBkaWQgeW91IGNvbXBpbGUgZm9yIExpbnV4LCB3aGlsZSB5b3VyIHN5c3RlbSBpcyIKKyAgICIgYWN0dWFsbHkgJXM/XG4iLGJ1Zi5zeXNuYW1lKTsKKyAgfQorI2VuZGlmCit9CisgIAogdm9pZCBpbnNlcnRfYnJlYWsoaW50IGZsYWcpCiB7CiAgIHVuc2lnbmVkIGNoYXIgKiBwbnQ7CkBAIC02MSw2ICs5OCwyMCBAQAogICBmb3Ioaj0wOyBqPE5fQlA7IGorKykKICAgICBpZih3YnBbal0uZW5hYmxlZCkKICAgICAgIHsKKyAgICAgICAgLyogVGhlcmUgYXJlIGEgY291cGxlIG9mIHByb2JsZW1zIHdpdGggdGhpcy4gT24gTGludXggcHJpb3IgdG8KKyAgICAgICAgICAgMS4xLjYyLCB0aGlzIGNhbGwgZmFpbHMgKEVOT0FDQ0VTUykgZHVlIHRvIGEgYnVnIGluIGZzL2V4ZWMuYy4KKyAgICAgICAgICAgVGhpcyBjb2RlIGlzIGN1cnJlbnRseSBub3QgdGVzdGVkIGF0IGFsbCBvbiBCU0QuCisgICAgICAgICAgIEhvdyBkbyBJIGRldGVybWluZSB0aGUgcGFnZSBzaXplIGluIGEgbW9yZSBzeW1ib2xpYyBtYW5uZXI/CisgICAgICAgICAgIEFuZCB3aHkgZG9lcyBtcHJvdGVjdCBuZWVkIHRoYXQgc3RhcnQgYWRkcmVzcyBvZiB0aGUgcGFnZQorICAgICAgICAgICBpbiB0aGUgZmlyc3QgcGxhY2U/CisgICAgICAgICAgIE5vdCB0aGF0IHBvcnRhYmlsaXR5IG1hdHRlcnMsIHRoaXMgY29kZSBpcyBpMzg2IG9ubHkgYW55d2F5cy4uLgorICAgICAgICAgICBIb3cgZG8gSSBnZXQgdGhlIG9sZCBwcm90ZWN0aW9uIGluIG9yZGVyIHRvIHJlc3RvcmUgaXQgbGF0ZXIgb24/CisgICAgICAgICovCisJaWYobXByb3RlY3QoKGNhZGRyX3QpKHdicFtqXS5hZGRyICYgKH40MDk1KSksIDQwOTYsIAorCSAgUFJPVF9SRUFEfFBST1RfV1JJVEV8UFJPVF9FWEVDKSA9PSAtMSl7CisJICAgIGJhcmsoKTsKKyAgICAgICAgICAgIHJldHVybjsKKwl9CiAJcG50ID0gKHVuc2lnbmVkIGNoYXIgKikgd2JwW2pdLmFkZHI7CiAJaWYoZmxhZykgewogCSAgd2JwW2pdLmRhdGFieXRlID0gKnBudDsKQEAgLTY4LDYgKzExOSw3IEBACiAJfSBlbHNlIHsKIAkgICpwbnQgPSB3YnBbal0uZGF0YWJ5dGU7CiAJfQorCW1wcm90ZWN0KChjYWRkcl90KSh3YnBbal0uYWRkciAmIH40MDk1KSwgNDA5NiwgUFJPVF9SRUFEfFBST1RfRVhFQyk7CiAgICAgICB9CiB9CiAKQEAgLTgyLDMgKzEzNCwyNyBAQAogCiAgIHJldHVybiAtMTsKIH0KKwordm9pZCB0b2dnbGVfbmV4dChpbnQgbnVtKQoreworICAgdW5zaWduZWQgaW50IGFkZHI7CisgICBhZGRyPXdicFtudW1dLmFkZHI7CisgICBpZih3YnBbbnVtXS5uZXh0X2FkZHIgPT0gMCkKKwl3YnBbbnVtXS5uZXh0X2FkZHI9YWRkcitwcmludF9pbnNuKGFkZHIsYWRkcixzdGRlcnIsZGJnX21vZGUpOworICAgd2JwW251bV0uYWRkcj13YnBbbnVtXS5uZXh0X2FkZHI7CisgICB3YnBbbnVtXS5uZXh0X2FkZHI9YWRkcjsKK30KKworaW50IHNob3VsZF9jb250aW51ZShpbnQgYnBudW0pCit7CisgICAgaWYoYnBudW08MClyZXR1cm4gMDsKKyAgICB0b2dnbGVfbmV4dChicG51bSk7CisgICAgaWYoYnBudW09PWN1cnJlbnRfYnApeworICAgICAgICBjdXJyZW50X2JwPS0xOworCWNvbnRfbW9kZT0wOworCXJldHVybiAxOworICAgIH0KKyAgICBjb250X21vZGU9MTsKKyAgICBjdXJyZW50X2JwPWJwbnVtOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZGVidWdnZXIvZGJnLnkgYi9kZWJ1Z2dlci9kYmcueQppbmRleCBmMDlkZTgzLi5iMmQyYWI4IDEwMDY0NAotLS0gYS9kZWJ1Z2dlci9kYmcueQorKysgYi9kZWJ1Z2dlci9kYmcueQpAQCAtMzAsNiArMzAsNyBAQAogJXRva2VuIEJBQ0tUUkFDRQogJXRva2VuIElORk8KICV0b2tlbiBTVEFDSworJXRva2VuIFNFR01FTlRTCiAldG9rZW4gUkVHCiAldG9rZW4gUkVHUwogJXRva2VuIE5VTQpAQCAtODMsNyArODQsNyBAQAogCiBwcmludDoKIAkgICdwJwotCXwgcHJpbnQKKwl8IFBSSU5UCiAJCiAgcHJpbnRfY29tbWFuZDoKIAkgIHByaW50IGV4cHIgJ1xuJyB7IGV4YW1pbmVfbWVtb3J5KCgodW5zaWduZWQgaW50KSAmJDIgKSwgMSwgJ3gnKTsgfQpAQCAtMTA3LDE1ICsxMDgsMTYgQEAKIAogIGV4cHI6ICBOVU0JCQl7ICQkID0gJDE7CX0KIAl8IFJFRwkJCXsgaWYocmVndmFsKSAkJCA9IHJlZ3ZhbFskMV07IGVsc2UgYXBwbGljYXRpb25fbm90X3J1bm5pbmcoKTt9Ci0JfCBzeW1ib2wgICAJCXsgJCQgPSAqKCh1bnNpZ25lZCBpbnQgKikgJDEpOyB9CisJfCBzeW1ib2wgICAJCXsgJCQgPSAkMTsgfQogCXwgZXhwciAnKycgTlVNCQl7ICQkID0gJDEgKyAkMzsgfQogCXwgZXhwciAnLScgTlVNCQl7ICQkID0gJDEgLSAkMzsgfQogCXwgJygnIGV4cHIgJyknCQl7ICQkID0gJDI7IH0KIAl8ICcqJyBleHByCQl7ICQkID0gKigodW5zaWduZWQgaW50ICopICQyKTsgfQogCQotIGluZm9jbWQ6IElORk8gUkVHUyB7IGluZm9fcmVnKCk7IH0KLQl8IElORk8gU1RBQ0sgIHsgaW5mb19zdGFjaygpOyB9Ci0JfCBJTkZPIEJSRUFLICB7IGluZm9fYnJlYWsoKTsgfQorIGluZm9jbWQ6IElORk8gUkVHUyAgICAgeyBpbmZvX3JlZygpOyB9CisJfCBJTkZPIFNUQUNLICAgIHsgaW5mb19zdGFjaygpOyB9CisJfCBJTkZPIEJSRUFLICAgIHsgaW5mb19icmVhaygpOyB9CisJfCBJTkZPIFNFR01FTlRTIHsgcHJpbnRfbGR0KCk7IH0KIAogCiAlJQpAQCAtMTg3LDE3ICsxODksMjEgQEAKIAl9CiAKIAkvKiBSZW1vdmUgdGhlIGJyZWFrcG9pbnRzIGZyb20gbWVtb3J5Li4uICovCi0JZnByaW50ZihzdGRlcnIsIlJlbW92aW5nIEJQc1xuIik7CiAJaW5zZXJ0X2JyZWFrKDApOwogCiAJLyogSWYgd2Ugc3RvcHBlZCBvbiBhIGJyZWFrcG9pbnQsIHJlcG9ydCB0aGlzIGZhY3QgKi8KIAlpZihzaWduYWwgPT0gU0lHVFJBUCkKIAkgIHsKIAkgICAgdW5zaWduZWQgaW50IGFkZHI7CisJICAgIGludCBicG51bTsKIAkgICAgYWRkciA9IFNDX0VJUChkYmdfbWFzayk7CiAJICAgIGlmKChhZGRyICYgMHhmZmZmMDAwMCkgPT0gMCAmJiBkYmdfbW9kZSA9PSAxNikKIAkgICAgICBhZGRyIHw9IFNDX0NTIDw8IDE2OwotCSAgICBmcHJpbnRmKHN0ZGVyciwiU3RvcHBlZCBvbiBicmVha3BvaW50ICVkXG4iLCBnZXRfYnBudW0oYWRkcikpOworCSAgICBpZihzaG91bGRfY29udGludWUoYnBudW09Z2V0X2JwbnVtKGFkZHIpKSl7CisJCWluc2VydF9icmVhaygxKTsKKwkJcmV0dXJuOworCSAgICB9CisJICAgIGZwcmludGYoc3RkZXJyLCJTdG9wcGVkIG9uIGJyZWFrcG9pbnQgJWRcbiIsIGJwbnVtKTsKIAkgIH0KIAogCS8qIFNob3cgd2hlcmUgd2UgY3Jhc2hlZCAqLwpkaWZmIC0tZ2l0IGEvZGVidWdnZXIvZGVidWcubCBiL2RlYnVnZ2VyL2RlYnVnLmwKaW5kZXggNDcxMzUxNi4uZmI1YzRmYiAxMDA2NDQKLS0tIGEvZGVidWdnZXIvZGVidWcubAorKysgYi9kZWJ1Z2dlci9kZWJ1Zy5sCkBAIC0xLDUgKzEsMyBAQAotCi0KIC8qIExleGljYWwgc2Nhbm5lciBmb3IgY29tbWFuZCBsaW5lIHBhcnNpbmcgaW4gdGhlIFdpbmUgZGVidWdnZXIKICAqCiAgKiBWZXJzaW9uIDEuMApAQCAtNTMsMTIgKzUxLDEyIEBACiAiPyIJCXsgcmV0dXJuIEhFTFA7IH0KIAogIjB4Iit7SEVYRElHSVR9KyAgIHsKLQkJc3NjYW5mKHl5dGV4dCwgIiVseCIsICZ5eWx2YWwpOworCQlzc2NhbmYoeXl0ZXh0LCAiJXgiLCAmeXlsdmFsKTsKIAkJcmV0dXJuIE5VTTsKIAkJfQogCiB7RElHSVR9KyAgIHsKLQkJc3NjYW5mKHl5dGV4dCwgIiVsZCIsICZ5eWx2YWwpOworCQlzc2NhbmYoeXl0ZXh0LCAiJWQiLCAmeXlsdmFsKTsKIAkJcmV0dXJuIE5VTTsKIAkJfQogCkBAIC04MCw3ICs3OCw3IEBACiAkc3MJCXsgeXlsdmFsID0gUk5fU1M7ICByZXR1cm4gUkVHO30KIAogaW5mb3xpbmZ8aW4JCXsgcmV0dXJuIElORk87IH0KLQorc2VnbWVudHN8c2VnbSAgICAgICAgICAgeyByZXR1cm4gU0VHTUVOVFM7IH0KIGJyZWFrfGJyZWF8YnJlICAgICAgICAgIHsgcmV0dXJuIEJSRUFLOyB9CiBlbmFibGV8ZW5hYmx8ZW5hYnxlbmEgICB7IHJldHVybiBFTkFCTEU7fQogZGlzYWJsZXxkaXNhYmx8ZGlzYWJ8ZGlzYXxkaXMgeyByZXR1cm4gRElTQUJMRTsgfQpAQCAtMTgzLDggKzE4MSw3IEBACiB9CiAKIC8qIFN0cmlwIHdoaXRlc3BhY2UgZnJvbSB0aGUgc3RhcnQgYW5kIGVuZCBvZiBTVFJJTkcuICovCi1zdHJpcHdoaXRlIChzdHJpbmcpCi0gICAgIGNoYXIgKnN0cmluZzsKK3ZvaWQgc3RyaXB3aGl0ZSAoY2hhciAqc3RyaW5nKQogewogICByZWdpc3RlciBpbnQgaSA9IDA7CiAKZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL2hhc2guYyBiL2RlYnVnZ2VyL2hhc2guYwppbmRleCA0Njg0NDZlLi42MDBjZjM0IDEwMDY0NAotLS0gYS9kZWJ1Z2dlci9oYXNoLmMKKysrIGIvZGVidWdnZXIvaGFzaC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bmVleGUuaD4KICNpbmNsdWRlIDxzZWdtZW0uaD4KICNpbmNsdWRlIDxwcm90b3R5cGVzLmg+CisjaW5jbHVkZSAic2VsZWN0b3JzLmgiCiAjaW5jbHVkZSA8d2luZS5oPgogI2luY2x1ZGUgPGRsbHMuaD4KIApkaWZmIC0tZ2l0IGEvZGVidWdnZXIvaW5mby5jIGIvZGVidWdnZXIvaW5mby5jCmluZGV4IGJiNjViZWMuLmU0ZTQ0MzIgMTAwNjQ0Ci0tLSBhL2RlYnVnZ2VyL2luZm8uYworKysgYi9kZWJ1Z2dlci9pbmZvLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQlwbnQgPSAoY2hhciAqKSBhZGRyOwogCQlmb3IoaT0wOyBpPGNvdW50OyBpKyspIAogCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwiICUwMi4yeCIsICgqcG50KyspICYgMHhmZik7CisJCQlmcHJpbnRmKHN0ZGVyciwiICUwMngiLCAoKnBudCsrKSAmIDB4ZmYpOwogCQkJaWYgKChpICUgMzIpID09IDcpIHsKIAkJCQlmcHJpbnRmKHN0ZGVyciwiXG4iKTsKIAkJCQlwcmludF9hZGRyZXNzKCh1bnNpZ25lZCBpbnQpIHBudCwgc3RkZXJyKTsKZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL29wY29kZXMvaTM4Ni1kaXMuYyBiL2RlYnVnZ2VyL29wY29kZXMvaTM4Ni1kaXMuYwppbmRleCA0MDlhNzU2Li4wZDE4MzExIDEwMDY0NAotLS0gYS9kZWJ1Z2dlci9vcGNvZGVzL2kzODYtZGlzLmMKKysrIGIvZGVidWdnZXIvb3Bjb2Rlcy9pMzg2LWRpcy5jCkBAIC0xNTY1LDcgKzE1NjUsNyBAQAogICAgIHsKICAgICAgIGlmIChtb2QgPT0gMCAmJiBybSA9PSA2KQogCXsKLQkgIHNwcmludGYgKHNjcmF0Y2hidWYsICIweCUwNC40eCIsIGdldDE2ICgpKTsKKwkgIHNwcmludGYgKHNjcmF0Y2hidWYsICIweCUwNHgiLCBnZXQxNiAoKSk7CiAJICBvYXBwZW5kIChzY3JhdGNoYnVmKTsKIAkgIHJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL3JlYWRsaW5lL2NvbXBsZXRlLmMgYi9kZWJ1Z2dlci9yZWFkbGluZS9jb21wbGV0ZS5jCmluZGV4IDBjZDAyOWMuLmM1Y2JhYWEgMTAwNjQ0Ci0tLSBhL2RlYnVnZ2VyL3JlYWRsaW5lL2NvbXBsZXRlLmMKKysrIGIvZGVidWdnZXIvcmVhZGxpbmUvY29tcGxldGUuYwpAQCAtMiw5ICsyLDkgQEAKICoqCiAqKiAgSGlzdG9yeSBhbmQgZmlsZSBjb21wbGV0aW9uIGZ1bmN0aW9ucyBmb3IgZWRpdGxpbmUgbGlicmFyeS4KICovCisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSAiZWRpdGxpbmUuaCIKIAotCiAjaWYJZGVmaW5lZChORUVEX1NUUkRVUCkKIC8qCiAqKiAgUmV0dXJuIGFuIGFsbG9jYXRlZCBjb3B5IG9mIGEgc3RyaW5nLgpkaWZmIC0tZ2l0IGEvaWYxNjMyL2NhbGwuUyBiL2lmMTYzMi9jYWxsLlMKaW5kZXggMmQ1ZWQ4ZC4uZTM2ZjA5MyAxMDA2NDQKLS0tIGEvaWYxNjMyL2NhbGwuUworKysgYi9pZjE2MzIvY2FsbC5TCkBAIC0xNjMsOSArMTYzLDE3IEBACiAgKgkJCTEwCXRhcmdldCBjcwogICoJCQkxMgl0YXJnZXQgZHMKICAqCQkJMTQgICAgICB0YXJnZXQgY3ggIChvbmx5IENhbGxUbzE2Y3gpCisgKiAgICAgICAgICAgICAgICAgICAgICAxNiAgICAgIHRhcmdldCBkaQogICovCiAJLmFsaWduCTQKLQkuZ2xvYmwgQShDYWxsVG8xNiksIEEoQ2FsbFRvMTZjeCkKKwkuZ2xvYmwgQShDYWxsVG8xNiksIEEoQ2FsbFRvMTZjeCksIEEoQ2FsbFRvTGliTWFpbikKK0EoQ2FsbFRvTGliTWFpbjopCisgICAgICAgIHB1c2hsICAgJWVicAorICAgICAgICBtb3ZsICAgICVlc3AsJWVicAorICAgICAgICBtb3Z3ICAgIDE2KCVlYnApLCVkaQorICAgICAgICBtb3Z3ICAgIDAsJXNpCisgICAgICAgIG1vdncgICAgMCwlZXMKKyAgICAgICAgam1wICAgICBMMQogQShDYWxsVG8xNjopCiBBKENhbGxUbzE2Y3g6KQogCXB1c2hsCSVlYnAKQEAgLTE3NCw3ICsxODIsNyBAQAogCS8qCiAJICogR2V0IHRhcmdldCBhZGRyZXNzIGFuZCBuZXcgZHMKIAkgKi8KLQltb3ZsCTgoJWVicCksJWVheAorTDE6CW1vdmwJOCglZWJwKSwlZWF4CiAJbW92bAklZWF4LGp1bXBfdGFyZ2V0CiAJbGVhCWp1bXBfdGFyZ2V0LCVlZHgKIAltb3Z3CTEyKCVlYnApLCVheApkaWZmIC0tZ2l0IGEvaWYxNjMyL2NhbGxiYWNrLmMgYi9pZjE2MzIvY2FsbGJhY2suYwppbmRleCA1ZThkNWViLi5hZWYxZDUzIDEwMDY0NAotLS0gYS9pZjE2MzIvY2FsbGJhY2suYworKysgYi9pZjE2MzIvY2FsbGJhY2suYwpAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgV0lORUxJQgorLyoKIHN0YXRpYyBjaGFyIFJDU0lkW10gPSAiJElkOiB3aW5lLmMsdiAxLjIgMTk5My8wNy8wNCAwNDowNDoyMSByb290IEV4cCByb290ICQiOwogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBSb2JlcnQgSi4gQW1zdGFkdCwgMTk5MyI7CisqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTExLDEwICsxMyw4IEBACiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSAiZGxscy5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCi0vKiAjZGVmaW5lIERFQlVHX0NBTExCQUNLICovCi0vKiAjdW5kZWYgIERFQlVHX0NBTExCQUNLICovCiAjaW5jbHVkZSAiZGVidWcuaCIKLQorI2luY2x1ZGUgImlmMTYzMi5oIgogCiBleHRlcm4gU0VHREVTQyBTZWdtZW50c1tdOwogZXh0ZXJuIHVuc2lnbmVkIHNob3J0IElGMTYzMl9TYXZlZDE2X3NzOwpAQCAtMTg4LDEzICsxODgsMTUgQEAKIAkvKiBkZWZhdWx0ICovCiAJZWxzZQogCXsKLQkgICAgZnByaW50ZihzdGRlcnIsICJ3aW5lOiBVbmtub3duIHdpbmUgY2FsbGJhY2sgJTA4eFxuIiwgZnVuYyk7CisJICAgIGZwcmludGYoc3RkZXJyLCAid2luZTogVW5rbm93biB3aW5lIGNhbGxiYWNrICUwOHhcbiIsIAorCSAgICAJKHVuc2lnbmVkIGludCkgZnVuYyk7CiAJICAgIGV4aXQoMSk7CiAJfQogICAgIH0KICAgICBlbHNlIGlmIChJU18xNl9CSVRfQUREUkVTUyhmdW5jKSkKICAgICB7CQotCWRwcmludGZfY2FsbGJhY2soc3RkZGViLCAiQ2FsbFdpbmRvd1Byb2MgLy8gMTZiaXQgZnVuYz0lcCAhXG4iLCBmdW5jKTsKKwlkcHJpbnRmX2NhbGxiYWNrKHN0ZGRlYiwgIkNhbGxXaW5kb3dQcm9jIC8vIDE2Yml0IGZ1bmM9JXAgIVxuIiwgCisJCSh1bnNpZ25lZCBpbnQpIGZ1bmMpOwogCVB1c2hPbjE2KCBDQUxMQkFDS19TSVpFX1dPUkQsIGh3bmQgKTsKIAlQdXNoT24xNiggQ0FMTEJBQ0tfU0laRV9XT1JELCBtZXNzYWdlICk7CiAJUHVzaE9uMTYoIENBTExCQUNLX1NJWkVfV09SRCwgd1BhcmFtICk7CkBAIC0yMDQsNyArMjA2LDggQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLQlkcHJpbnRmX2NhbGxiYWNrKHN0ZGRlYiwgIkNhbGxXaW5kb3dQcm9jIC8vIDMyYml0IGZ1bmM9JTA4WCAhXG4iLCBmdW5jKTsKKwlkcHJpbnRmX2NhbGxiYWNrKHN0ZGRlYiwgIkNhbGxXaW5kb3dQcm9jIC8vIDMyYml0IGZ1bmM9JTA4WCAhXG4iLAorCQkodW5zaWduZWQgaW50KSBmdW5jKTsKIAlyZXR1cm4gKCpmdW5jKShod25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgfQogfQpAQCAtMzE5LDExICszMjIsMTIgQEAKIAogCQltZW1jcHkgKHN0YWNrMTYsIHNiIC0+IHN0YWNrX3BhcnQsIFNUQUNLX0RFUFRIXzE2KTsKIAkJZHByaW50Zl9jYXRjaCAoc3RkZGViLCAiQmVlbiB0aHJvd24gaGVyZTogJWQsIHJldHZhbCA9ICVkXG4iLCAKLQkJCXNiLCByZXR2YWwpOworCQkJKGludCkgc2IsIChpbnQpIHJldHZhbCk7CiAJCWZyZWUgKCh2b2lkICopIHNiKTsKIAkJcmV0dXJuIChyZXR2YWwpOwogCX0gZWxzZSB7Ci0JCWRwcmludGZfY2F0Y2ggKHN0ZGRlYiwgIldpbGwgc29tdGltZSBnZXQgdGhyb3duIGhlcmU6ICVkXG4iLCBzYik7CisJCWRwcmludGZfY2F0Y2ggKHN0ZGRlYiwgIldpbGwgc29tdGltZSBnZXQgdGhyb3duIGhlcmU6ICVkXG4iLCAKKwkJCShpbnQpIHNiKTsKIAkJcmV0dXJuIChyZXR2YWwpOwogCX0KIH0KQEAgLTMzMSw3ICszMzUsNyBAQAogdm9pZCBUaHJvdyAoTFBDQVRDSEJVRiBjYnVmLCBpbnQgdmFsKQogewogCXNiID0gKigoc3RydWN0IHNwZWNpYWxfYnVmZmVyICoqKWNidWYpOwotCWRwcmludGZfY2F0Y2ggKHN0ZGRlYiwgIlRocm93aW5nIHRvOiAlZFxuIiwgc2IpOworCWRwcmludGZfY2F0Y2ggKHN0ZGRlYiwgIlRocm93aW5nIHRvOiAlZFxuIiwgKGludCkgc2IpOwogCWxvbmdqbXAgKHNiIC0+IGJ1ZmZlciwgdmFsKTsKIH0KICNlbmRpZiAvKiAhV0lORUxJQiAqLwpkaWZmIC0tZ2l0IGEvaWYxNjMyL2dkaS5zcGVjIGIvaWYxNjMyL2dkaS5zcGVjCmluZGV4IDdlYjdlYmUuLjQ1ZjVjOTQgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9nZGkuc3BlYworKysgYi9pZjE2MzIvZ2RpLnNwZWMKQEAgLTEyOSw3ICsxMjksNyBAQAogIzEyMSBwYXNjYWwgRGVhdGgKICMxMjIgcGFzY2FsIFJlU3VyUmVjdGlvbgogMTIzIHBhc2NhbDE2IFBsYXlNZXRhRmlsZSh3b3JkIHdvcmQpIFBsYXlNZXRhRmlsZSgxIDIpCi0jMTI0IHBhc2NhbCBHZXRNZXRhRmlsZQorMTI0IHBhc2NhbDE2IEdldE1ldGFGaWxlKHB0cikgR2V0TWV0YUZpbGUoMSkKIDEyNSBwYXNjYWwxNiBDcmVhdGVNZXRhRmlsZShwdHIpIENyZWF0ZU1ldGFGaWxlKDEpCiAxMjYgcGFzY2FsMTYgQ2xvc2VNZXRhRmlsZSh3b3JkKSBDbG9zZU1ldGFGaWxlKDEpCiAxMjcgcGFzY2FsMTYgRGVsZXRlTWV0YUZpbGUod29yZCkgRGVsZXRlTWV0YUZpbGUoMSkKZGlmZiAtLWdpdCBhL2lmMTYzMi9yZWxheS5jIGIvaWYxNjMyL3JlbGF5LmMKaW5kZXggODAzNjY5Ny4uMDExOGExMiAxMDA2NDQKLS0tIGEvaWYxNjMyL3JlbGF5LmMKKysrIGIvaWYxNjMyL3JlbGF5LmMKQEAgLTEsNSArMSw3IEBACisvKgogc3RhdGljIGNoYXIgUkNTSWRbXSA9ICIkSWQ6IHJlbGF5LmMsdiAxLjIgMTk5My8wNy8wNCAwNDowNDoyMSByb290IEV4cCByb290ICQiOwogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBSb2JlcnQgSi4gQW1zdGFkdCwgMTk5MyI7CisqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTgsMjEgKzEwLDI5IEBACiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CiAjaWZkZWYgbGludXgKICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbGR0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VnbWVudC5oPgogI2VuZGlmCi0jaW5jbHVkZSA8ZXJybm8uaD4KIAogI2luY2x1ZGUgIm5lZXhlLmgiCiAjaW5jbHVkZSAic2VnbWVtLmgiCiAjaW5jbHVkZSAicHJvdG90eXBlcy5oIgogI2luY2x1ZGUgImRsbHMuaCIKICNpbmNsdWRlICJvcHRpb25zLmgiCisjaW5jbHVkZSAic3RkZGVidWcuaCIKKy8qICNkZWZpbmUgREVCVUdfUkVMQVkgLyogKi8KKy8qICNkZWZpbmUgREVCVUdfU1RBQ0sgLyogKi8KKyNpbmNsdWRlICJkZWJ1Zy5oIgogCi0jZGVmaW5lIERFQlVHX1JFTEFZIC8qICovCisjaWYgMAorLyogTWFrZSBtYWtlX2RlYnVnIHRoaW5rIHRoZXNlIHdlcmUgcmVhbGx5IHVzZWQgKi8KK2RwcmludGZfcmVsYXkKK2RwcmludGZfc3RhY2sKKyNlbmRpZgogCiAjaWZkZWYgV0lORUxJQgogI2RlZmluZSBXaW5lTGliU2tpcCh4KSAwCkBAIC0xMDMsMTEgKzExMyw5IEBACiAgICAgb3JkaW5hbCA9IGZ1bmNfbnVtICYgMHhmZmZmOwogICAgIGRsbF9wICAgPSAmZGxsX2J1aWx0aW5fdGFibGVbZGxsX2lkXS5kbGxfdGFibGVbb3JkaW5hbF07CiAKLSNpZmRlZiBERUJVR19SRUxBWQotICAgIGlmIChPcHRpb25zLnJlbGF5X2RlYnVnKQorICAgIGlmIChkZWJ1Z2dpbmdfcmVsYXkpCiAgICAgewogCXVuc2lnbmVkIGludCAqcmV0X2FkZHI7Ci0JdW5zaWduZWQgc2hvcnQgKnN0YWNrX3A7CiAJCiAJcmV0X2FkZHIgPSAodW5zaWduZWQgaW50ICopICgoY2hhciAqKSBzZWdfb2ZmICsgMHgxNCk7CiAJcHJpbnRmKCJDYWxsICVzICglcy4lZCksIHN0YWNrPSUwNHg6JTA0eCwgIiwKQEAgLTExOSwxOCArMTI3LDE4IEBACiAJICAgICAgIElGMTYzMl9TYXZlZDE2X2VzcCwgSUYxNjMyX1NhdmVkMTZfZWJwLAogCSAgICAgICBJRjE2MzJfU2F2ZWQxNl9zcyk7CiAKLSNpZmRlZiBERUJVR19TVEFDSwotCXN0YWNrX3AgPSAodW5zaWduZWQgc2hvcnQgKikgc2VnX29mZjsKLQlmb3IgKGkgPSAwOyBpIDwgMjQ7IGkrKywgc3RhY2tfcCsrKQotCXsKLSAgICAgICAgICAgIHByaW50ZigiJTA0eCAiLCAqc3RhY2tfcCk7Ci0JICAgIGlmICgoaSAmIDcpID09IDcpCi0JCXByaW50ZigiXG4iKTsKKwlpZihkZWJ1Z2dpbmdfc3RhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpzdGFja19wID0gKHVuc2lnbmVkIHNob3J0ICopIHNlZ19vZmY7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjQ7IGkrKywgc3RhY2tfcCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigiJTA0eCAiLCAqc3RhY2tfcCk7CisgICAgICAgICAgICAgICAgaWYgKChpICYgNykgPT0gNykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogCX0KLQlwcmludGYoIlxuIik7Ci0jZW5kaWYgLyogREVCVUdfU1RBQ0sgKi8KLSAgICB9Ci0jZW5kaWYgLyogREVCVUdfUkVMQVkgKi8KKyAgICB9IC8qIERFQlVHX1JFTEFZICovCiAKICAgICAvKgogICAgICAqIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgaGFuZGxlciBkZWZpbmVkIGZvciB0aGlzIGNhbGwuCkBAIC0yMDYsMTUgKzIxNCwxMyBAQAogCQkJICBhcmdfdGFibGVbMTJdLCBhcmdfdGFibGVbMTNdLCBhcmdfdGFibGVbMTRdLCAKIAkJCSAgYXJnX3RhYmxlWzE1XSk7CiAKLSNpZmRlZiBERUJVR19SRUxBWQotICAgIGlmIChPcHRpb25zLnJlbGF5X2RlYnVnKQorICAgIGlmIChkZWJ1Z2dpbmdfcmVsYXkpCiAgICAgewogCXByaW50ZigiUmV0dXJuaW5nICUwOHggZnJvbSAlcyAoJXMuJWQpXG4iLAogCSAgICAgICByZXRfdmFsLAogCSAgICAgICBkbGxfcC0+ZXhwb3J0X25hbWUsCiAJICAgICAgIGRsbF9idWlsdGluX3RhYmxlW2RsbF9pZF0uZGxsX25hbWUsIG9yZGluYWwpOwogICAgIH0KLSNlbmRpZgogCiAgICAgU3RhY2sxNkZyYW1lID0gc2F2ZWRfU3RhY2sxNkZyYW1lOwogICAgIHJldHVybiByZXRfdmFsOwpkaWZmIC0tZ2l0IGEvaWYxNjMyL3dpbnNvY2suc3BlYyBiL2lmMTYzMi93aW5zb2NrLnNwZWMKaW5kZXggODRhZGUxZC4uMTI5MTNmMiAxMDA2NDQKLS0tIGEvaWYxNjMyL3dpbnNvY2suc3BlYworKysgYi9pZjE2MzIvd2luc29jay5zcGVjCkBAIC03LDY1ICs3LDYxIEBACiBpZAk5CiBsZW5ndGgJMTU1CiAKLTEgICBwYXNjYWwgYWNjZXB0KHdvcmQgcHRyIHB0cikgV2luc29ja19hY2NlcHQoMSAyIDMpCi0yICAgcGFzY2FsIGJpbmQod29yZCBwdHIgd29yZCkgV2luc29ja19iaW5kKDEgMiAzKQotMyAgIHBhc2NhbCBjbG9zZXNvY2tldCh3b3JkKSBXaW5zb2NrX2Nsb3Nlc29ja2V0KDEpCi00ICAgcGFzY2FsIGNvbm5lY3Qod29yZCBwdHIgd29yZCkgV2luc29ja19jb25uZWN0KDEgMiAzKQotNSAgIHBhc2NhbCBnZXRwZWVybmFtZSh3b3JkIHB0ciBwdHIpIFdpbnNvY2tfZ2V0cGVlcm5hbWUoMSAyIDMpCi02ICAgcGFzY2FsIGdldHNvY2tuYW1lKHdvcmQgcHRyIHB0cikgV2luc29ja19nZXRzb2NrbmFtZSgxIDIgMykKLTcgICBwYXNjYWwgZ2V0c29ja29wdCh3b3JkIHdvcmQgd29yZCBwdHIgcHRyKQotICAgICAgICAgICBXaW5zb2NrX2dldHNvY2tvcHQoMSAyIDMgNCA1KQotOCAgIHBhc2NhbCBodG9ubChsb25nKSBXaW5zb2NrX2h0b25sKDEpCi05ICAgcGFzY2FsIGh0b25zKHdvcmQpIFdpbnNvY2tfaHRvbnMoMSkKLTEwICBwYXNjYWwgaW5ldF9hZGRyKGxvbmcpIFdpbnNvY2tfaW5ldF9hZGRyKDEpCi0xMSAgcGFzY2FsIGluZXRfbnRvYShsb25nKSBXaW5zb2NrX2luZXRfbnRvYSgxKQotMTIgIHBhc2NhbCBpb2N0bHNvY2tldCh3b3JkIGxvbmcgcHRyKSBXaW5zb2NrX2lvY3Rsc29ja2V0KDEgMiAzKQotMTMgIHBhc2NhbCBsaXN0ZW4od29yZCB3b3JkKSBXaW5zb2NrX2xpc3RlbigxIDIpCi0xNCAgcGFzY2FsIG50b2hsKGxvbmcpIFdpbnNvY2tfbnRvaGwoMSkKLTE1ICBwYXNjYWwgbnRvaHMod29yZCkgV2luc29ja19udG9ocygxKQotMTYgIHBhc2NhbCByZWN2KHdvcmQgcHRyIHdvcmQgd29yZCkgV2luc29ja19yZWN2KDEgMiAzIDQpCi0xNyAgcGFzY2FsIHJlY3Zmcm9tKHdvcmQgcHRyIHdvcmQgd29yZCBwdHIgcHRyKQotICAgICAgICAgICBXaW5zb2NrX3JlY3Zmcm9tKDEgMiAzIDQgNSA2KQotMTggIHBhc2NhbCBzZWxlY3Qod29yZCBwdHIgcHRyIHB0ciBwdHIgd29yZCkKLSAgICAgICAgICAgV2luc29ja19zZWxlY3QoMSAyIDMgNCA1IDYpCi0xOSAgcGFzY2FsIHNlbmQod29yZCBwdHIgd29yZCB3b3JkKSBXaW5zb2NrX3NlbmQoMSAyIDMgNCkKLTIwICBwYXNjYWwgc2VuZHRvKHdvcmQgcHRyIHdvcmQgd29yZCBwdHIgcHRyKQotICAgICAgICAgICBXaW5zb2NrX3NlbmR0bygxIDIgMyA0IDUgNikKLTIxICBwYXNjYWwgc2V0c29ja29wdCh3b3JkIHdvcmQgd29yZCBwdHIgd29yZCkKLSAgICAgICAgICAgV2luc29ja19zZXRzb2Nrb3B0KDEgMiAzIDQgNSkKLTIyICBwYXNjYWwgc2h1dGRvd24od29yZCB3b3JkKSBXaW5zb2NrX3NodXRkb3duKDEgMikKLTIzICBwYXNjYWwgc29ja2V0KHdvcmQgd29yZCB3b3JkKSBXaW5zb2NrX3NvY2tldCgxIDIgMykKLQotNTEgIHBhc2NhbCBnZXRob3N0YnlhZGRyKHB0ciB3b3JkIHdvcmQpIFdpbnNvY2tfZ2V0aG9zdGJ5YWRkcigxIDIgMykKLTUyICBwYXNjYWwgZ2V0aG9zdGJ5bmFtZShwdHIpIFdpbnNvY2tfZ2V0aG9zdGJ5bmFtZSgxKQotNTMgIHBhc2NhbCBnZXRwcm90b2J5bmFtZShwdHIpIFdpbnNvY2tfZ2V0cHJvdG9ieW5hbWUoMSkKLTU0ICBwYXNjYWwgZ2V0cHJvdG9ieW51bWJlcih3b3JkKSBXaW5zb2NrX2dldHByb3RvYnludW1iZXIoMSkKLTU1ICBwYXNjYWwgZ2V0c2VydmJ5bmFtZShwdHIgcHRyKSBXaW5zb2NrX2dldHNlcnZieW5hbWUoMSAyKQotNTYgIHBhc2NhbCBnZXRzZXJ2Ynlwb3J0KHdvcmQgcHRyKSBXaW5zb2NrX2dldHNlcnZieXBvcnQoMSAyKQotNTcgIHBhc2NhbCBnZXRob3N0bmFtZShwdHIgd29yZCkgV2luc29ja19nZXRob3N0bmFtZSgxIDIpCi0KLTEwMSBwYXNjYWwgV1NBQXN5bmNTZWxlY3Qod29yZCB3b3JkIHdvcmQgbG9uZykKLSAgICAgICAgICAgV1NBQXN5bmNTZWxlY3QoMSAyIDMgNCkKLTEwMiBwYXNjYWwgV1NBQXN5bmNHZXRIb3N0QnlBZGRyKHdvcmQgd29yZCBwdHIgd29yZCB3b3JkIHB0ciB3b3JkKQotICAgICAgICAgICBXU0FBc3luY0dldEhvc3RCeUFkZHIoMSAyIDMgNCA1IDYgNykKLTEwMyBwYXNjYWwgV1NBQXN5bmNHZXRIb3N0QnlOYW1lKHdvcmQgd29yZCBwdHIgcHRyIHdvcmQpCi0gICAgICAgICAgIFdTQUFzeW5jR2V0SG9zdEJ5TmFtZSgxIDIgMyA0IDUpCi0xMDQgcGFzY2FsIFdTQUFzeW5jR2V0UHJvdG9CeU51bWJlcih3b3JkIHdvcmQgd29yZCBwdHIgd29yZCkKLSAgICAgICAgICAgV1NBQXN5bmNHZXRQcm90b0J5TnVtYmVyKDEgMiAzIDQgNSkKLTEwNSBwYXNjYWwgV1NBQXN5bmNHZXRQcm90b0J5TmFtZSh3b3JkIHdvcmQgcHRyIHB0ciB3b3JkKQotICAgICAgICAgICBXU0FBc3luY0dldFByb3RvQnlOYW1lKDEgMiAzIDQgNSkKLTEwNiBwYXNjYWwgV1NBQXN5bmNHZXRTZXJ2QnlQb3J0KHdvcmQgd29yZCB3b3JkIHB0ciBwdHIgd29yZCkKLSAgICAgICAgICAgV1NBQXN5bmNHZXRTZXJ2QnlQb3J0KDEgMiAzIDQgNSA2KQotMTA3IHBhc2NhbCBXU0FBc3luY0dldFNlcnZCeU5hbWUod29yZCB3b3JkIHB0ciBwdHIgcHRyIHdvcmQpCi0gICAgICAgICAgIFdTQUFzeW5jR2V0U2VydkJ5TmFtZSgxIDIgMyA0IDUgNikKLTEwOCBwYXNjYWwgV1NBQ2FuY2VsQXN5bmNSZXF1ZXN0KHdvcmQpIFdTQUNhbmNlbEFzeW5jUmVxdWVzdCgxKQotMTA5IHBhc2NhbCBXU0FTZXRCbG9ja2luZ0hvb2soKSBXU0FTZXRCbG9ja2luZ0hvb2soKQotMTEwIHBhc2NhbCBXU0FVbmhvb2tCbG9ja2luZ0hvb2soKSBXU0FVbmhvb2tCbG9ja2luZ0hvb2soKQotMTExIHBhc2NhbCBXU0FHZXRMYXN0RXJyb3IoKSBXU0FHZXRMYXN0RXJyb3IoKQotMTEyIHBhc2NhbCBXU0FTZXRMYXN0RXJyb3Iod29yZCkgV1NBU2V0TGFzdEVycm9yKDEpCi0xMTMgcGFzY2FsIFdTQUNhbmNlbEJsb2NraW5nQ2FsbCgpIFdTQUNhbmNlbEJsb2NraW5nQ2FsbCgpCi0xMTQgcGFzY2FsIFdTQUlzQmxvY2tpbmcoKSBXU0FJc0Jsb2NraW5nKCkKLTExNSBwYXNjYWwgV1NBU3RhcnR1cCh3b3JkIHB0cikgV1NBU3RhcnR1cCgxIDIpCi0xMTYgcGFzY2FsIFdTQUNsZWFudXAoKSBXU0FDbGVhbnVwKCkKLQotMTUxIHBhc2NhbCBfX1dTQUZESXNTZXQod29yZCBwdHIpIFdTQUZESXNTZXQoMSAyKQorMSAgIHBhc2NhbDE2IGFjY2VwdCh3b3JkIHB0ciBwdHIpIFdJTlNPQ0tfYWNjZXB0KDEgMiAzKQorMiAgIHBhc2NhbDE2IGJpbmQod29yZCBwdHIgd29yZCkgV0lOU09DS19iaW5kKDEgMiAzKQorMyAgIHBhc2NhbDE2IGNsb3Nlc29ja2V0KHdvcmQpIFdJTlNPQ0tfY2xvc2Vzb2NrZXQoMSkKKzQgICBwYXNjYWwxNiBjb25uZWN0KHdvcmQgcHRyIHdvcmQpIFdJTlNPQ0tfY29ubmVjdCgxIDIgMykKKzUgICBwYXNjYWwxNiBnZXRwZWVybmFtZSh3b3JkIHB0ciBwdHIpIFdJTlNPQ0tfZ2V0cGVlcm5hbWUoMSAyIDMpCis2ICAgcGFzY2FsMTYgZ2V0c29ja25hbWUod29yZCBwdHIgcHRyKSBXSU5TT0NLX2dldHNvY2tuYW1lKDEgMiAzKQorNyAgIHBhc2NhbDE2IGdldHNvY2tvcHQod29yZCB3b3JkIHdvcmQgcHRyIHB0cikgV0lOU09DS19nZXRzb2Nrb3B0KDEgMiAzIDQgNSkKKzggICBwYXNjYWwgICBodG9ubChsb25nKSBXSU5TT0NLX2h0b25sKDEpCis5ICAgcGFzY2FsMTYgaHRvbnMod29yZCkgV0lOU09DS19odG9ucygxKQorMTAgIHBhc2NhbCAgIGluZXRfYWRkcihsb25nKSBXSU5TT0NLX2luZXRfYWRkcigxKQorMTEgIHBhc2NhbCAgIGluZXRfbnRvYShsb25nKSBXSU5TT0NLX2luZXRfbnRvYSgxKQorMTIgIHBhc2NhbDE2IGlvY3Rsc29ja2V0KHdvcmQgbG9uZyBwdHIpIFdJTlNPQ0tfaW9jdGxzb2NrZXQoMSAyIDMpCisxMyAgcGFzY2FsMTYgbGlzdGVuKHdvcmQgd29yZCkgV0lOU09DS19saXN0ZW4oMSAyKQorMTQgIHBhc2NhbCAgIG50b2hsKGxvbmcpIFdJTlNPQ0tfbnRvaGwoMSkKKzE1ICBwYXNjYWwxNiBudG9ocyh3b3JkKSBXSU5TT0NLX250b2hzKDEpCisxNiAgcGFzY2FsMTYgcmVjdih3b3JkIHB0ciB3b3JkIHdvcmQpIFdJTlNPQ0tfcmVjdigxIDIgMyA0KQorMTcgIHBhc2NhbDE2IHJlY3Zmcm9tKHdvcmQgcHRyIHdvcmQgd29yZCBwdHIgcHRyKQorICAgICAgICAgICAgIFdJTlNPQ0tfcmVjdmZyb20oMSAyIDMgNCA1IDYpCisxOCAgcGFzY2FsMTYgc2VsZWN0KHdvcmQgcHRyIHB0ciBwdHIgcHRyIHdvcmQpCisgICAgICAgICAgICAgV0lOU09DS19zZWxlY3QoMSAyIDMgNCA1IDYpCisxOSAgcGFzY2FsMTYgc2VuZCh3b3JkIHB0ciB3b3JkIHdvcmQpIFdJTlNPQ0tfc2VuZCgxIDIgMyA0KQorMjAgIHBhc2NhbDE2IHNlbmR0byh3b3JkIHB0ciB3b3JkIHdvcmQgcHRyIHB0cikKKyAgICAgICAgICAgICBXSU5TT0NLX3NlbmR0bygxIDIgMyA0IDUgNikKKzIxICBwYXNjYWwxNiBzZXRzb2Nrb3B0KHdvcmQgd29yZCB3b3JkIHB0ciB3b3JkKQorICAgICAgICAgICAgIFdJTlNPQ0tfc2V0c29ja29wdCgxIDIgMyA0IDUpCisyMiAgcGFzY2FsMTYgc2h1dGRvd24od29yZCB3b3JkKSBXSU5TT0NLX3NodXRkb3duKDEgMikKKzIzICBwYXNjYWwxNiBzb2NrZXQod29yZCB3b3JkIHdvcmQpIFdJTlNPQ0tfc29ja2V0KDEgMiAzKQorNTEgIHBhc2NhbCAgIGdldGhvc3RieWFkZHIocHRyIHdvcmQgd29yZCkgV0lOU09DS19nZXRob3N0YnlhZGRyKDEgMiAzKQorNTIgIHBhc2NhbCAgIGdldGhvc3RieW5hbWUocHRyKSBXSU5TT0NLX2dldGhvc3RieW5hbWUoMSkKKzUzICBwYXNjYWwgICBnZXRwcm90b2J5bmFtZShwdHIpIFdJTlNPQ0tfZ2V0cHJvdG9ieW5hbWUoMSkKKzU0ICBwYXNjYWwgICBnZXRwcm90b2J5bnVtYmVyKHdvcmQpIFdJTlNPQ0tfZ2V0cHJvdG9ieW51bWJlcigxKQorNTUgIHBhc2NhbCAgIGdldHNlcnZieW5hbWUocHRyIHB0cikgV0lOU09DS19nZXRzZXJ2YnluYW1lKDEgMikKKzU2ICBwYXNjYWwgICBnZXRzZXJ2Ynlwb3J0KHdvcmQgcHRyKSBXSU5TT0NLX2dldHNlcnZieXBvcnQoMSAyKQorNTcgIHBhc2NhbCAgIGdldGhvc3RuYW1lKHB0ciB3b3JkKSBXSU5TT0NLX2dldGhvc3RuYW1lKDEgMikKKzEwMSBwYXNjYWwxNiBXU0FBc3luY1NlbGVjdCh3b3JkIHdvcmQgd29yZCBsb25nKQorICAgICAgICAgICAgIFdTQUFzeW5jU2VsZWN0KDEgMiAzIDQpCisxMDIgcGFzY2FsMTYgV1NBQXN5bmNHZXRIb3N0QnlBZGRyKHdvcmQgd29yZCBwdHIgd29yZCB3b3JkIHB0ciB3b3JkKQorICAgICAgICAgICAgIFdTQUFzeW5jR2V0SG9zdEJ5QWRkcigxIDIgMyA0IDUgNiA3KQorMTAzIHBhc2NhbDE2IFdTQUFzeW5jR2V0SG9zdEJ5TmFtZSh3b3JkIHdvcmQgcHRyIHB0ciB3b3JkKQorICAgICAgICAgICAgIFdTQUFzeW5jR2V0SG9zdEJ5TmFtZSgxIDIgMyA0IDUpCisxMDQgcGFzY2FsMTYgV1NBQXN5bmNHZXRQcm90b0J5TnVtYmVyKHdvcmQgd29yZCB3b3JkIHB0ciB3b3JkKQorICAgICAgICAgICAgIFdTQUFzeW5jR2V0UHJvdG9CeU51bWJlcigxIDIgMyA0IDUpCisxMDUgcGFzY2FsMTYgV1NBQXN5bmNHZXRQcm90b0J5TmFtZSh3b3JkIHdvcmQgcHRyIHB0ciB3b3JkKQorICAgICAgICAgICAgIFdTQUFzeW5jR2V0UHJvdG9CeU5hbWUoMSAyIDMgNCA1KQorMTA2IHBhc2NhbDE2IFdTQUFzeW5jR2V0U2VydkJ5UG9ydCh3b3JkIHdvcmQgd29yZCBwdHIgcHRyIHdvcmQpCisgICAgICAgICAgICAgV1NBQXN5bmNHZXRTZXJ2QnlQb3J0KDEgMiAzIDQgNSA2KQorMTA3IHBhc2NhbDE2IFdTQUFzeW5jR2V0U2VydkJ5TmFtZSh3b3JkIHdvcmQgcHRyIHB0ciBwdHIgd29yZCkKKyAgICAgICAgICAgICBXU0FBc3luY0dldFNlcnZCeU5hbWUoMSAyIDMgNCA1IDYpCisxMDggcGFzY2FsMTYgV1NBQ2FuY2VsQXN5bmNSZXF1ZXN0KHdvcmQpIFdTQUNhbmNlbEFzeW5jUmVxdWVzdCgxKQorMTA5IHBhc2NhbDE2IFdTQVNldEJsb2NraW5nSG9vaygpIFdTQVNldEJsb2NraW5nSG9vaygpCisxMTAgcGFzY2FsMTYgV1NBVW5ob29rQmxvY2tpbmdIb29rKCkgV1NBVW5ob29rQmxvY2tpbmdIb29rKCkKKzExMSBwYXNjYWwxNiBXU0FHZXRMYXN0RXJyb3IoKSBXU0FHZXRMYXN0RXJyb3IoKQorMTEyIHBhc2NhbCAgIFdTQVNldExhc3RFcnJvcih3b3JkKSBXU0FTZXRMYXN0RXJyb3IoMSkKKzExMyBwYXNjYWwxNiBXU0FDYW5jZWxCbG9ja2luZ0NhbGwoKSBXU0FDYW5jZWxCbG9ja2luZ0NhbGwoKQorMTE0IHBhc2NhbDE2IFdTQUlzQmxvY2tpbmcoKSBXU0FJc0Jsb2NraW5nKCkKKzExNSBwYXNjYWwgICBXU0FTdGFydHVwKHdvcmQgcHRyKSBXU0FTdGFydHVwKDEgMikKKzExNiBwYXNjYWwgICBXU0FDbGVhbnVwKCkgV1NBQ2xlYW51cCgpCisxNTEgcGFzY2FsMTYgX19XU0FGRElzU2V0KHdvcmQgcHRyKSBXU0FGRElzU2V0KDEgMikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXJjaC5oIGIvaW5jbHVkZS9hcmNoLmgKaW5kZXggYzkyOWEzZS4uYWQxODY1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hcmNoLmgKKysrIGIvaW5jbHVkZS9hcmNoLmgKQEAgLTE5LDYgKzE5LDYgQEAKICNkZWZpbmUgQ09OVl9DSEFSX1RPX0xPTkcoYSkgKGEpCiAjZGVmaW5lIENPTlZfU0hPUlRfVE9fTE9ORyhhKSAoYSkKIAotI2RlZmluZSBDT05WX0JJVE1BUElORk8KLSNkZWZpbmUgQ09OVl9CSVRNQVBDT1JFSEVBREVSCisjZGVmaW5lIENPTlZfQklUTUFQSU5GTyhhKQkJLyogKi8KKyNkZWZpbmUgQ09OVl9CSVRNQVBDT1JFSEVBREVSKGEpCS8qICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXRvbS5oIGIvaW5jbHVkZS9hdG9tLmgKaW5kZXggOTE4Mjc2OS4uMDMzNjgzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hdG9tLmgKKysrIGIvaW5jbHVkZS9hdG9tLmgKQEAgLTksNiArOSw4IEBACiAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAKK2V4dGVybiBCT09MIEFUT01fSW5pdCh2b2lkKTsKKwogdHlwZWRlZiBzdHJ1Y3QKIHsKICAgICBIQU5ETEUgICAgICBuZXh0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9iaXRtYXAuaCBiL2luY2x1ZGUvYml0bWFwLmgKaW5kZXggOWEyYWNmYS4uMjgwOTQ2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9iaXRtYXAuaAorKysgYi9pbmNsdWRlL2JpdG1hcC5oCkBAIC0xMCw2ICsxMCw4IEBACiAjaW5jbHVkZSA8WDExL1hsaWIuaD4KICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAKK2V4dGVybiBCT09MIEJJVE1BUF9Jbml0KHZvaWQpOworCiAgIC8qIEdDcyB1c2VkIGZvciBCJlcgYW5kIGNvbG9yIGJpdG1hcCBvcGVyYXRpb25zICovCiBleHRlcm4gR0MgQklUTUFQX21vbm9HQywgQklUTUFQX2NvbG9yR0M7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY2FsbGJhY2suaCBiL2luY2x1ZGUvY2FsbGJhY2suaAppbmRleCBiYTg0NTczLi4xODIwNmM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NhbGxiYWNrLmgKKysrIGIvaW5jbHVkZS9jYWxsYmFjay5oCkBAIC0xNiw1ICsxNiw2IEBACiBleHRlcm4gaW50IENhbGxUbzE2KHVuc2lnbmVkIGludCBjc2lwLCB1bnNpZ25lZCBzaG9ydCBkcyk7CiBleHRlcm4gaW50IENhbGxCYWNrMTYodm9pZCAqZnVuYywgaW50IG5fYXJncywgLi4uKTsKIAorZXh0ZXJuIEJPT0wgQ2FsbEdyYXlTdHJpbmdQcm9jKEZBUlBST0MgZnVuYywgSERDIGhkYywgTFBBUkFNIGxQYXJhbSwgSU5UIGNjaCk7CiAKICNlbmRpZiAvKiBDQUxMQkFDS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NsaXBib2FyZC5oIGIvaW5jbHVkZS9jbGlwYm9hcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDJlMzE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jbGlwYm9hcmQuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19XSU5FX0NMSVBCT0FSRF9ICisjZGVmaW5lIF9fV0lORV9DTElQQk9BUkRfSAorCitleHRlcm4gdm9pZCBDTElQQk9BUkRfUmVhZFNlbGVjdGlvbihXaW5kb3cgdyxBdG9tIHByb3ApOwordm9pZCBDTElQQk9BUkRfUmVsZWFzZVNlbGVjdGlvbihIV05EIGh3bmQpOworCisjZW5kaWYgLyogX19XSU5FX0NMSVBCT0FSRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbG9yLmggYi9pbmNsdWRlL2NvbG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmOWZkNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29sb3IuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9fV0lORV9DT0xPUl9ICisjZGVmaW5lIF9fV0lORV9DT0xPUl9ICisKKyNpbmNsdWRlICJnZGkuaCIKKworZXh0ZXJuIEhQQUxFVFRFIENPTE9SX0luaXQodm9pZCk7CitleHRlcm4gaW50IENPTE9SX1RvUGh5c2ljYWwoIERDICpkYywgQ09MT1JSRUYgY29sb3IgKTsKK2V4dGVybiB2b2lkIENPTE9SX1NldE1hcHBpbmcoIERDICpkYywgSEFORExFLCBXT1JEICk7CitleHRlcm4gQk9PTCBDT0xPUl9Jc1NvbGlkKCBDT0xPUlJFRiBjb2xvciApOworCitleHRlcm4gQ29sb3JtYXAgQ09MT1JfV2luQ29sb3JtYXA7CitleHRlcm4gaW50IENPTE9SX21hcEVHQVBpeGVsWzE2XTsKKworI2VuZGlmIC8qIF9fV0lORV9DT0xPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbW0uaCBiL2luY2x1ZGUvY29tbS5oCmluZGV4IDc4NWE3YjcuLmFmMmQzZjAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbW0uaAorKysgYi9pbmNsdWRlL2NvbW0uaApAQCAtMSwxMyArMSw2IEBACi0vKgotICogQ29tbXVuaWNhdGlvbnMgaGVhZGVyCi0gKgotICogOTMgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKLSAqLwotCiAjaWZuZGVmIENPTU1fSAogI2RlZmluZSBDT01NX0gKIAotCiAjZGVmaW5lIE1BWF9QT1JUUyAgIDE2CiAKIHN0cnVjdCBEb3NEZXZpY2VTdHJ1Y3QgewpAQCAtMTksNCArMTIsNyBAQAogICAgIGludCBiYXVkcmF0ZTsKIH07CiAKK2V4dGVybiB2b2lkIENvbW1fSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIENvbW1fRGVJbml0KHZvaWQpOworCiAjZW5kaWYgIC8qIENPTU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jdXJzb3IuaCBiL2luY2x1ZGUvY3Vyc29yLmgKaW5kZXggYzcwZGY5MC4uYTY1Zjk2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jdXJzb3IuaAorKysgYi9pbmNsdWRlL2N1cnNvci5oCkBAIC00LDYgKzQsOCBAQAogICogQ29weXJpZ2h0ICBNYXJ0aW4gQXlvdHRlLCAxOTkzCiAgKgogICovCisjaWZuZGVmIF9fV0lORV9DVVJTT1JfSAorI2RlZmluZSBfX1dJTkVfQ1VSU09SX0gKIAogdHlwZWRlZiBzdHJ1Y3QgewogCUJZVEUJV2lkdGg7CkBAIC0yNSwzICsyNyw2IEBACiAJQ3Vyc29yCQl4Y3Vyc29yOwogCX0gQ1VSU09SQUxMT0M7CiAKK2V4dGVybiB2b2lkIENVUlNPUl9TZXRXaW5DdXJzb3IoIEhXTkQgaHduZCwgSENVUlNPUiBoY3Vyc29yICk7ICAgLyogY3Vyc29yLmMgKi8KKworI2VuZGlmIC8qIF9fV0lORV9DVVJTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kYy5oIGIvaW5jbHVkZS9kYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MjNmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RjLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfX1dJTkVfRENfSAorI2RlZmluZSBfX1dJTkVfRENfSAorCisjaW5jbHVkZSAiZ2RpLmgiCisKK2V4dGVybiB2b2lkIERDX0luaXREQyggSERDIGhkYyApOworZXh0ZXJuIGludCBEQ19TZXR1cEdDRm9yQnJ1c2goIERDICogZGMgKTsKK2V4dGVybiBpbnQgRENfU2V0dXBHQ0ZvclBlbiggREMgKiBkYyApOworZXh0ZXJuIGludCBEQ19TZXR1cEdDRm9yVGV4dCggREMgKiBkYyApOworCitleHRlcm4gY29uc3QgaW50IERDX1hST1BmdW5jdGlvbltdOworCisjZW5kaWYgLyogX19XSU5FX0RDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZGVidWcuaCBiL2luY2x1ZGUvZGVidWcuaAppbmRleCA2YmRjMTMyLi42MTcxM2NlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RlYnVnLmgKKysrIGIvaW5jbHVkZS9kZWJ1Zy5oCkBAIC0xLDcgKzEsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKICNkZWZpbmUgc3RkZGViIHN0ZG91dAotI2RlZmluZSBzdGRuaW1wIHN0ZGVycgorI2RlZmluZSBzdGRuaW1wIHN0ZG91dAogCiAvKiBEbyBub3QgcmVtb3ZlIHRoaXMgbGluZSBvciBjaGFuZ2UgYW55dGhpbmcgYmVsb3cgdGhpcyBsaW5lICovCiAKQEAgLTU5LDkgKzU5LDExIEBACiAjdW5kZWYgREVCVUdfUFJPUAogI3VuZGVmIERFQlVHX1JFRwogI3VuZGVmIERFQlVHX1JFR0lPTgorI3VuZGVmIERFQlVHX1JFTEFZCiAjdW5kZWYgREVCVUdfUkVTT1VSQ0UKICN1bmRlZiBERUJVR19TQ1JPTEwKICN1bmRlZiBERUJVR19TRUxFQ1RPUlMKKyN1bmRlZiBERUJVR19TVEFDSwogI3VuZGVmIERFQlVHX1NUUkVTUwogI3VuZGVmIERFQlVHX1NZU0NPTE9SCiAjdW5kZWYgREVCVUdfVEFTSwpAQCAtMTI2LDkgKzEyOCwxMSBAQAogI2RlZmluZSBERUJVR19QUk9QCiAjZGVmaW5lIERFQlVHX1JFRwogI2RlZmluZSBERUJVR19SRUdJT04KKyNkZWZpbmUgREVCVUdfUkVMQVkKICNkZWZpbmUgREVCVUdfUkVTT1VSQ0UKICNkZWZpbmUgREVCVUdfU0NST0xMCiAjZGVmaW5lIERFQlVHX1NFTEVDVE9SUworI2RlZmluZSBERUJVR19TVEFDSwogI2RlZmluZSBERUJVR19TVFJFU1MKICNkZWZpbmUgREVCVUdfU1lTQ09MT1IKICNkZWZpbmUgREVCVUdfVEFTSwpAQCAtNDA3LDYgKzQxMSwxMSBAQAogI2Vsc2UKICAgICAwLAogI2VuZGlmCisjaWZkZWYgREVCVUdfUkVMQVkKKyAgICAxLAorI2Vsc2UKKyAgICAwLAorI2VuZGlmCiAjaWZkZWYgREVCVUdfUkVTT1VSQ0UKICAgICAxLAogI2Vsc2UKQEAgLTQyMiw2ICs0MzEsMTEgQEAKICNlbHNlCiAgICAgMCwKICNlbmRpZgorI2lmZGVmIERFQlVHX1NUQUNLCisgICAgMSwKKyNlbHNlCisgICAgMCwKKyNlbmRpZgogI2lmZGVmIERFQlVHX1NUUkVTUwogICAgIDEsCiAjZWxzZQpAQCAtNDcxLDY0MSArNDg1LDg1OSBAQAogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX2FjY2VsIGlmKGRlYnVnX21zZ19lbmFibGVkWzBdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19hY2NlbCBkZWJ1Z19tc2dfZW5hYmxlZFswXQogI2Vsc2UKICNpZmRlZiBERUJVR19BQ0NFTAogI2RlZmluZSBkcHJpbnRmX2FjY2VsIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2FjY2VsIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfYWNjZWwKKyNkZWZpbmUgZGVidWdnaW5nX2FjY2VsIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfYml0bWFwIGlmKGRlYnVnX21zZ19lbmFibGVkWzFdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19iaXRtYXAgZGVidWdfbXNnX2VuYWJsZWRbMV0KICNlbHNlCiAjaWZkZWYgREVCVUdfQklUTUFQCiAjZGVmaW5lIGRwcmludGZfYml0bWFwIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2JpdG1hcCAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2JpdG1hcAorI2RlZmluZSBkZWJ1Z2dpbmdfYml0bWFwIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfY2FsbGJhY2sgaWYoZGVidWdfbXNnX2VuYWJsZWRbMl0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2NhbGxiYWNrIGRlYnVnX21zZ19lbmFibGVkWzJdCiAjZWxzZQogI2lmZGVmIERFQlVHX0NBTExCQUNLCiAjZGVmaW5lIGRwcmludGZfY2FsbGJhY2sgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfY2FsbGJhY2sgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9jYWxsYmFjaworI2RlZmluZSBkZWJ1Z2dpbmdfY2FsbGJhY2sgMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9jYXJldCBpZihkZWJ1Z19tc2dfZW5hYmxlZFszXSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfY2FyZXQgZGVidWdfbXNnX2VuYWJsZWRbM10KICNlbHNlCiAjaWZkZWYgREVCVUdfQ0FSRVQKICNkZWZpbmUgZHByaW50Zl9jYXJldCBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19jYXJldCAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2NhcmV0CisjZGVmaW5lIGRlYnVnZ2luZ19jYXJldCAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX2NhdGNoIGlmKGRlYnVnX21zZ19lbmFibGVkWzRdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19jYXRjaCBkZWJ1Z19tc2dfZW5hYmxlZFs0XQogI2Vsc2UKICNpZmRlZiBERUJVR19DQVRDSAogI2RlZmluZSBkcHJpbnRmX2NhdGNoIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2NhdGNoIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfY2F0Y2gKKyNkZWZpbmUgZGVidWdnaW5nX2NhdGNoIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfY2RhdWRpbyBpZihkZWJ1Z19tc2dfZW5hYmxlZFs1XSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfY2RhdWRpbyBkZWJ1Z19tc2dfZW5hYmxlZFs1XQogI2Vsc2UKICNpZmRlZiBERUJVR19DREFVRElPCiAjZGVmaW5lIGRwcmludGZfY2RhdWRpbyBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19jZGF1ZGlvIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfY2RhdWRpbworI2RlZmluZSBkZWJ1Z2dpbmdfY2RhdWRpbyAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX2NsYXNzIGlmKGRlYnVnX21zZ19lbmFibGVkWzZdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19jbGFzcyBkZWJ1Z19tc2dfZW5hYmxlZFs2XQogI2Vsc2UKICNpZmRlZiBERUJVR19DTEFTUwogI2RlZmluZSBkcHJpbnRmX2NsYXNzIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2NsYXNzIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfY2xhc3MKKyNkZWZpbmUgZGVidWdnaW5nX2NsYXNzIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfY2xpcGJvYXJkIGlmKGRlYnVnX21zZ19lbmFibGVkWzddKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19jbGlwYm9hcmQgZGVidWdfbXNnX2VuYWJsZWRbN10KICNlbHNlCiAjaWZkZWYgREVCVUdfQ0xJUEJPQVJECiAjZGVmaW5lIGRwcmludGZfY2xpcGJvYXJkIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2NsaXBib2FyZCAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2NsaXBib2FyZAorI2RlZmluZSBkZWJ1Z2dpbmdfY2xpcGJvYXJkIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfY2xpcHBpbmcgaWYoZGVidWdfbXNnX2VuYWJsZWRbOF0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2NsaXBwaW5nIGRlYnVnX21zZ19lbmFibGVkWzhdCiAjZWxzZQogI2lmZGVmIERFQlVHX0NMSVBQSU5HCiAjZGVmaW5lIGRwcmludGZfY2xpcHBpbmcgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfY2xpcHBpbmcgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9jbGlwcGluZworI2RlZmluZSBkZWJ1Z2dpbmdfY2xpcHBpbmcgMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9jb21ibyBpZihkZWJ1Z19tc2dfZW5hYmxlZFs5XSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfY29tYm8gZGVidWdfbXNnX2VuYWJsZWRbOV0KICNlbHNlCiAjaWZkZWYgREVCVUdfQ09NQk8KICNkZWZpbmUgZHByaW50Zl9jb21ibyBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19jb21ibyAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2NvbWJvCisjZGVmaW5lIGRlYnVnZ2luZ19jb21ibyAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX2NvbW0gaWYoZGVidWdfbXNnX2VuYWJsZWRbMTBdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19jb21tIGRlYnVnX21zZ19lbmFibGVkWzEwXQogI2Vsc2UKICNpZmRlZiBERUJVR19DT01NCiAjZGVmaW5lIGRwcmludGZfY29tbSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19jb21tIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfY29tbQorI2RlZmluZSBkZWJ1Z2dpbmdfY29tbSAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX2N1cnNvciBpZihkZWJ1Z19tc2dfZW5hYmxlZFsxMV0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2N1cnNvciBkZWJ1Z19tc2dfZW5hYmxlZFsxMV0KICNlbHNlCiAjaWZkZWYgREVCVUdfQ1VSU09SCiAjZGVmaW5lIGRwcmludGZfY3Vyc29yIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2N1cnNvciAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2N1cnNvcgorI2RlZmluZSBkZWJ1Z2dpbmdfY3Vyc29yIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfZGMgaWYoZGVidWdfbXNnX2VuYWJsZWRbMTJdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19kYyBkZWJ1Z19tc2dfZW5hYmxlZFsxMl0KICNlbHNlCiAjaWZkZWYgREVCVUdfREMKICNkZWZpbmUgZHByaW50Zl9kYyBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19kYyAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2RjCisjZGVmaW5lIGRlYnVnZ2luZ19kYyAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX2RpYWxvZyBpZihkZWJ1Z19tc2dfZW5hYmxlZFsxM10pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2RpYWxvZyBkZWJ1Z19tc2dfZW5hYmxlZFsxM10KICNlbHNlCiAjaWZkZWYgREVCVUdfRElBTE9HCiAjZGVmaW5lIGRwcmludGZfZGlhbG9nIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2RpYWxvZyAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2RpYWxvZworI2RlZmluZSBkZWJ1Z2dpbmdfZGlhbG9nIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfZGxsIGlmKGRlYnVnX21zZ19lbmFibGVkWzE0XSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfZGxsIGRlYnVnX21zZ19lbmFibGVkWzE0XQogI2Vsc2UKICNpZmRlZiBERUJVR19ETEwKICNkZWZpbmUgZHByaW50Zl9kbGwgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfZGxsIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfZGxsCisjZGVmaW5lIGRlYnVnZ2luZ19kbGwgMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9kb3NmcyBpZihkZWJ1Z19tc2dfZW5hYmxlZFsxNV0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2Rvc2ZzIGRlYnVnX21zZ19lbmFibGVkWzE1XQogI2Vsc2UKICNpZmRlZiBERUJVR19ET1NGUwogI2RlZmluZSBkcHJpbnRmX2Rvc2ZzIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2Rvc2ZzIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfZG9zZnMKKyNkZWZpbmUgZGVidWdnaW5nX2Rvc2ZzIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfZHJpdmVyIGlmKGRlYnVnX21zZ19lbmFibGVkWzE2XSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfZHJpdmVyIGRlYnVnX21zZ19lbmFibGVkWzE2XQogI2Vsc2UKICNpZmRlZiBERUJVR19EUklWRVIKICNkZWZpbmUgZHByaW50Zl9kcml2ZXIgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfZHJpdmVyIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfZHJpdmVyCisjZGVmaW5lIGRlYnVnZ2luZ19kcml2ZXIgMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9lZGl0IGlmKGRlYnVnX21zZ19lbmFibGVkWzE3XSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfZWRpdCBkZWJ1Z19tc2dfZW5hYmxlZFsxN10KICNlbHNlCiAjaWZkZWYgREVCVUdfRURJVAogI2RlZmluZSBkcHJpbnRmX2VkaXQgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfZWRpdCAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2VkaXQKKyNkZWZpbmUgZGVidWdnaW5nX2VkaXQgMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9lbnVtIGlmKGRlYnVnX21zZ19lbmFibGVkWzE4XSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfZW51bSBkZWJ1Z19tc2dfZW5hYmxlZFsxOF0KICNlbHNlCiAjaWZkZWYgREVCVUdfRU5VTQogI2RlZmluZSBkcHJpbnRmX2VudW0gZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfZW51bSAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2VudW0KKyNkZWZpbmUgZGVidWdnaW5nX2VudW0gMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9ldmVudCBpZihkZWJ1Z19tc2dfZW5hYmxlZFsxOV0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2V2ZW50IGRlYnVnX21zZ19lbmFibGVkWzE5XQogI2Vsc2UKICNpZmRlZiBERUJVR19FVkVOVAogI2RlZmluZSBkcHJpbnRmX2V2ZW50IGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2V2ZW50IDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfZXZlbnQKKyNkZWZpbmUgZGVidWdnaW5nX2V2ZW50IDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfZXhlYyBpZihkZWJ1Z19tc2dfZW5hYmxlZFsyMF0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2V4ZWMgZGVidWdfbXNnX2VuYWJsZWRbMjBdCiAjZWxzZQogI2lmZGVmIERFQlVHX0VYRUMKICNkZWZpbmUgZHByaW50Zl9leGVjIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2V4ZWMgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9leGVjCisjZGVmaW5lIGRlYnVnZ2luZ19leGVjIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfZmlsZSBpZihkZWJ1Z19tc2dfZW5hYmxlZFsyMV0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2ZpbGUgZGVidWdfbXNnX2VuYWJsZWRbMjFdCiAjZWxzZQogI2lmZGVmIERFQlVHX0ZJTEUKICNkZWZpbmUgZHByaW50Zl9maWxlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2ZpbGUgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9maWxlCisjZGVmaW5lIGRlYnVnZ2luZ19maWxlIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfZml4dXAgaWYoZGVidWdfbXNnX2VuYWJsZWRbMjJdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19maXh1cCBkZWJ1Z19tc2dfZW5hYmxlZFsyMl0KICNlbHNlCiAjaWZkZWYgREVCVUdfRklYVVAKICNkZWZpbmUgZHByaW50Zl9maXh1cCBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19maXh1cCAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2ZpeHVwCisjZGVmaW5lIGRlYnVnZ2luZ19maXh1cCAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX2ZvbnQgaWYoZGVidWdfbXNnX2VuYWJsZWRbMjNdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19mb250IGRlYnVnX21zZ19lbmFibGVkWzIzXQogI2Vsc2UKICNpZmRlZiBERUJVR19GT05UCiAjZGVmaW5lIGRwcmludGZfZm9udCBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19mb250IDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfZm9udAorI2RlZmluZSBkZWJ1Z2dpbmdfZm9udCAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX2dkaSBpZihkZWJ1Z19tc2dfZW5hYmxlZFsyNF0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2dkaSBkZWJ1Z19tc2dfZW5hYmxlZFsyNF0KICNlbHNlCiAjaWZkZWYgREVCVUdfR0RJCiAjZGVmaW5lIGRwcmludGZfZ2RpIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2dkaSAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2dkaQorI2RlZmluZSBkZWJ1Z2dpbmdfZ2RpIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfZ3JhcGhpY3MgaWYoZGVidWdfbXNnX2VuYWJsZWRbMjVdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19ncmFwaGljcyBkZWJ1Z19tc2dfZW5hYmxlZFsyNV0KICNlbHNlCiAjaWZkZWYgREVCVUdfR1JBUEhJQ1MKICNkZWZpbmUgZHByaW50Zl9ncmFwaGljcyBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19ncmFwaGljcyAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2dyYXBoaWNzCisjZGVmaW5lIGRlYnVnZ2luZ19ncmFwaGljcyAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX2hlYXAgaWYoZGVidWdfbXNnX2VuYWJsZWRbMjZdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19oZWFwIGRlYnVnX21zZ19lbmFibGVkWzI2XQogI2Vsc2UKICNpZmRlZiBERUJVR19IRUFQCiAjZGVmaW5lIGRwcmludGZfaGVhcCBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19oZWFwIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfaGVhcAorI2RlZmluZSBkZWJ1Z2dpbmdfaGVhcCAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX2ljb24gaWYoZGVidWdfbXNnX2VuYWJsZWRbMjddKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19pY29uIGRlYnVnX21zZ19lbmFibGVkWzI3XQogI2Vsc2UKICNpZmRlZiBERUJVR19JQ09OCiAjZGVmaW5lIGRwcmludGZfaWNvbiBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19pY29uIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfaWNvbgorI2RlZmluZSBkZWJ1Z2dpbmdfaWNvbiAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX2ludCBpZihkZWJ1Z19tc2dfZW5hYmxlZFsyOF0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2ludCBkZWJ1Z19tc2dfZW5hYmxlZFsyOF0KICNlbHNlCiAjaWZkZWYgREVCVUdfSU5UCiAjZGVmaW5lIGRwcmludGZfaW50IGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2ludCAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2ludAorI2RlZmluZSBkZWJ1Z2dpbmdfaW50IDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfa2V5IGlmKGRlYnVnX21zZ19lbmFibGVkWzI5XSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfa2V5IGRlYnVnX21zZ19lbmFibGVkWzI5XQogI2Vsc2UKICNpZmRlZiBERUJVR19LRVkKICNkZWZpbmUgZHByaW50Zl9rZXkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfa2V5IDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfa2V5CisjZGVmaW5lIGRlYnVnZ2luZ19rZXkgMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9rZXlib2FyZCBpZihkZWJ1Z19tc2dfZW5hYmxlZFszMF0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2tleWJvYXJkIGRlYnVnX21zZ19lbmFibGVkWzMwXQogI2Vsc2UKICNpZmRlZiBERUJVR19LRVlCT0FSRAogI2RlZmluZSBkcHJpbnRmX2tleWJvYXJkIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX2tleWJvYXJkIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfa2V5Ym9hcmQKKyNkZWZpbmUgZGVidWdnaW5nX2tleWJvYXJkIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfbGR0IGlmKGRlYnVnX21zZ19lbmFibGVkWzMxXSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfbGR0IGRlYnVnX21zZ19lbmFibGVkWzMxXQogI2Vsc2UKICNpZmRlZiBERUJVR19MRFQKICNkZWZpbmUgZHByaW50Zl9sZHQgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfbGR0IDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfbGR0CisjZGVmaW5lIGRlYnVnZ2luZ19sZHQgMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9saXN0Ym94IGlmKGRlYnVnX21zZ19lbmFibGVkWzMyXSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfbGlzdGJveCBkZWJ1Z19tc2dfZW5hYmxlZFszMl0KICNlbHNlCiAjaWZkZWYgREVCVUdfTElTVEJPWAogI2RlZmluZSBkcHJpbnRmX2xpc3Rib3ggZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfbGlzdGJveCAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX2xpc3Rib3gKKyNkZWZpbmUgZGVidWdnaW5nX2xpc3Rib3ggMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9tY2kgaWYoZGVidWdfbXNnX2VuYWJsZWRbMzNdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tY2kgZGVidWdfbXNnX2VuYWJsZWRbMzNdCiAjZWxzZQogI2lmZGVmIERFQlVHX01DSQogI2RlZmluZSBkcHJpbnRmX21jaSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tY2kgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9tY2kKKyNkZWZpbmUgZGVidWdnaW5nX21jaSAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX21jaWFuaW0gaWYoZGVidWdfbXNnX2VuYWJsZWRbMzRdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tY2lhbmltIGRlYnVnX21zZ19lbmFibGVkWzM0XQogI2Vsc2UKICNpZmRlZiBERUJVR19NQ0lBTklNCiAjZGVmaW5lIGRwcmludGZfbWNpYW5pbSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tY2lhbmltIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfbWNpYW5pbQorI2RlZmluZSBkZWJ1Z2dpbmdfbWNpYW5pbSAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX21jaXdhdmUgaWYoZGVidWdfbXNnX2VuYWJsZWRbMzVdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tY2l3YXZlIGRlYnVnX21zZ19lbmFibGVkWzM1XQogI2Vsc2UKICNpZmRlZiBERUJVR19NQ0lXQVZFCiAjZGVmaW5lIGRwcmludGZfbWNpd2F2ZSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tY2l3YXZlIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfbWNpd2F2ZQorI2RlZmluZSBkZWJ1Z2dpbmdfbWNpd2F2ZSAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX21kaSBpZihkZWJ1Z19tc2dfZW5hYmxlZFszNl0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX21kaSBkZWJ1Z19tc2dfZW5hYmxlZFszNl0KICNlbHNlCiAjaWZkZWYgREVCVUdfTURJCiAjZGVmaW5lIGRwcmludGZfbWRpIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX21kaSAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX21kaQorI2RlZmluZSBkZWJ1Z2dpbmdfbWRpIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfbWVudSBpZihkZWJ1Z19tc2dfZW5hYmxlZFszN10pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX21lbnUgZGVidWdfbXNnX2VuYWJsZWRbMzddCiAjZWxzZQogI2lmZGVmIERFQlVHX01FTlUKICNkZWZpbmUgZHByaW50Zl9tZW51IGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX21lbnUgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9tZW51CisjZGVmaW5lIGRlYnVnZ2luZ19tZW51IDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfbWVudWNhbGMgaWYoZGVidWdfbXNnX2VuYWJsZWRbMzhdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tZW51Y2FsYyBkZWJ1Z19tc2dfZW5hYmxlZFszOF0KICNlbHNlCiAjaWZkZWYgREVCVUdfTUVOVUNBTEMKICNkZWZpbmUgZHByaW50Zl9tZW51Y2FsYyBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tZW51Y2FsYyAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX21lbnVjYWxjCisjZGVmaW5lIGRlYnVnZ2luZ19tZW51Y2FsYyAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX21lc3NhZ2UgaWYoZGVidWdfbXNnX2VuYWJsZWRbMzldKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tZXNzYWdlIGRlYnVnX21zZ19lbmFibGVkWzM5XQogI2Vsc2UKICNpZmRlZiBERUJVR19NRVNTQUdFCiAjZGVmaW5lIGRwcmludGZfbWVzc2FnZSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tZXNzYWdlIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfbWVzc2FnZQorI2RlZmluZSBkZWJ1Z2dpbmdfbWVzc2FnZSAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX21ldGFmaWxlIGlmKGRlYnVnX21zZ19lbmFibGVkWzQwXSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfbWV0YWZpbGUgZGVidWdfbXNnX2VuYWJsZWRbNDBdCiAjZWxzZQogI2lmZGVmIERFQlVHX01FVEFGSUxFCiAjZGVmaW5lIGRwcmludGZfbWV0YWZpbGUgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfbWV0YWZpbGUgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9tZXRhZmlsZQorI2RlZmluZSBkZWJ1Z2dpbmdfbWV0YWZpbGUgMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9taWRpIGlmKGRlYnVnX21zZ19lbmFibGVkWzQxXSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfbWlkaSBkZWJ1Z19tc2dfZW5hYmxlZFs0MV0KICNlbHNlCiAjaWZkZWYgREVCVUdfTUlESQogI2RlZmluZSBkcHJpbnRmX21pZGkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfbWlkaSAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX21pZGkKKyNkZWZpbmUgZGVidWdnaW5nX21pZGkgMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9tbWlvIGlmKGRlYnVnX21zZ19lbmFibGVkWzQyXSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfbW1pbyBkZWJ1Z19tc2dfZW5hYmxlZFs0Ml0KICNlbHNlCiAjaWZkZWYgREVCVUdfTU1JTwogI2RlZmluZSBkcHJpbnRmX21taW8gZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfbW1pbyAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX21taW8KKyNkZWZpbmUgZGVidWdnaW5nX21taW8gMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9tbXRpbWUgaWYoZGVidWdfbXNnX2VuYWJsZWRbNDNdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tbXRpbWUgZGVidWdfbXNnX2VuYWJsZWRbNDNdCiAjZWxzZQogI2lmZGVmIERFQlVHX01NVElNRQogI2RlZmluZSBkcHJpbnRmX21tdGltZSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tbXRpbWUgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9tbXRpbWUKKyNkZWZpbmUgZGVidWdnaW5nX21tdGltZSAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX21vZHVsZSBpZihkZWJ1Z19tc2dfZW5hYmxlZFs0NF0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX21vZHVsZSBkZWJ1Z19tc2dfZW5hYmxlZFs0NF0KICNlbHNlCiAjaWZkZWYgREVCVUdfTU9EVUxFCiAjZGVmaW5lIGRwcmludGZfbW9kdWxlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX21vZHVsZSAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX21vZHVsZQorI2RlZmluZSBkZWJ1Z2dpbmdfbW9kdWxlIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfbXNnIGlmKGRlYnVnX21zZ19lbmFibGVkWzQ1XSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfbXNnIGRlYnVnX21zZ19lbmFibGVkWzQ1XQogI2Vsc2UKICNpZmRlZiBERUJVR19NU0cKICNkZWZpbmUgZHByaW50Zl9tc2cgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfbXNnIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfbXNnCisjZGVmaW5lIGRlYnVnZ2luZ19tc2cgMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9tc2dib3ggaWYoZGVidWdfbXNnX2VuYWJsZWRbNDZdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tc2dib3ggZGVidWdfbXNnX2VuYWJsZWRbNDZdCiAjZWxzZQogI2lmZGVmIERFQlVHX01TR0JPWAogI2RlZmluZSBkcHJpbnRmX21zZ2JveCBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19tc2dib3ggMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9tc2dib3gKKyNkZWZpbmUgZGVidWdnaW5nX21zZ2JveCAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQogI2RlZmluZSBkcHJpbnRmX25vbmNsaWVudCBpZihkZWJ1Z19tc2dfZW5hYmxlZFs0N10pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX25vbmNsaWVudCBkZWJ1Z19tc2dfZW5hYmxlZFs0N10KICNlbHNlCiAjaWZkZWYgREVCVUdfTk9OQ0xJRU5UCiAjZGVmaW5lIGRwcmludGZfbm9uY2xpZW50IGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX25vbmNsaWVudCAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX25vbmNsaWVudAorI2RlZmluZSBkZWJ1Z2dpbmdfbm9uY2xpZW50IDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfcGFsZXR0ZSBpZihkZWJ1Z19tc2dfZW5hYmxlZFs0OF0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3BhbGV0dGUgZGVidWdfbXNnX2VuYWJsZWRbNDhdCiAjZWxzZQogI2lmZGVmIERFQlVHX1BBTEVUVEUKICNkZWZpbmUgZHByaW50Zl9wYWxldHRlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3BhbGV0dGUgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9wYWxldHRlCisjZGVmaW5lIGRlYnVnZ2luZ19wYWxldHRlIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfcHJvZmlsZSBpZihkZWJ1Z19tc2dfZW5hYmxlZFs0OV0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3Byb2ZpbGUgZGVidWdfbXNnX2VuYWJsZWRbNDldCiAjZWxzZQogI2lmZGVmIERFQlVHX1BST0ZJTEUKICNkZWZpbmUgZHByaW50Zl9wcm9maWxlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3Byb2ZpbGUgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9wcm9maWxlCisjZGVmaW5lIGRlYnVnZ2luZ19wcm9maWxlIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfcHJvcCBpZihkZWJ1Z19tc2dfZW5hYmxlZFs1MF0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3Byb3AgZGVidWdfbXNnX2VuYWJsZWRbNTBdCiAjZWxzZQogI2lmZGVmIERFQlVHX1BST1AKICNkZWZpbmUgZHByaW50Zl9wcm9wIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3Byb3AgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9wcm9wCisjZGVmaW5lIGRlYnVnZ2luZ19wcm9wIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfcmVnIGlmKGRlYnVnX21zZ19lbmFibGVkWzUxXSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfcmVnIGRlYnVnX21zZ19lbmFibGVkWzUxXQogI2Vsc2UKICNpZmRlZiBERUJVR19SRUcKICNkZWZpbmUgZHByaW50Zl9yZWcgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfcmVnIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfcmVnCisjZGVmaW5lIGRlYnVnZ2luZ19yZWcgMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKICNkZWZpbmUgZHByaW50Zl9yZWdpb24gaWYoZGVidWdfbXNnX2VuYWJsZWRbNTJdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19yZWdpb24gZGVidWdfbXNnX2VuYWJsZWRbNTJdCiAjZWxzZQogI2lmZGVmIERFQlVHX1JFR0lPTgogI2RlZmluZSBkcHJpbnRmX3JlZ2lvbiBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19yZWdpb24gMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9yZWdpb24KKyNkZWZpbmUgZGVidWdnaW5nX3JlZ2lvbiAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQotI2RlZmluZSBkcHJpbnRmX3Jlc291cmNlIGlmKGRlYnVnX21zZ19lbmFibGVkWzUzXSkgZnByaW50ZgorI2RlZmluZSBkcHJpbnRmX3JlbGF5IGlmKGRlYnVnX21zZ19lbmFibGVkWzUzXSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfcmVsYXkgZGVidWdfbXNnX2VuYWJsZWRbNTNdCisjZWxzZQorI2lmZGVmIERFQlVHX1JFTEFZCisjZGVmaW5lIGRwcmludGZfcmVsYXkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfcmVsYXkgMQorI2Vsc2UKKyNkZWZpbmUgZHByaW50Zl9yZWxheQorI2RlZmluZSBkZWJ1Z2dpbmdfcmVsYXkgMAorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIERFQlVHX1JVTlRJTUUKKyNkZWZpbmUgZHByaW50Zl9yZXNvdXJjZSBpZihkZWJ1Z19tc2dfZW5hYmxlZFs1NF0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3Jlc291cmNlIGRlYnVnX21zZ19lbmFibGVkWzU0XQogI2Vsc2UKICNpZmRlZiBERUJVR19SRVNPVVJDRQogI2RlZmluZSBkcHJpbnRmX3Jlc291cmNlIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3Jlc291cmNlIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfcmVzb3VyY2UKKyNkZWZpbmUgZGVidWdnaW5nX3Jlc291cmNlIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCi0jZGVmaW5lIGRwcmludGZfc2Nyb2xsIGlmKGRlYnVnX21zZ19lbmFibGVkWzU0XSkgZnByaW50ZgorI2RlZmluZSBkcHJpbnRmX3Njcm9sbCBpZihkZWJ1Z19tc2dfZW5hYmxlZFs1NV0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3Njcm9sbCBkZWJ1Z19tc2dfZW5hYmxlZFs1NV0KICNlbHNlCiAjaWZkZWYgREVCVUdfU0NST0xMCiAjZGVmaW5lIGRwcmludGZfc2Nyb2xsIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3Njcm9sbCAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX3Njcm9sbAorI2RlZmluZSBkZWJ1Z2dpbmdfc2Nyb2xsIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCi0jZGVmaW5lIGRwcmludGZfc2VsZWN0b3JzIGlmKGRlYnVnX21zZ19lbmFibGVkWzU1XSkgZnByaW50ZgorI2RlZmluZSBkcHJpbnRmX3NlbGVjdG9ycyBpZihkZWJ1Z19tc2dfZW5hYmxlZFs1Nl0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3NlbGVjdG9ycyBkZWJ1Z19tc2dfZW5hYmxlZFs1Nl0KICNlbHNlCiAjaWZkZWYgREVCVUdfU0VMRUNUT1JTCiAjZGVmaW5lIGRwcmludGZfc2VsZWN0b3JzIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3NlbGVjdG9ycyAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX3NlbGVjdG9ycworI2RlZmluZSBkZWJ1Z2dpbmdfc2VsZWN0b3JzIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCi0jZGVmaW5lIGRwcmludGZfc3RyZXNzIGlmKGRlYnVnX21zZ19lbmFibGVkWzU2XSkgZnByaW50ZgorI2RlZmluZSBkcHJpbnRmX3N0YWNrIGlmKGRlYnVnX21zZ19lbmFibGVkWzU3XSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfc3RhY2sgZGVidWdfbXNnX2VuYWJsZWRbNTddCisjZWxzZQorI2lmZGVmIERFQlVHX1NUQUNLCisjZGVmaW5lIGRwcmludGZfc3RhY2sgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfc3RhY2sgMQorI2Vsc2UKKyNkZWZpbmUgZHByaW50Zl9zdGFjaworI2RlZmluZSBkZWJ1Z2dpbmdfc3RhY2sgMAorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIERFQlVHX1JVTlRJTUUKKyNkZWZpbmUgZHByaW50Zl9zdHJlc3MgaWYoZGVidWdfbXNnX2VuYWJsZWRbNThdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19zdHJlc3MgZGVidWdfbXNnX2VuYWJsZWRbNThdCiAjZWxzZQogI2lmZGVmIERFQlVHX1NUUkVTUwogI2RlZmluZSBkcHJpbnRmX3N0cmVzcyBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ19zdHJlc3MgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9zdHJlc3MKKyNkZWZpbmUgZGVidWdnaW5nX3N0cmVzcyAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQotI2RlZmluZSBkcHJpbnRmX3N5c2NvbG9yIGlmKGRlYnVnX21zZ19lbmFibGVkWzU3XSkgZnByaW50ZgorI2RlZmluZSBkcHJpbnRmX3N5c2NvbG9yIGlmKGRlYnVnX21zZ19lbmFibGVkWzU5XSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfc3lzY29sb3IgZGVidWdfbXNnX2VuYWJsZWRbNTldCiAjZWxzZQogI2lmZGVmIERFQlVHX1NZU0NPTE9SCiAjZGVmaW5lIGRwcmludGZfc3lzY29sb3IgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfc3lzY29sb3IgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl9zeXNjb2xvcgorI2RlZmluZSBkZWJ1Z2dpbmdfc3lzY29sb3IgMAogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIERFQlVHX1JVTlRJTUUKLSNkZWZpbmUgZHByaW50Zl90YXNrIGlmKGRlYnVnX21zZ19lbmFibGVkWzU4XSkgZnByaW50ZgorI2RlZmluZSBkcHJpbnRmX3Rhc2sgaWYoZGVidWdfbXNnX2VuYWJsZWRbNjBdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ190YXNrIGRlYnVnX21zZ19lbmFibGVkWzYwXQogI2Vsc2UKICNpZmRlZiBERUJVR19UQVNLCiAjZGVmaW5lIGRwcmludGZfdGFzayBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ190YXNrIDEKICNlbHNlCiAjZGVmaW5lIGRwcmludGZfdGFzaworI2RlZmluZSBkZWJ1Z2dpbmdfdGFzayAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQotI2RlZmluZSBkcHJpbnRmX3RleHQgaWYoZGVidWdfbXNnX2VuYWJsZWRbNTldKSBmcHJpbnRmCisjZGVmaW5lIGRwcmludGZfdGV4dCBpZihkZWJ1Z19tc2dfZW5hYmxlZFs2MV0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3RleHQgZGVidWdfbXNnX2VuYWJsZWRbNjFdCiAjZWxzZQogI2lmZGVmIERFQlVHX1RFWFQKICNkZWZpbmUgZHByaW50Zl90ZXh0IGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3RleHQgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl90ZXh0CisjZGVmaW5lIGRlYnVnZ2luZ190ZXh0IDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCi0jZGVmaW5lIGRwcmludGZfdGltZXIgaWYoZGVidWdfbXNnX2VuYWJsZWRbNjBdKSBmcHJpbnRmCisjZGVmaW5lIGRwcmludGZfdGltZXIgaWYoZGVidWdfbXNnX2VuYWJsZWRbNjJdKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ190aW1lciBkZWJ1Z19tc2dfZW5hYmxlZFs2Ml0KICNlbHNlCiAjaWZkZWYgREVCVUdfVElNRVIKICNkZWZpbmUgZHByaW50Zl90aW1lciBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ190aW1lciAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX3RpbWVyCisjZGVmaW5lIGRlYnVnZ2luZ190aW1lciAwCiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQotI2RlZmluZSBkcHJpbnRmX3V0aWxpdHkgaWYoZGVidWdfbXNnX2VuYWJsZWRbNjFdKSBmcHJpbnRmCisjZGVmaW5lIGRwcmludGZfdXRpbGl0eSBpZihkZWJ1Z19tc2dfZW5hYmxlZFs2M10pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3V0aWxpdHkgZGVidWdfbXNnX2VuYWJsZWRbNjNdCiAjZWxzZQogI2lmZGVmIERFQlVHX1VUSUxJVFkKICNkZWZpbmUgZHByaW50Zl91dGlsaXR5IGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3V0aWxpdHkgMQogI2Vsc2UKICNkZWZpbmUgZHByaW50Zl91dGlsaXR5CisjZGVmaW5lIGRlYnVnZ2luZ191dGlsaXR5IDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCi0jZGVmaW5lIGRwcmludGZfd2luIGlmKGRlYnVnX21zZ19lbmFibGVkWzYyXSkgZnByaW50ZgorI2RlZmluZSBkcHJpbnRmX3dpbiBpZihkZWJ1Z19tc2dfZW5hYmxlZFs2NF0pIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3dpbiBkZWJ1Z19tc2dfZW5hYmxlZFs2NF0KICNlbHNlCiAjaWZkZWYgREVCVUdfV0lOCiAjZGVmaW5lIGRwcmludGZfd2luIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3dpbiAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX3dpbgorI2RlZmluZSBkZWJ1Z2dpbmdfd2luIDAKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCi0jZGVmaW5lIGRwcmludGZfd2luc29jayBpZihkZWJ1Z19tc2dfZW5hYmxlZFs2M10pIGZwcmludGYKKyNkZWZpbmUgZHByaW50Zl93aW5zb2NrIGlmKGRlYnVnX21zZ19lbmFibGVkWzY1XSkgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfd2luc29jayBkZWJ1Z19tc2dfZW5hYmxlZFs2NV0KICNlbHNlCiAjaWZkZWYgREVCVUdfV0lOU09DSwogI2RlZmluZSBkcHJpbnRmX3dpbnNvY2sgZnByaW50ZgorI2RlZmluZSBkZWJ1Z2dpbmdfd2luc29jayAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmX3dpbnNvY2sKKyNkZWZpbmUgZGVidWdnaW5nX3dpbnNvY2sgMAogI2VuZGlmCiAjZW5kaWYKIApAQCAtMTE2Niw5ICsxMzk4LDExIEBACiAgICAgInByb3AiLAogICAgICJyZWciLAogICAgICJyZWdpb24iLAorICAgICJyZWxheSIsCiAgICAgInJlc291cmNlIiwKICAgICAic2Nyb2xsIiwKICAgICAic2VsZWN0b3JzIiwKKyAgICAic3RhY2siLAogICAgICJzdHJlc3MiLAogICAgICJzeXNjb2xvciIsCiAgICAgInRhc2siLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kaWFsb2cuaCBiL2luY2x1ZGUvZGlhbG9nLmgKaW5kZXggMWM5Y2YzNC4uYWQ0YjlkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kaWFsb2cuaAorKysgYi9pbmNsdWRlL2RpYWxvZy5oCkBAIC05LDYgKzksMTEgQEAKIAogI2luY2x1ZGUgIndpbmRvd3MuaCIKIAorZXh0ZXJuIEJPT0wgRElBTE9HX0luaXQodm9pZCk7CitleHRlcm4gSFdORCBESUFMT0dfR2V0Rmlyc3RUYWJJdGVtKCBIV05EIGh3bmREbGcgKTsKK2V4dGVybiBpbnQgRGlhbG9nQm94SW5kaXJlY3RQdHIoIEhJTlNUQU5DRSBoSW5zdCwgTFBDU1RSIGRsZ1RlbXBsYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIV05EIG93bmVyLCBXTkRQUk9DIGRsZ1Byb2MpOworCiAjcHJhZ21hIHBhY2soMSkKIAogICAvKiBEaWFsb2cgaW5mbyBzdHJ1Y3R1cmUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Rvc19mcy5oIGIvaW5jbHVkZS9kb3NfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWI1Y2U0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kb3NfZnMuaApAQCAtMCwwICsxLDM1IEBACisjaWZuZGVmIF9fV0lORV9ET1NfRlNfSAorI2RlZmluZSBfX1dJTkVfRE9TX0ZTX0gKKworI2luY2x1ZGUgPHdpbnR5cGVzLmg+CisKK2V4dGVybiB2b2lkIERPU19Jbml0RlModm9pZCk7CitleHRlcm4gV09SRCBET1NfR2V0RXF1aXBtZW50KHZvaWQpOworZXh0ZXJuIGludCBET1NfVmFsaWREcml2ZShpbnQgZHJpdmUpOworZXh0ZXJuIGludCBET1NfR2V0RGVmYXVsdERyaXZlKHZvaWQpOyAKK2V4dGVybiB2b2lkIERPU19TZXREZWZhdWx0RHJpdmUoaW50IGRyaXZlKTsKK2V4dGVybiB2b2lkIFRvVW5peChjaGFyICpzKTsgCitleHRlcm4gdm9pZCBUb0RvcyhjaGFyICpzKTsgCitleHRlcm4gdm9pZCBDaG9wT2ZmU2xhc2goY2hhciAqc3RyaW5nKTsKK2V4dGVybiBpbnQgRE9TX0Rpc2FibGVEcml2ZShpbnQgZHJpdmUpOworZXh0ZXJuIGludCBET1NfRW5hYmxlRHJpdmUoaW50IGRyaXZlKTsgCitleHRlcm4gY2hhciAqRE9TX0dldFVuaXhGaWxlTmFtZShjaGFyICpkb3NmaWxlbmFtZSk7CitleHRlcm4gY2hhciAqRE9TX0dldERvc0ZpbGVOYW1lKGNoYXIgKnVuaXhmaWxlbmFtZSk7CitleHRlcm4gY2hhciAqRE9TX0dldEN1cnJlbnREaXIoaW50IGRyaXZlKTsKK2V4dGVybiBpbnQgRE9TX0NoYW5nZURpcihpbnQgZHJpdmUsIGNoYXIgKmRpcm5hbWUpOworZXh0ZXJuIGludCBET1NfTWFrZURpcihpbnQgZHJpdmUsIGNoYXIgKmRpcm5hbWUpOworZXh0ZXJuIGludCBET1NfR2V0U2VyaWFsTnVtYmVyKGludCBkcml2ZSwgdW5zaWduZWQgbG9uZyAqc2VyaWFsbnVtYmVyKTsgCitleHRlcm4gaW50IERPU19TZXRTZXJpYWxOdW1iZXIoaW50IGRyaXZlLCB1bnNpZ25lZCBsb25nIHNlcmlhbG51bWJlcik7IAorZXh0ZXJuIGNoYXIgKkRPU19HZXRWb2x1bWVMYWJlbChpbnQgZHJpdmUpOworZXh0ZXJuIGludCBET1NfU2V0Vm9sdW1lTGFiZWwoaW50IGRyaXZlLCBjaGFyICpsYWJlbCk7CitleHRlcm4gaW50IERPU19HZXRGcmVlU3BhY2UoaW50IGRyaXZlLCBsb25nICpzaXplLCBsb25nICphdmFpbGFibGUpOworZXh0ZXJuIGNoYXIgKkRPU19GaW5kRmlsZShjaGFyICpidWZmZXIsIGludCBidWZsZW4sIGNoYXIgKnJvb3RuYW1lLCBjaGFyICoqZXh0ZW5zaW9ucywgY2hhciAqcGF0aCk7CitleHRlcm4gY2hhciAqV2luZUluaUZpbGVOYW1lKHZvaWQpOworZXh0ZXJuIGNoYXIgKldpbkluaUZpbGVOYW1lKHZvaWQpOyAKK2V4dGVybiBzdHJ1Y3QgZG9zZGlyZW50ICpET1Nfb3BlbmRpcihjaGFyICpkb3NkaXJuYW1lKTsgCitleHRlcm4gc3RydWN0IGRvc2RpcmVudCAqRE9TX3JlYWRkaXIoc3RydWN0IGRvc2RpcmVudCAqZGUpOworZXh0ZXJuIHZvaWQgRE9TX2Nsb3NlZGlyKHN0cnVjdCBkb3NkaXJlbnQgKmRlKTsKKworZXh0ZXJuIGNoYXIgV2luZG93c1BhdGhbMjU2XTsKKworI2VuZGlmIC8qIF9fV0lORV9ET1NfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ldmVudC5oIGIvaW5jbHVkZS9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMTY4OWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2V2ZW50LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fV0lORV9FVkVOVF9ICisjZGVmaW5lIF9fV0lORV9FVkVOVF9ICisKK2V4dGVybiB2b2lkIEVWRU5UX1Byb2Nlc3NFdmVudCggWEV2ZW50ICpldmVudCApOyAgLyogZXZlbnQuYyAqLworZXh0ZXJuIHZvaWQgRVZFTlRfUmVnaXN0ZXJXaW5kb3coIFdpbmRvdyB3LCBIV05EIGh3bmQgKTsgIC8qIGV2ZW50LmMgKi8KKworI2VuZGlmIC8qIF9fV0lORV9FVkVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZvbnQuaCBiL2luY2x1ZGUvZm9udC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYzI0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2ZvbnQuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX19XSU5FX0ZPTlRfSAorI2RlZmluZSBfX1dJTkVfRk9OVF9ICisKK2V4dGVybiB2b2lkIEZvbnRfSW5pdCggdm9pZCApOworZXh0ZXJuIGludCBGT05UX0dldE9iamVjdCggRk9OVE9CSiAqIGZvbnQsIGludCBjb3VudCwgTFBTVFIgYnVmZmVyICk7CitleHRlcm4gSEZPTlQgRk9OVF9TZWxlY3RPYmplY3QoIERDICogZGMsIEhGT05UIGhmb250LCBGT05UT0JKICogZm9udCApOworCisjZW5kaWYgLyogX19XSU5FX0ZPTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9nZGkuaCBiL2luY2x1ZGUvZ2RpLmgKaW5kZXggYjY4OTAzNS4uNmFhZTIxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9nZGkuaAorKysgYi9pbmNsdWRlL2dkaS5oCkBAIC0yOTksNiArMjk5LDcgQEAKIAogI2VuZGlmCiAKK2V4dGVybiBCT09MIEdESV9Jbml0KHZvaWQpOwogZXh0ZXJuIEhBTkRMRSBHRElfQWxsb2NPYmplY3QoIFdPUkQsIFdPUkQgKTsKIGV4dGVybiBCT09MIEdESV9GcmVlT2JqZWN0KCBIQU5ETEUgKTsKIGV4dGVybiBHRElPQkpIRFIgKiBHRElfR2V0T2JqUHRyKCBIQU5ETEUsIFdPUkQgKTsKQEAgLTMwNyw1ICszMDgsNiBAQAogZXh0ZXJuIFNjcmVlbiAqIHNjcmVlbjsKIGV4dGVybiBXaW5kb3cgcm9vdFdpbmRvdzsKIGV4dGVybiBpbnQgc2NyZWVuV2lkdGgsIHNjcmVlbkhlaWdodCwgc2NyZWVuRGVwdGg7CitleHRlcm4gaW50IGRlc2t0b3BYLCBkZXNrdG9wWTsgICAvKiBtaXNjL21haW4uYyAqLwogCiAjZW5kaWYgIC8qIEdESV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dyYXBoaWNzLmggYi9pbmNsdWRlL2dyYXBoaWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1ODBmNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZ3JhcGhpY3MuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX19XSU5FX0dSQVBISUNTX0gKKyNkZWZpbmUgX19XSU5FX0dSQVBISUNTX0gKKworZXh0ZXJuIHZvaWQgR1JBUEhfRHJhd1JlbGllZlJlY3QoIEhEQyBoZGMsIFJFQ1QgKnJlY3QsIGludCBoaWdobGlnaHRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2hhZG93X3NpemUsIEJPT0wgcHJlc3NlZCApOworZXh0ZXJuIEJPT0wgR1JBUEhfRHJhd0JpdG1hcCggSERDIGhkYywgSEJJVE1BUCBoYml0bWFwLCBpbnQgeGRlc3QsIGludCB5ZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHhzcmMsIGludCB5c3JjLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3AgKTsKKworI2VuZGlmIC8qIF9fV0lORV9HUkFQSElDUyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oZWFwLmggYi9pbmNsdWRlL2hlYXAuaAppbmRleCBmZjQzMjFhLi5mZDIzNGRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hlYXAuaAorKysgYi9pbmNsdWRlL2hlYXAuaApAQCAtMzUsMTEgKzM1LDI0IEBACiBleHRlcm4gaW50ICBIRUFQX0ZyZWUoTURFU0MgKipmcmVlX2xpc3QsIHZvaWQgKmJsb2NrKTsKIGV4dGVybiB2b2lkICpIRUFQX1JlQWxsb2MoTURFU0MgKipmcmVlX2xpc3QsIHZvaWQgKm9sZF9ibG9jaywgCiAJCQkgIGludCBuZXdfc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKwogZXh0ZXJuIExIRUFQICpIRUFQX0xvY2FsRmluZEhlYXAodW5zaWduZWQgc2hvcnQgb3duZXIpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBIRUFQX0xvY2FsU2l6ZShNREVTQyAqKmZyZWVfbGlzdCwgdW5zaWduZWQgaW50IGhhbmRsZSk7CiBleHRlcm4gdm9pZCBIRUFQX0xvY2FsSW5pdCh1bnNpZ25lZCBzaG9ydCBvd25lciwgdm9pZCAqc3RhcnQsIGludCBsZW5ndGgpOwogCitleHRlcm4gdm9pZCAqV0lOMTZfTG9jYWxBbGxvYyhpbnQgZmxhZ3MsIGludCBieXRlcyk7CitleHRlcm4gaW50IFdJTjE2X0xvY2FsQ29tcGFjdChpbnQgbWluX2ZyZWUpOworZXh0ZXJuIHVuc2lnbmVkIGludCBXSU4xNl9Mb2NhbEZsYWdzKHVuc2lnbmVkIGludCBoYW5kbGUpOworZXh0ZXJuIHVuc2lnbmVkIGludCBXSU4xNl9Mb2NhbEZyZWUodW5zaWduZWQgaW50IGhhbmRsZSk7CitleHRlcm4gdm9pZCAqV0lOMTZfTG9jYWxMb2NrKHVuc2lnbmVkIGludCBoYW5kbGUpOworZXh0ZXJuIHZvaWQgKldJTjE2X0xvY2FsUmVBbGxvYyh1bnNpZ25lZCBpbnQgaGFuZGxlLCBpbnQgZmxhZ3MsIGludCBieXRlcyk7CitleHRlcm4gdW5zaWduZWQgaW50IFdJTjE2X0xvY2FsVW5sb2NrKHVuc2lnbmVkIGludCBoYW5kbGUpOworCisjaWYgMAogI2RlZmluZSBIRUFQX09XTkVSCShTZWdtZW50c1tTdGFjazE2RnJhbWVbMTFdID4+IDNdLm93bmVyKQorI2VuZGlmCisvKiBVc2UgZHMgaW5zdGVhZCBvZiBvd25lciBvZiBjcyAqLworI2RlZmluZSBIRUFQX09XTkVSCVN0YWNrMTZGcmFtZVs2XQogI2RlZmluZSBMT0NBTEhFQVAoKQkoJkhFQVBfTG9jYWxGaW5kSGVhcChIRUFQX09XTkVSKS0+ZnJlZV9saXN0KQogI2RlZmluZSBMT0NBTEFUT01UQUJMRSgpICgmSEVBUF9Mb2NhbEZpbmRIZWFwKEhFQVBfT1dORVIpLT5sb2NhbF90YWJsZSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pZjE2MzIuaCBiL2luY2x1ZGUvaWYxNjMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmNzYzNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvaWYxNjMyLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfX1dJTkVfSUYxNjMyX0gKKyNkZWZpbmUgX19XSU5FX0lGMTYzMl9ICisKKyNpbmNsdWRlIDx3aW50eXBlcy5oPgorCitleHRlcm4gaW50IENhbGxUb0luaXQxNih1bnNpZ25lZCBsb25nIGNzaXAsIHVuc2lnbmVkIGxvbmcgc3NzcCwgCisJCQl1bnNpZ25lZCBzaG9ydCBkcyk7CitleHRlcm4gaW50IENhbGxUbzE2Y3godW5zaWduZWQgbG9uZyBjc2lwLCB1bnNpZ25lZCBsb25nIGRzY3gpOworZXh0ZXJuIGludCBDYWxsVG9EbGxFbnRyeSh1bnNpZ25lZCBsb25nIGNzaXAsIHVuc2lnbmVkIGxvbmcgZHNjeCwgdW5zaWduZWQgc2hvcnQgZGkpOworZXh0ZXJuIGludCBDYWxsQmFjazE2KHZvaWQgKmZ1bmMsIGludCBuX2FyZ3MsIC4uLik7CitleHRlcm4gdm9pZCAqQ0FMTEJBQ0tfTWFrZVByb2NJbnN0YW5jZSh2b2lkICpmdW5jLCBpbnQgaW5zdGFuY2UpOworZXh0ZXJuIHZvaWQgQ2FsbExpbmVEREFQcm9jKEZBUlBST0MgZnVuYywgc2hvcnQgeFBvcywgc2hvcnQgeVBvcywgbG9uZyBsUGFyYW0pOworZXh0ZXJuIHZvaWQgd2luZXN0YXQodm9pZCk7CitleHRlcm4gaW50IERMTFJlbGF5KHVuc2lnbmVkIGludCBmdW5jX251bSwgdW5zaWduZWQgaW50IHNlZ19vZmYpOworZXh0ZXJuIHN0cnVjdCBkbGxfdGFibGVfZW50cnlfcyAqRmluZERMTFRhYmxlKGNoYXIgKmRsbF9uYW1lKTsKK2V4dGVybiBpbnQgRmluZE9yZGluYWxGcm9tTmFtZShzdHJ1Y3QgZGxsX3RhYmxlX2VudHJ5X3MgKmRsbF90YWJsZSwgY2hhciAqZnVuY19uYW1lKTsKK2V4dGVybiBpbnQgUmV0dXJuQXJnKGludCBhcmcpOworCisjZW5kaWYgLyogX19XSU5FX0lGMTYzMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2tlcm5lbC5oIGIvaW5jbHVkZS9rZXJuZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGJmMGY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9rZXJuZWwuaApAQCAtMCwwICsxLDQgQEAKK2V4dGVybiBpbnQgS0VSTkVMX0xvY2tTZWdtZW50KGludCBzZWdtZW50KTsKK2V4dGVybiBpbnQgS0VSTkVMX1VubG9ja1NlZ21lbnQoaW50IHNlZ21lbnQpOworZXh0ZXJuIEtFUk5FTF9Jbml0VGFzayh2b2lkKTsKK2V4dGVybiBpbnQgS0VSTkVMX1dhaXRFdmVudChpbnQgdGFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnJhcnkuaCBiL2luY2x1ZGUvbGlicmFyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNjFkNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpYnJhcnkuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9fV0lORV9MSUJSQVJZX0gKKyNkZWZpbmUgX19XSU5FX0xJQlJBUllfSAorCitleHRlcm4gSElOU1RBTkNFIGhJbnN0TWFpbjsKK2V4dGVybiBISU5TVEFOQ0UgaFN5c1JlczsKK2V4dGVybiBzdHJ1Y3Qgd19maWxlcyAqR2V0RmlsZUluZm8odW5zaWduZWQgc2hvcnQgaW5zdGFuY2UpOworZXh0ZXJuIGludCBJc0RMTExvYWRlZChjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIEluaXRETEwoc3RydWN0IHdfZmlsZXMgKndwbnQpOworZXh0ZXJuIHZvaWQgSW5pdGlhbGl6ZUxvYWRlZERMTHMoc3RydWN0IHdfZmlsZXMgKndwbnQpOworZXh0ZXJuIEhJTlNUQU5DRSBMb2FkSW1hZ2UoY2hhciAqbW9kdWxlLCBpbnQgZmlsZXR5cGUsIGludCBjaGFuZ2VfZGlyKTsKKworZXh0ZXJuIHN0cnVjdCBkbGxfbmFtZV90YWJsZV9lbnRyeV9zIGRsbF9idWlsdGluX3RhYmxlW107CisKKyNlbmRpZiAvKiBfX1dJTkVfTElCUkFSWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpc3Rib3guaCBiL2luY2x1ZGUvbGlzdGJveC5oCmluZGV4IDcwMDA5NDMuLjFlNTZiN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlzdGJveC5oCisrKyBiL2luY2x1ZGUvbGlzdGJveC5oCkBAIC0xNCw4ICsxNCw4IEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnSEVBRExJU1QgewotCXNob3J0CUZpcnN0VmlzaWJsZTsKLQlzaG9ydAlJdGVtc0NvdW50OworCVVJTlQJRmlyc3RWaXNpYmxlOworCVVJTlQJSXRlbXNDb3VudDsKIAlzaG9ydAlJdGVtc1Zpc2libGU7CiAJc2hvcnQJQ29sdW1uc1Zpc2libGU7CiAJc2hvcnQJSXRlbXNQZXJDb2x1bW47CmRpZmYgLS1naXQgYS9pbmNsdWRlL21kaS5oIGIvaW5jbHVkZS9tZGkuaAppbmRleCA0MGY0Mzk5Li43M2ViYjRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL21kaS5oCisrKyBiL2luY2x1ZGUvbWRpLmgKQEAgLTExLDYgKzExLDkgQEAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAKICNkZWZpbmUgTURJX01BWExJU1RMRU5HVEgJNjQKK2V4dGVybiBMT05HIE1ESUNsaWVudFduZFByb2MoSFdORCBod25kLCBXT1JEIG1lc3NhZ2UsIAorCQkJICAgICBXT1JEIHdQYXJhbSwgTE9ORyBsUGFyYW0pOyAvKiBtZGkuYyAqLworCiAKIHR5cGVkZWYgc3RydWN0IG1kaV9jaGlsZF9pbmZvX3MKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVudS5oIGIvaW5jbHVkZS9tZW51LmgKaW5kZXggZmFkOGJiMS4uZDQ3MWVlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZW51LmgKKysrIGIvaW5jbHVkZS9tZW51LmgKQEAgLTgsNiArOCwxNSBAQAogCiAjZGVmaW5lIE1FTlVfTUFHSUMgICAweDU1NGQgIC8qICdNVScgKi8KIAorZXh0ZXJuIEJPT0wgTUVOVV9Jbml0KHZvaWQpOworZXh0ZXJuIFdPUkQgTUVOVV9HZXRNZW51QmFySGVpZ2h0KCBIV05EIGh3bmQsIFdPUkQgbWVudWJhcldpZHRoLAorCQkJCSAgIGludCBvcmdYLCBpbnQgb3JnWSApOyAgICAgICAgIC8qIG1lbnUuYyAqLworZXh0ZXJuIHZvaWQgTUVOVV9UcmFja01vdXNlTWVudUJhciggSFdORCBod25kLCBQT0lOVCBwdCApOyAgICAgICAvKiBtZW51LmMgKi8KK2V4dGVybiB2b2lkIE1FTlVfVHJhY2tLYmRNZW51QmFyKCBIV05EIGh3bmQsIFdPUkQgd1BhcmFtICk7ICAgICAgLyogbWVudS5jICovCitleHRlcm4gV09SRCBNRU5VX0RyYXdNZW51QmFyKCBIREMgaERDLCBMUFJFQ1QgbHByZWN0LAorCQkJICAgICAgSFdORCBod25kLCBCT09MIHN1cHByZXNzX2RyYXcgKTsgICAvKiBtZW51LmMgKi8KK2V4dGVybiBITUVOVSBDb3B5U3lzTWVudSgpOyAvKiBtZW51LmMgKi8KKwogCiB0eXBlZGVmIHN0cnVjdCB0YWdNRU5VSVRFTQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9taXNjZW11LmggYi9pbmNsdWRlL21pc2NlbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjRiZmFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9taXNjZW11LmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX1dJTkVfTUlTQ0VNVV9ICisjZGVmaW5lIF9fV0lORV9NSVNDRU1VX0gKKworZXh0ZXJuIGludCBkb19pbnQxMChzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKik7CitleHRlcm4gaW50IGRvX2ludDEzKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqKTsKK2V4dGVybiBpbnQgZG9faW50MTUoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICopOworZXh0ZXJuIGludCBkb19pbnQxNihzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKik7CitleHRlcm4gaW50IGRvX2ludDFhKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqKTsKK2V4dGVybiBpbnQgZG9faW50MjEoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICopOworZXh0ZXJuIGludCBkb19pbnQyNShzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKik7CitleHRlcm4gaW50IGRvX2ludDI2KHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqKTsKK2V4dGVybiBpbnQgZG9faW50MmEoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICopOworZXh0ZXJuIGludCBkb19pbnQyZihzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKik7CitleHRlcm4gaW50IGRvX2ludDMxKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqKTsKKworZXh0ZXJuIHZvaWQgaW5wb3J0YihzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpOworZXh0ZXJuIHZvaWQgaW5wb3J0KHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqY29udGV4dCk7CitleHRlcm4gdm9pZCBvdXRwb3J0YihzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpOworZXh0ZXJuIHZvaWQgb3V0cG9ydChzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpOworCitleHRlcm4gdm9pZCBJbnRCYXJmKGludCBpLCBzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpOworCitleHRlcm4gdm9pZCBJTlQyMV9Jbml0KHZvaWQpOworCisjZW5kaWYgLyogX19XSU5FX01JU0NFTVVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tc2Rvcy5oIGIvaW5jbHVkZS9tc2Rvcy5oCmluZGV4IDA1Mjk4ODMuLjMxYmYzZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXNkb3MuaAorKysgYi9pbmNsdWRlL21zZG9zLmgKQEAgLTEsNyArMSw5IEBACiAjaWZuZGVmIF9fTVNET1NfSAogI2RlZmluZSBfX01TRE9TX0gKKwogI2luY2x1ZGUgPGRpcmVudC5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlICJjb21tLmgiCiAKIHN0cnVjdCBkb3NkaXJlbnQgewogCWludCAgaW51c2U7CkBAIC0zMCw2ICszMiwxMCBAQAogI2RlZmluZSBET1NWRVJTSU9OIDB4MDMzMDsKICNkZWZpbmUgTUFYX0RPU19EUklWRVMJMjYKIAorZXh0ZXJuIFdPUkQgRXh0ZW5kZWRFcnJvcjsKK2V4dGVybiBzdHJ1Y3QgRG9zRGV2aWNlU3RydWN0IENPTVtNQVhfUE9SVFNdOworZXh0ZXJuIHN0cnVjdCBEb3NEZXZpY2VTdHJ1Y3QgTFBUW01BWF9QT1JUU107CisKICNkZWZpbmUgc2VnbWVudChhKSAJKChEV09SRCkoYSkgPj4gMTYpCiAjZGVmaW5lIG9mZnNldChhKQkoKERXT1JEKShhKSAmIDB4ZmZmZikKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZV9pbWFnZS5oIGIvaW5jbHVkZS9uZV9pbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmODkzMzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25lX2ltYWdlLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfX1dJTkVfTkVfSU1BR0VfSAorI2RlZmluZSBfX1dJTkVfTkVfSU1BR0VfSAorCitleHRlcm4gaW50IE5FX0ZpeHVwU2VnbWVudChzdHJ1Y3Qgd19maWxlcyAqd3BudCwgaW50IHNlZ21lbnRfbnVtKTsKK2V4dGVybiBpbnQgTkVfdW5sb2FkSW1hZ2Uoc3RydWN0IHdfZmlsZXMgKndwbnQpOworZXh0ZXJuIGludCBORV9TdGFydFByb2dyYW0oc3RydWN0IHdfZmlsZXMgKndwbnQpOworZXh0ZXJuIHZvaWQgTkVfSW5pdERMTChzdHJ1Y3Qgd19maWxlcyAqd3BudCk7CitleHRlcm4gSElOU1RBTkNFIE5FX0xvYWRJbWFnZShzdHJ1Y3Qgd19maWxlcyAqd3BudCk7CisKKyNlbmRpZiAvKiBfX1dJTkVfTkVfSU1BR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ub25jbGllbnQuaCBiL2luY2x1ZGUvbm9uY2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdiYzcxZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbm9uY2xpZW50LmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfX1dJTkVfTk9OQ0xJRU5UX0gKKyNkZWZpbmUgX19XSU5FX05PTkNMSUVOVF9ICisKK2V4dGVybiBMT05HIE5DX0hhbmRsZU5DUGFpbnQoIEhXTkQgaHduZCwgSFJHTiBocmduICk7CitleHRlcm4gTE9ORyBOQ19IYW5kbGVOQ0FjdGl2YXRlKCBIV05EIGh3bmQsIFdPUkQgd1BhcmFtICk7CitleHRlcm4gTE9ORyBOQ19IYW5kbGVOQ0NhbGNTaXplKCBIV05EIGh3bmQsIE5DQ0FMQ1NJWkVfUEFSQU1TICpwYXJhbXMgKTsKK2V4dGVybiBMT05HIE5DX0hhbmRsZU5DSGl0VGVzdCggSFdORCBod25kLCBQT0lOVCBwdCApOworZXh0ZXJuIExPTkcgTkNfSGFuZGxlTkNMQnV0dG9uRG93biggSFdORCBod25kLCBXT1JEIHdQYXJhbSwgTE9ORyBsUGFyYW0gKTsKK2V4dGVybiBMT05HIE5DX0hhbmRsZU5DTEJ1dHRvbkRibENsayggSFdORCBod25kLCBXT1JEIHdQYXJhbSwgTE9ORyBsUGFyYW0gKTsKK2V4dGVybiBMT05HIE5DX0hhbmRsZVN5c0NvbW1hbmQoIEhXTkQgaHduZCwgV09SRCB3UGFyYW0sIFBPSU5UIHB0ICk7CitleHRlcm4gTE9ORyBOQ19IYW5kbGVTZXRDdXJzb3IoIEhXTkQgaHduZCwgV09SRCB3UGFyYW0sIExPTkcgbFBhcmFtICk7CisKKyNlbmRpZiAvKiBfX1dJTkVfTk9OQ0xJRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3B0aW9ucy5oIGIvaW5jbHVkZS9vcHRpb25zLmgKaW5kZXggZThiZWQ5Zi4uMzE3ZjljMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcHRpb25zLmgKKysrIGIvaW5jbHVkZS9vcHRpb25zLmgKQEAgLTE2LDcgKzE2LDYgQEAKICAgICBpbnQgICAgc3luY2hyb25vdXM7ICAgICAvKiBYIHN5bmNocm9ub3VzIG1vZGUgKi8KICAgICBpbnQgICAgYmFja2luZ3N0b3JlOyAgICAvKiBVc2UgYmFja2luZyBzdG9yZSAqLwogICAgIHNob3J0ICBjbWRTaG93OwotICAgIGludCAgICByZWxheV9kZWJ1ZzsKICAgICBpbnQgICAgZGVidWc7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BlX2ltYWdlLmggYi9pbmNsdWRlL3BlX2ltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1OTYwMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcGVfaW1hZ2UuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9fV0lORV9QRV9JTUFHRV9ICisjZGVmaW5lIF9fV0lORV9QRV9JTUFHRV9ICisKK2V4dGVybiBpbnQgUEVfdW5sb2FkSW1hZ2Uoc3RydWN0IHdfZmlsZXMgKndwbnQpOworZXh0ZXJuIGludCBQRV9TdGFydFByb2dyYW0oc3RydWN0IHdfZmlsZXMgKndwbnQpOworZXh0ZXJuIHZvaWQgUEVfSW5pdERMTChzdHJ1Y3Qgd19maWxlcyAqd3BudCk7CitleHRlcm4gSElOU1RBTkNFIFBFX0xvYWRJbWFnZShzdHJ1Y3Qgd19maWxlcyAqd3BudCk7CitleHRlcm4gdm9pZCBteV93Y3N0b21icyhjaGFyICogcmVzdWx0LCB1X3Nob3J0ICogc291cmNlLCBpbnQgbGVuKTsKKworI2VuZGlmIC8qIF9fV0lORV9QRV9JTUFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Byb3RvdHlwZXMuaCBiL2luY2x1ZGUvcHJvdG90eXBlcy5oCmluZGV4IDJiOTRkMjUuLmViZGU5Y2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHJvdG90eXBlcy5oCisrKyBiL2luY2x1ZGUvcHJvdG90eXBlcy5oCkBAIC0xMCwyMiArMTAsMTIgQEAKIAogI2luY2x1ZGUgIm5lZXhlLmgiCiAjaW5jbHVkZSAic2VnbWVtLmgiCi0jaW5jbHVkZSAid2luZS5oIgogI2luY2x1ZGUgImhlYXAuaCIKICNpbmNsdWRlICJtc2Rvcy5oIgogI2luY2x1ZGUgIndpbmRvd3MuaCIKIAogI2lmbmRlZiBXSU5FTElCCiAKLS8qIGxvYWRlci9kdW1wLmMgKi8KLQotZXh0ZXJuIHZvaWQgUHJpbnRGaWxlSGVhZGVyKHN0cnVjdCBuZV9oZWFkZXJfcyAqbmVfaGVhZGVyKTsKLWV4dGVybiB2b2lkIFByaW50U2VnbWVudFRhYmxlKHN0cnVjdCBuZV9zZWdtZW50X3RhYmxlX2VudHJ5X3MgKnNlZ190YWJsZSwgCi0JCQkJaW50IG5lbnRyaWVzKTsKLWV4dGVybiB2b2lkIFByaW50UmVsb2NhdGlvblRhYmxlKGNoYXIgKmV4ZV9wdHIsIAotCQkJCXN0cnVjdCBuZV9zZWdtZW50X3RhYmxlX2VudHJ5X3MgKnNlZ19lbnRyeV9wLCAKLQkJCQlpbnQgc2VnbWVudCk7Ci0KIC8qIGxvYWRlci9sZHRsaWIuYyAqLwogCiBzdHJ1Y3Qgc2VnbWVudF9kZXNjcmlwdG9yICoKQEAgLTM3LDE1MyArMjcsNDAgQEAKIAogLyogbG9hZGVyL3Jlc291cmNlLmMgKi8KIAotZXh0ZXJuIGludCBPcGVuUmVzb3VyY2VGaWxlKEhBTkRMRSBpbnN0YW5jZSk7CiBleHRlcm4gSEJJVE1BUCBDb252ZXJ0Q29yZUJpdG1hcCggSERDIGhkYywgQklUTUFQQ09SRUhFQURFUiAqIGltYWdlICk7CiBleHRlcm4gSEJJVE1BUCBDb252ZXJ0SW5mb0JpdG1hcCggSERDIGhkYywgQklUTUFQSU5GTyAqIGltYWdlICk7CiAKLS8qIGxvYWRlci9zZWxlY3Rvci5jICovCi0KLWV4dGVybiBpbnQgRmluZFVudXNlZFNlbGVjdG9ycyhpbnQgbl9zZWxlY3RvcnMpOwotZXh0ZXJuIGludCBJUENDb3B5U2VsZWN0b3IoaW50IGlfb2xkLCB1bnNpZ25lZCBsb25nIG5ldywgaW50IHN3YXBfdHlwZSk7Ci1leHRlcm4gV09SRCBBbGxvY1NlbGVjdG9yKFdPUkQgb2xkX3NlbGVjdG9yKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgUHJlc3RvQ2hhbmdvU2VsZWN0b3IodW5zaWduZWQgc3JjX3NlbGVjdG9yLCB1bnNpZ25lZCBkc3Rfc2VsZWN0b3IpOwotZXh0ZXJuIFdPUkQgQWxsb2NEU3RvQ1NBbGlhcyhXT1JEIGRzX3NlbGVjdG9yKTsKLWV4dGVybiBXT1JEIEZyZWVTZWxlY3RvcihXT1JEIHNlbCk7Ci1leHRlcm4gU0VHREVTQyAqQ3JlYXRlTmV3U2VnbWVudHMoaW50IGNvZGVfZmxhZywgaW50IHJlYWRfb25seSwgaW50IGxlbmd0aCwgCi0JCQkJCWludCBuX3NlZ21lbnRzKTsKLWV4dGVybiBTRUdERVNDICpHZXROZXh0U2VnbWVudCh1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBsaW1pdCk7Ci1leHRlcm4gdW5zaWduZWQgaW50IEdldEVudHJ5RExMTmFtZShjaGFyICpkbGxfbmFtZSwgY2hhciAqZnVuY3Rpb24sIGludCAqc2VsLAotCQkJCQlpbnQgKmFkZHIpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBHZXRFbnRyeURMTE9yZGluYWwoY2hhciAqZGxsX25hbWUsIGludCBvcmRpbmFsLCBpbnQgKnNlbCwKLQkJCQkJaW50ICphZGRyKTsKLQogLyogbG9hZGVyL3NpZ25hbC5jICovCiAKIGV4dGVybiBpbnQgaW5pdF93aW5lX3NpZ25hbHModm9pZCk7CitleHRlcm4gdm9pZCB3aW5lX2RlYnVnKGludCBzaWduYWwsIGludCAqIHJlZ3MpOwogCiAvKiBsb2FkZXIvd2luZS5jICovCiAKIGV4dGVybiB2b2lkIG15ZXJyb3IoY29uc3QgY2hhciAqcyk7Ci1leHRlcm4gdm9pZCBsb2FkX216X2hlYWRlciAoaW50LCBzdHJ1Y3QgbXpfaGVhZGVyX3MgKik7Ci1leHRlcm4gdm9pZCBsb2FkX25lX2hlYWRlciAoaW50LCBzdHJ1Y3QgbmVfaGVhZGVyX3MgKik7CiAKIGV4dGVybiBjaGFyICpHZXRGaWxlbmFtZUZyb21JbnN0YW5jZSh1bnNpZ25lZCBzaG9ydCBpbnN0YW5jZSk7CiBleHRlcm4gSElOU1RBTkNFIExvYWRJbWFnZShjaGFyICptb2R1bGVuYW1lLCBpbnQgZmlsZXR5cGUsIGludCBjaGFuZ2VfZGlyKTsKIGV4dGVybiBpbnQgX1dpbk1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKIGV4dGVybiB2b2lkIEluaXRpYWxpemVMb2FkZWRETExzKCk7CiAKLS8qIGlmMTYzMi9yZWxheS5jICovCi0KLWV4dGVybiBpbnQgQ2FsbEJhY2sxNih2b2lkICpmdW5jLCBpbnQgbl9hcmdzLCAuLi4pOwotZXh0ZXJuIHZvaWQgKkNBTExCQUNLX01ha2VQcm9jSW5zdGFuY2Uodm9pZCAqZnVuYywgaW50IGluc3RhbmNlKTsKLWV4dGVybiB2b2lkIENhbGxMaW5lRERBUHJvYyhGQVJQUk9DIGZ1bmMsIHNob3J0IHhQb3MsIHNob3J0IHlQb3MsIGxvbmcgbFBhcmFtKTsKLWV4dGVybiB2b2lkIHdpbmVzdGF0KHZvaWQpOwotCi0vKiBpZjE2MzIvY2FsbGJhY2suYyAqLwotCi1leHRlcm4gaW50IERMTFJlbGF5KHVuc2lnbmVkIGludCBmdW5jX251bSwgdW5zaWduZWQgaW50IHNlZ19vZmYpOwotZXh0ZXJuIHN0cnVjdCBkbGxfdGFibGVfZW50cnlfcyAqRmluZERMTFRhYmxlKGNoYXIgKmRsbF9uYW1lKTsKLWV4dGVybiBpbnQgRmluZE9yZGluYWxGcm9tTmFtZShzdHJ1Y3QgZGxsX3RhYmxlX2VudHJ5X3MgKmRsbF90YWJsZSwgY2hhciAqZnVuY19uYW1lKTsKLWV4dGVybiBpbnQgUmV0dXJuQXJnKGludCBhcmcpOwotCi0vKiBtaXNjZW11L2ludDFhLmMgKi8KLQotZXh0ZXJuIGRvX2ludDFBKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqY29udGV4dCk7Ci0KLS8qIG1pc2NlbXUvaW50MjEuYyAqLwotCi1leHRlcm4gZG9faW50MjEoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICpjb250ZXh0KTsKLQotLyogbWlzY2VtdS9rZXJuZWwuYyAqLwotCiBleHRlcm4gaW50IEtFUk5FTF9Mb2NrU2VnbWVudChpbnQgc2VnbWVudCk7CiBleHRlcm4gaW50IEtFUk5FTF9VbmxvY2tTZWdtZW50KGludCBzZWdtZW50KTsKLWV4dGVybiBLRVJORUxfSW5pdFRhc2soKTsKK2V4dGVybiB2b2lkIEtFUk5FTF9Jbml0VGFzayh2b2lkKTsKIGV4dGVybiBpbnQgS0VSTkVMX1dhaXRFdmVudChpbnQgdGFzayk7CiAKLS8qIG1pc2MvY29tbS5jICovCi0KLXZvaWQgQ29tbV9Jbml0KHZvaWQpOwotdm9pZCBDb21tX0RlSW5pdCh2b2lkKTsKLQotLyogbWlzYy9kb3NfZnMuYyAqLwotCi1leHRlcm4gdm9pZCBET1NfSW5pdEZTKHZvaWQpOwotZXh0ZXJuIFdPUkQgRE9TX0dldEVxdWlwbWVudCh2b2lkKTsKLWV4dGVybiBpbnQgRE9TX1ZhbGlkRHJpdmUoaW50IGRyaXZlKTsKLWV4dGVybiBpbnQgRE9TX0dldERlZmF1bHREcml2ZSh2b2lkKTsgCi1leHRlcm4gdm9pZCBET1NfU2V0RGVmYXVsdERyaXZlKGludCBkcml2ZSk7Ci1leHRlcm4gdm9pZCBUb1VuaXgoY2hhciAqcyk7IAotZXh0ZXJuIHZvaWQgVG9Eb3MoY2hhciAqcyk7IAotZXh0ZXJuIHZvaWQgQ2hvcE9mZlNsYXNoKGNoYXIgKnN0cmluZyk7Ci1leHRlcm4gaW50IERPU19EaXNhYmxlRHJpdmUoaW50IGRyaXZlKTsKLWV4dGVybiBpbnQgRE9TX0VuYWJsZURyaXZlKGludCBkcml2ZSk7IAotZXh0ZXJuIGNoYXIgKkdldFVuaXhGaWxlTmFtZShjaGFyICpkb3NmaWxlbmFtZSk7Ci1leHRlcm4gY2hhciAqRE9TX0dldEN1cnJlbnREaXIoaW50IGRyaXZlKTsKLWV4dGVybiBpbnQgRE9TX0NoYW5nZURpcihpbnQgZHJpdmUsIGNoYXIgKmRpcm5hbWUpOwotZXh0ZXJuIGludCBET1NfTWFrZURpcihpbnQgZHJpdmUsIGNoYXIgKmRpcm5hbWUpOwotZXh0ZXJuIGludCBET1NfR2V0U2VyaWFsTnVtYmVyKGludCBkcml2ZSwgdW5zaWduZWQgbG9uZyAqc2VyaWFsbnVtYmVyKTsgCi1leHRlcm4gaW50IERPU19TZXRTZXJpYWxOdW1iZXIoaW50IGRyaXZlLCB1bnNpZ25lZCBsb25nIHNlcmlhbG51bWJlcik7IAotZXh0ZXJuIGNoYXIgKkRPU19HZXRWb2x1bWVMYWJlbChpbnQgZHJpdmUpOwotZXh0ZXJuIGludCBET1NfU2V0Vm9sdW1lTGFiZWwoaW50IGRyaXZlLCBjaGFyICpsYWJlbCk7Ci1leHRlcm4gaW50IERPU19HZXRGcmVlU3BhY2UoaW50IGRyaXZlLCBsb25nICpzaXplLCBsb25nICphdmFpbGFibGUpOwotZXh0ZXJuIGNoYXIgKkZpbmRGaWxlKGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbiwgY2hhciAqcm9vdG5hbWUsIGNoYXIgKipleHRlbnNpb25zLCBjaGFyICpwYXRoKTsKLWV4dGVybiBjaGFyICpXaW5lSW5pRmlsZU5hbWUodm9pZCk7Ci1leHRlcm4gY2hhciAqV2luSW5pRmlsZU5hbWUodm9pZCk7IAotZXh0ZXJuIHN0cnVjdCBkb3NkaXJlbnQgKkRPU19vcGVuZGlyKGNoYXIgKmRvc2Rpcm5hbWUpOyAKLWV4dGVybiBzdHJ1Y3QgZG9zZGlyZW50ICpET1NfcmVhZGRpcihzdHJ1Y3QgZG9zZGlyZW50ICpkZSk7Ci1leHRlcm4gdm9pZCBET1NfY2xvc2VkaXIoc3RydWN0IGRvc2RpcmVudCAqZGUpOwotCi0vKiBtaXNjL3Byb2ZpbGUuYyAqLwotCi1leHRlcm4gdm9pZCBzeW5jX3Byb2ZpbGVzKHZvaWQpOwotCiAvKiBtaXNjL3NweS5jICovCiAKIGV4dGVybiB2b2lkIFNweUluaXQodm9pZCk7CiAKLS8qIGNvbnRyb2xzL2Rlc2t0b3AuYyAqLwotCi1leHRlcm4gQk9PTCBERVNLVE9QX1NldFBhdHRlcm4oY2hhciAqcGF0dGVybik7Ci0KIC8qIGNvbnRyb2xzL3dpZGdldC5jICovCiAKIGV4dGVybiBCT09MIFdJREdFVFNfSW5pdCh2b2lkKTsKIAotLyogbWVtb3J5L2hlYXAuYyAqLwotCi1leHRlcm4gdm9pZCBIRUFQX0luaXQoTURFU0MgKipmcmVlX2xpc3QsIHZvaWQgKnN0YXJ0LCBpbnQgbGVuZ3RoKTsKLWV4dGVybiB2b2lkICpIRUFQX0FsbG9jKE1ERVNDICoqZnJlZV9saXN0LCBpbnQgZmxhZ3MsIGludCBieXRlcyk7Ci1leHRlcm4gdm9pZCAqSEVBUF9SZUFsbG9jKE1ERVNDICoqZnJlZV9saXN0LCB2b2lkICpvbGRfYmxvY2ssIGludCBuZXdfc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKLWV4dGVybiBpbnQgSEVBUF9GcmVlKE1ERVNDICoqZnJlZV9saXN0LCB2b2lkICpibG9jayk7Ci1leHRlcm4gTEhFQVAgKkhFQVBfTG9jYWxGaW5kSGVhcCh1bnNpZ25lZCBzaG9ydCBvd25lcik7Ci1leHRlcm4gdm9pZCBIRUFQX0xvY2FsSW5pdCh1bnNpZ25lZCBzaG9ydCBvd25lciwgdm9pZCAqc3RhcnQsIGludCBsZW5ndGgpOwotZXh0ZXJuIHZvaWQgKldJTjE2X0xvY2FsQWxsb2MoaW50IGZsYWdzLCBpbnQgYnl0ZXMpOwotZXh0ZXJuIGludCBXSU4xNl9Mb2NhbENvbXBhY3QoaW50IG1pbl9mcmVlKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgV0lOMTZfTG9jYWxGbGFncyh1bnNpZ25lZCBpbnQgaGFuZGxlKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgV0lOMTZfTG9jYWxGcmVlKHVuc2lnbmVkIGludCBoYW5kbGUpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBXSU4xNl9Mb2NhbEluaXQodW5zaWduZWQgaW50IHNlZ21lbnQsIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGVuZCk7Ci1leHRlcm4gdm9pZCAqV0lOMTZfTG9jYWxMb2NrKHVuc2lnbmVkIGludCBoYW5kbGUpOwotZXh0ZXJuIHZvaWQgKldJTjE2X0xvY2FsUmVBbGxvYyh1bnNpZ25lZCBpbnQgaGFuZGxlLCBpbnQgZmxhZ3MsIGludCBieXRlcyk7Ci1leHRlcm4gdW5zaWduZWQgaW50IFdJTjE2X0xvY2FsU2l6ZSh1bnNpZ25lZCBpbnQgaGFuZGxlKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgV0lOMTZfTG9jYWxVbmxvY2sodW5zaWduZWQgaW50IGhhbmRsZSk7Ci0KLS8qIG9iamVjdHMvYml0bWFwcy5jICovCi0KLWV4dGVybiBCT09MIEJJVE1BUF9Jbml0KHZvaWQpOwotCi0vKiBvYmplY3RzL2NvbG9yLmMgKi8KLQotZXh0ZXJuIEJPT0wgQ09MT1JfSW5pdCh2b2lkKTsKLQogLyogb2JqZWN0cy9kaWIuYyAqLwogCiBleHRlcm4gaW50IERJQl9CaXRtYXBJbmZvU2l6ZShCSVRNQVBJTkZPICppbmZvLCBXT1JEIGNvbG9ydXNlKTsKIAotLyogb2JqZWN0cy9nZGlvYmouYyAqLwotCi1leHRlcm4gQk9PTCBHRElfSW5pdCh2b2lkKTsKLQogLyogb2JqZWN0cy9wYWxldHRlLmMgKi8KIAogZXh0ZXJuIEJPT0wgUEFMRVRURV9Jbml0KHZvaWQpOwpAQCAtMjAwLDE3ICs3Nyw1IEBACiAKIGV4dGVybiB2b2lkIERDRV9Jbml0KHZvaWQpOwogCi0vKiB3aW5kb3dzL2RpYWxvZy5jICovCi0KLWV4dGVybiBCT09MIERJQUxPR19Jbml0KHZvaWQpOwotCi0vKiB3aW5kb3dzL3N5c2NvbG9yLmMgKi8KLQotZXh0ZXJuIHZvaWQgU1lTQ09MT1JfSW5pdCh2b2lkKTsKLQotLyogd2luZG93cy9zeXNtZXRyaWNzLmMgKi8KLQotZXh0ZXJuIHZvaWQgU1lTTUVUUklDU19Jbml0KHZvaWQpOwotCiAjZW5kaWYgLyogV0lORUxJQiAqLwogI2VuZGlmIC8qIF9XSU5FX1BST1RPVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZWdpc3RlcnMuaCBiL2luY2x1ZGUvcmVnaXN0ZXJzLmgKaW5kZXggMjZhNzc3NC4uY2UwNmEwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZWdpc3RlcnMuaAorKysgYi9pbmNsdWRlL3JlZ2lzdGVycy5oCkBAIC0yOSw4ICsyOSw4IEBACiAjZGVmaW5lIEVTIGNvbnRleHQtPnNjX2VzCiAjZGVmaW5lIFNTIGNvbnRleHQtPnNjX3NzCiAKLSNkZWZpbmUgREkgY29udGV4dC0+c2NfZWRpCi0jZGVmaW5lIFNJIGNvbnRleHQtPnNjX2VzaQorI2RlZmluZSBESSAoKFdPUkQpY29udGV4dC0+c2NfZWRpKQorI2RlZmluZSBTSSAoKFdPUkQpY29udGV4dC0+c2NfZXNpKQogI2RlZmluZSBTUCBjb250ZXh0LT5zY19lc3AKICNpZm5kZWYgX19GcmVlQlNEX18KICNkZWZpbmUgRUZMIGNvbnRleHQtPnNjX2VmbGFncwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3JvbGwuaCBiL2luY2x1ZGUvc2Nyb2xsLmgKaW5kZXggZjgwZWVmZC4uNjgxZDRkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3JvbGwuaAorKysgYi9pbmNsdWRlL3Njcm9sbC5oCkBAIC0yMCw3ICsyMCw4IEBACiB9IFNDUk9MTElORk87CiAKIGV4dGVybiBMT05HIFNjcm9sbEJhclduZFByb2MoIEhXTkQgaHduZCwgV09SRCB1TXNnLCBXT1JEIHdQYXJhbSwgTE9ORyBsUGFyYW0gKTsKLQogZXh0ZXJuIHZvaWQgU0NST0xMX0RyYXdTY3JvbGxCYXIoIEhXTkQgaHduZCwgSERDIGhkYywgaW50IG5CYXIgKTsKK2V4dGVybiB2b2lkIFNDUk9MTF9IYW5kbGVTY3JvbGxFdmVudCggSFdORCBod25kLCBpbnQgbkJhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09SRCBtc2csIFBPSU5UIHB0KTsgICAgICAgLyogc2Nyb2xsLmMgKi8KIAogI2VuZGlmICAvKiBTQ1JPTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zZWxlY3RvcnMuaCBiL2luY2x1ZGUvc2VsZWN0b3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFjNmZhOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc2VsZWN0b3JzLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX1dJTkVfU0VMRUNUT1JTX0gKKyNkZWZpbmUgX19XSU5FX1NFTEVDVE9SU19ICisKKyNpbmNsdWRlICJkbGxzLmgiCisKK2V4dGVybiBpbnQgRmluZFVudXNlZFNlbGVjdG9ycyhpbnQgbl9zZWxlY3RvcnMpOworZXh0ZXJuIGludCBJUENDb3B5U2VsZWN0b3IoaW50IGlfb2xkLCB1bnNpZ25lZCBsb25nIG5ldywgaW50IHN3YXBfdHlwZSk7CitleHRlcm4gV09SRCBBbGxvY1NlbGVjdG9yKFdPUkQgb2xkX3NlbGVjdG9yKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgUHJlc3RvQ2hhbmdvU2VsZWN0b3IodW5zaWduZWQgc3JjX3NlbGVjdG9yLCB1bnNpZ25lZCBkc3Rfc2VsZWN0b3IpOworZXh0ZXJuIFdPUkQgQWxsb2NEU3RvQ1NBbGlhcyhXT1JEIGRzX3NlbGVjdG9yKTsKK2V4dGVybiBTRUdERVNDICpDcmVhdGVTZWxlY3RvcnMoc3RydWN0ICB3X2ZpbGVzICogd3BudCk7CitleHRlcm4gV09SRCBGcmVlU2VsZWN0b3IoV09SRCBzZWwpOworCitleHRlcm4gU0VHREVTQyAqQ3JlYXRlTmV3U2VnbWVudHMoaW50IGNvZGVfZmxhZywgaW50IHJlYWRfb25seSwgaW50IGxlbmd0aCwgCisJCQkJCWludCBuX3NlZ21lbnRzKTsKK2V4dGVybiBTRUdERVNDICpHZXROZXh0U2VnbWVudCh1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBsaW1pdCk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgR2V0RW50cnlETExOYW1lKGNoYXIgKmRsbF9uYW1lLCBjaGFyICpmdW5jdGlvbiwgaW50ICpzZWwsCisJCQkJCWludCAqYWRkcik7CitleHRlcm4gdW5zaWduZWQgaW50IEdldEVudHJ5RExMT3JkaW5hbChjaGFyICpkbGxfbmFtZSwgaW50IG9yZGluYWwsIGludCAqc2VsLAorCQkJCQlpbnQgKmFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGludCBHZXRFbnRyeVBvaW50RnJvbU9yZGluYWwoc3RydWN0IHdfZmlsZXMgKiB3cG50LCAKKwkJCQkJaW50IG9yZGluYWwpOworCisjZW5kaWYgLyogX19XSU5FX1NFTEVDVE9SU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3N0ZGRlYnVnLmggYi9pbmNsdWRlL3N0ZGRlYnVnLmgKaW5kZXggN2M1Y2NiZi4uNDgzNDhjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zdGRkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvc3RkZGVidWcuaApAQCAtMTI5LDkgKzEyOSwxMSBAQAogI3VuZGVmIERFQlVHX1BST1AKICN1bmRlZiBERUJVR19SRUcKICN1bmRlZiBERUJVR19SRUdJT04KKyN1bmRlZiBERUJVR19SRUxBWQogI3VuZGVmIERFQlVHX1JFU09VUkNFCiAjdW5kZWYgREVCVUdfU0NST0xMCiAjdW5kZWYgREVCVUdfU0VMRUNUT1JTCisjdW5kZWYgREVCVUdfU1RBQ0sKICN1bmRlZiBERUJVR19TVFJFU1MKICN1bmRlZiBERUJVR19TWVNDT0xPUgogI3VuZGVmIERFQlVHX1RBU0sKQEAgLTE5Niw5ICsxOTgsMTEgQEAKICNkZWZpbmUgREVCVUdfUFJPUAogI2RlZmluZSBERUJVR19SRUcKICNkZWZpbmUgREVCVUdfUkVHSU9OCisjZGVmaW5lIERFQlVHX1JFTEFZCiAjZGVmaW5lIERFQlVHX1JFU09VUkNFCiAjZGVmaW5lIERFQlVHX1NDUk9MTAogI2RlZmluZSBERUJVR19TRUxFQ1RPUlMKKyNkZWZpbmUgREVCVUdfU1RBQ0sKICNkZWZpbmUgREVCVUdfU1RSRVNTCiAjZGVmaW5lIERFQlVHX1NZU0NPTE9SCiAjZGVmaW5lIERFQlVHX1RBU0sKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3lzY29sb3IuaCBiL2luY2x1ZGUvc3lzY29sb3IuaAppbmRleCA3MDAxNDQ4Li4wMTQ0OTUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3N5c2NvbG9yLmgKKysrIGIvaW5jbHVkZS9zeXNjb2xvci5oCkBAIC0zNCw2ICszNCw3IEBACiAgICAgSEJSVVNIIGhicnVzaEJ0bkhpZ2hsaWdodDsgICAgIC8qIENPTE9SX0JUTkhJR0hMSUdIVCAgICAgICAgKi8KIH07CiAKK2V4dGVybiB2b2lkIFNZU0NPTE9SX0luaXQodm9pZCk7CiBleHRlcm4gc3RydWN0IFN5c0NvbG9yT2JqZWN0cyBzeXNDb2xvck9iamVjdHM7CiAKICNlbmRpZiAgLyogU1lTQ09MT1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zeXNtZXRyaWNzLmggYi9pbmNsdWRlL3N5c21ldHJpY3MuaAppbmRleCAxODZkMjEzLi5mOWU3M2U3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3N5c21ldHJpY3MuaAorKysgYi9pbmNsdWRlL3N5c21ldHJpY3MuaApAQCAtNDgsOCArNDgsNyBAQAogI2RlZmluZSBTWVNNRVRSSUNTX0NZRE9VQkxFQ0xLICAgICAgICAgc3lzTWV0cmljc1tTTV9DWURPVUJMRUNMS10KICNkZWZpbmUgU1lTTUVUUklDU19NRU5VRFJPUEFMSUdOTUVOVCAgIHN5c01ldHJpY3NbU01fTUVOVURST1BBTElHTk1FTlRdCiAKLQorZXh0ZXJuIHZvaWQgU1lTTUVUUklDU19Jbml0KHZvaWQpOwogZXh0ZXJuIHNob3J0IHN5c01ldHJpY3NbU01fQ01FVFJJQ1NdOwogCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW4uaCBiL2luY2x1ZGUvd2luLmgKaW5kZXggOGUwOTNiYS4uZDQ3Y2IyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS93aW4uaAorKysgYi9pbmNsdWRlL3dpbi5oCkBAIC03Miw2ICs3Miw3IEBACiBCT09MIFdJTl9VbmxpbmtXaW5kb3coIEhXTkQgaHduZCApOwogQk9PTCBXSU5fTGlua1dpbmRvdyggSFdORCBod25kLCBIV05EIGh3bmRJbnNlcnRBZnRlciApOwogSFdORCBXSU5fRmluZFdpblRvUmVwYWludCggSFdORCBod25kICk7CitCT09MIFdJTl9DcmVhdGVEZXNrdG9wV2luZG93KHZvaWQpOwogQk9PTCBXSU5QT1NfSXNBbkFjdGl2ZVdpbmRvdyggSFdORCBod25kICk7CiB2b2lkIFdJTlBPU19BY3RpdmF0ZUNoaWxkKCBIV05EIGh3bmQgKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW5kb3dzLmggYi9pbmNsdWRlL3dpbmRvd3MuaAppbmRleCBkNGVmNmUxLi5jYjYwY2UwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3dpbmRvd3MuaAorKysgYi9pbmNsdWRlL3dpbmRvd3MuaApAQCAtMyw4NyArMywxNCBAQAogI2lmbmRlZiBXSU5ET1dTX0gKICNkZWZpbmUgV0lORE9XU19ICiAKLSNpZm5kZWYgX1dJTkFSR1MKKyNpbmNsdWRlIDx3aW50eXBlcy5oPgogCi10eXBlZGVmIHNob3J0CUlOVDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUlOVDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgV09SRDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBEV09SRDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgQk9PTDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBCWVRFOwotdHlwZWRlZiBsb25nIExPTkc7Ci10eXBlZGVmIFVJTlQgV1BBUkFNOwotdHlwZWRlZiBMT05HIExQQVJBTTsKLXR5cGVkZWYgTE9ORyBMUkVTVUxUOwotdHlwZWRlZiBXT1JEIEhBTkRMRTsKLXR5cGVkZWYgRFdPUkQgSEhPT0s7Ci10eXBlZGVmIGNoYXIgKkxQU1RSOwotdHlwZWRlZiBjb25zdCBjaGFyICpMUENTVFI7Ci10eXBlZGVmIGNoYXIgKk5QU1RSOwotdHlwZWRlZiBJTlQgKkxQSU5UOwotdHlwZWRlZiBVSU5UICpMUFVJTlQ7Ci10eXBlZGVmIFdPUkQgKkxQV09SRDsKLXR5cGVkZWYgRFdPUkQgKkxQRFdPUkQ7Ci10eXBlZGVmIExPTkcgKkxQTE9ORzsKLXR5cGVkZWYgdm9pZCAqTFBWT0lEOwotdHlwZWRlZiBsb25nICgqRkFSUFJPQykoKTsKLXR5cGVkZWYgRkFSUFJPQyBETEdQUk9DOwotdHlwZWRlZiBpbnQgQ0FUQ0hCVUZbOV07Ci10eXBlZGVmIGludCAqTFBDQVRDSEJVRjsKLXR5cGVkZWYgRkFSUFJPQyBIT09LUFJPQzsKLSNkZWZpbmUgREVDTEFSRV9IQU5ETEUoYSkgdHlwZWRlZiBIQU5ETEUgYTsKKyNwcmFnbWEgcGFjaygxKQogCi1ERUNMQVJFX0hBTkRMRShIVEFTSyk7Ci1ERUNMQVJFX0hBTkRMRShIRFJWUik7Ci1ERUNMQVJFX0hBTkRMRShIV05EKTsKLURFQ0xBUkVfSEFORExFKEhEQyk7Ci1ERUNMQVJFX0hBTkRMRShIQ0xBU1MpOwotREVDTEFSRV9IQU5ETEUoSENVUlNPUik7Ci1ERUNMQVJFX0hBTkRMRShIRk9OVCk7Ci1ERUNMQVJFX0hBTkRMRShIUEVOKTsKLURFQ0xBUkVfSEFORExFKEhSR04pOwotREVDTEFSRV9IQU5ETEUoSFBBTEVUVEUpOwotREVDTEFSRV9IQU5ETEUoSElDT04pOwotREVDTEFSRV9IQU5ETEUoSElOU1RBTkNFKTsKLURFQ0xBUkVfSEFORExFKEhNRU5VKTsKLURFQ0xBUkVfSEFORExFKEhCSVRNQVApOwotREVDTEFSRV9IQU5ETEUoSEJSVVNIKTsKLURFQ0xBUkVfSEFORExFKExPQ0FMSEFORExFKTsKLURFQ0xBUkVfSEFORExFKEhNRVRBRklMRSk7Ci1ERUNMQVJFX0hBTkRMRShIRFdQKTsKLQotI2RlZmluZSBUUlVFIDEKLSNkZWZpbmUgRkFMU0UgMAotI2RlZmluZSBDV19VU0VERUZBVUxUICgoSU5UKTB4ODAwMCkKLSNkZWZpbmUgRkFSCi0jZGVmaW5lIE5FQVIKLSNkZWZpbmUgUEFTQ0FMCi0jZGVmaW5lIFZPSUQgICAgICAgICAgICAgICAgdm9pZAotI2RlZmluZSBXSU5BUEkgICAgICAgICAgICAgIFBBU0NBTAotI2RlZmluZSBDQUxMQkFDSyAgICAgICAgICAgIFBBU0NBTAotI2lmbmRlZiBOVUxMCi0jZGVmaW5lIE5VTEwgKHZvaWQgKikwCi0jZW5kaWYKLQotI2RlZmluZSBMT0JZVEUodykgICAgICAgICAgICgoQllURSkodykpCi0jZGVmaW5lIEhJQllURSh3KSAgICAgICAgICAgKChCWVRFKSgoVUlOVCkodykgPj4gOCkpCi0KLSNkZWZpbmUgTE9XT1JEKGwpICAgICAgICAgICAoKFdPUkQpKGwpKQotI2RlZmluZSBISVdPUkQobCkgICAgICAgICAgICgoV09SRCkoKERXT1JEKShsKSA+PiAxNikpCi0KLSNkZWZpbmUgTUFLRUxPTkcobG93LCBoaWdoKSAoKExPTkcpKCgoV09SRCkobG93KSkgfCBcCi0JCQkJICAgICgoKERXT1JEKSgoV09SRCkoaGlnaCkpKSA8PCAxNikpKQotCi0jaWZuZGVmIG1heAotI2RlZmluZSBtYXgoYSxiKSAoKChhKSA+IChiKSkgPyAoYSkgOiAoYikpCi0jZW5kaWYKLQotI2lmbmRlZiBtaW4KLSNkZWZpbmUgbWluKGEsYikgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQotI2VuZGlmCi0KLQotdHlwZWRlZiBzdHJ1Y3QgeyBJTlQgeCwgeTsgfSBQT0lOVDsKK3R5cGVkZWYgc3RydWN0IHsgCisJSU5UIHg7CisJSU5UIHk7IAorfSBQT0lOVDsKIHR5cGVkZWYgUE9JTlQgKlBQT0lOVDsKIHR5cGVkZWYgUE9JTlQgKk5QUE9JTlQ7CiB0eXBlZGVmIFBPSU5UICpMUFBPSU5UOwpAQCAtMTE2LDEzICs0Myw2IEBACiB0eXBlZGVmIFBBSU5UU1RSVUNUICpOUFBBSU5UU1RSVUNUOwogdHlwZWRlZiBQQUlOVFNUUlVDVCAqTFBQQUlOVFNUUlVDVDsKIAotI2lmZGVmIFdJTkVMSUIKLSNkZWZpbmUgV0lORV9QQUNLRUQKLSNlbHNlCi0jZGVmaW5lIFdJTkVfUEFDS0VEIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQotI2VuZGlmCi0KLSNwcmFnbWEgcGFjaygxKQogCiAgIC8qIFdpbmRvdyBjbGFzc2VzICovCiAKQEAgLTIzNjMsNyArMjI4Myw2IEBACiAjZGVmaW5lIEZuKHJldCxuYW1lLHQxLGExLHQyLGEyLHQzLGEzLHQ0LGE0LHQ1LGE1LHQ2LGE2LHQ3LGE3LHQ4LGE4LHQ5LGE5LHQxMCxhMTAsdDExLGExMSx0MTIsYTEyLHQxMyxhMTMsdDE0LGExNCkgcmV0IG5hbWUodDEgYTEsdDIgYTIsdDMgYTMsdDQgYTQsdDUgYTUsdDYgYTYsdDcgYTcsdDggYTgsdDkgYTksdDEwIGExMCx0MTEgYTExLHQxMiBhMTIsdDEzIGExMyx0MTQgYTE0KTsKIAogaW50IHdzcHJpbnRmKExQU1RSIGEsTFBTVFIgYiwuLi4pOwotI2VuZGlmCiAKIC8qIEltcGxlbWVudGVkIGZ1bmN0aW9ucyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3dpbmUuaCBiL2luY2x1ZGUvd2luZS5oCmluZGV4IGNjMmVmODguLmNmN2RmZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvd2luZS5oCisrKyBiL2luY2x1ZGUvd2luZS5oCkBAIC0zMiwyMSArMzIsMTYgQEAKIAl1bnNpZ25lZCBsb25nIG9sZG1hc2s7CiAJdW5zaWduZWQgbG9uZyBjcjI7CiB9OwotI2VuZGlmCi0KLSNpZmRlZiBsaW51eAogI2RlZmluZSBXSU5FX0RBVEFfU0VMRUNUT1IgMHgyYgogI2RlZmluZSBXSU5FX0NPREVfU0VMRUNUT1IgMHgyMwogI2VuZGlmCi0jaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2RlZmluZSBXSU5FX0RBVEFfU0VMRUNUT1IgMHgyNwotI2RlZmluZSBXSU5FX0NPREVfU0VMRUNUT1IgMHgxZgotI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZGVmaW5lIHNpZ2NvbnRleHRfc3RydWN0IHNpZ2NvbnRleHQKICNkZWZpbmUgSFogMTAwCisjZGVmaW5lIFdJTkVfREFUQV9TRUxFQ1RPUiAweDI3CisjZGVmaW5lIFdJTkVfQ09ERV9TRUxFQ1RPUiAweDFmCiAjZW5kaWYKIAogI2VuZGlmIC8qIFdJTkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW5wb3MuaCBiL2luY2x1ZGUvd2lucG9zLmgKaW5kZXggODM3YTViMy4uMGQ1OGM1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS93aW5wb3MuaAorKysgYi9pbmNsdWRlL3dpbnBvcy5oCkBAIC05LDYgKzksMTUgQEAKIAogI2RlZmluZSBEV1BfTUFHSUMgIDB4NTA1NyAgLyogJ1dQJyAqLwogCitleHRlcm4gSFdORCBXSU5QT1NfQ2hhbmdlQWN0aXZlV2luZG93KCBIV05EIGh3bmQsIEJPT0wgbW91c2VNc2cgKTsgLyp3aW5wb3MuYyovCitleHRlcm4gdm9pZCBXSU5QT1NfR2V0TWluTWF4SW5mbyggSFdORCBod25kLCBQT0lOVCAqbWF4U2l6ZSwgUE9JTlQgKm1heFBvcywKKwkJCSAgICBQT0lOVCAqbWluVHJhY2ssIFBPSU5UICptYXhUcmFjayApOyAgLyogd2lucG9zLmMgKi8KK2V4dGVybiBMT05HIFdJTlBPU19TZW5kTkNDYWxjU2l6ZSggSFdORCBod25kLCBCT09MIGNhbGNWYWxpZFJlY3QsCisJCQkJICAgUkVDVCAqbmV3V2luZG93UmVjdCwgUkVDVCAqb2xkV2luZG93UmVjdCwKKwkJCQkgICBSRUNUICpvbGRDbGllbnRSZWN0LCBXSU5ET1dQT1MgKndpbnBvcywKKwkJCQkgICBSRUNUICpuZXdDbGllbnRSZWN0ICk7ICAvKiB3aW5wb3MuYyAqLworZXh0ZXJuIExPTkcgV0lOUE9TX0hhbmRsZVdpbmRvd1Bvc0NoYW5naW5nKCBXSU5ET1dQT1MgKndpbnBvcyApOyAvKiB3aW5wb3MuYyAqLworCiB0eXBlZGVmIHN0cnVjdAogewogICAgIFdPUkQgICAgICAgIGFjdHVhbENvdW50OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW50eXBlcy5oIGIvaW5jbHVkZS93aW50eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOTlmZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3dpbnR5cGVzLmgKQEAgLTAsMCArMSw5MiBAQAorI2lmbmRlZiBfX1dJTkVfV0lOVFlQRVNfSAorI2RlZmluZSBfX1dJTkVfV0lOVFlQRVNfSAorCit0eXBlZGVmIHNob3J0CUlOVDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUlOVDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgV09SRDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBEV09SRDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgQk9PTDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBCWVRFOwordHlwZWRlZiBsb25nIExPTkc7Cit0eXBlZGVmIFVJTlQgV1BBUkFNOwordHlwZWRlZiBMT05HIExQQVJBTTsKK3R5cGVkZWYgTE9ORyBMUkVTVUxUOwordHlwZWRlZiBXT1JEIEhBTkRMRTsKK3R5cGVkZWYgRFdPUkQgSEhPT0s7Cit0eXBlZGVmIGNoYXIgKkxQU1RSOwordHlwZWRlZiBjb25zdCBjaGFyICpMUENTVFI7Cit0eXBlZGVmIGNoYXIgKk5QU1RSOwordHlwZWRlZiBJTlQgKkxQSU5UOwordHlwZWRlZiBVSU5UICpMUFVJTlQ7Cit0eXBlZGVmIFdPUkQgKkxQV09SRDsKK3R5cGVkZWYgRFdPUkQgKkxQRFdPUkQ7Cit0eXBlZGVmIExPTkcgKkxQTE9ORzsKK3R5cGVkZWYgdm9pZCAqTFBWT0lEOwordHlwZWRlZiBsb25nICgqRkFSUFJPQykoKTsKK3R5cGVkZWYgRkFSUFJPQyBETEdQUk9DOwordHlwZWRlZiBpbnQgQ0FUQ0hCVUZbOV07Cit0eXBlZGVmIGludCAqTFBDQVRDSEJVRjsKK3R5cGVkZWYgRkFSUFJPQyBIT09LUFJPQzsKKworI2RlZmluZSBERUNMQVJFX0hBTkRMRShhKSB0eXBlZGVmIEhBTkRMRSBhOworCitERUNMQVJFX0hBTkRMRShIVEFTSyk7CitERUNMQVJFX0hBTkRMRShIRFJWUik7CitERUNMQVJFX0hBTkRMRShIV05EKTsKK0RFQ0xBUkVfSEFORExFKEhEQyk7CitERUNMQVJFX0hBTkRMRShIQ0xBU1MpOworREVDTEFSRV9IQU5ETEUoSENVUlNPUik7CitERUNMQVJFX0hBTkRMRShIRk9OVCk7CitERUNMQVJFX0hBTkRMRShIUEVOKTsKK0RFQ0xBUkVfSEFORExFKEhSR04pOworREVDTEFSRV9IQU5ETEUoSFBBTEVUVEUpOworREVDTEFSRV9IQU5ETEUoSElDT04pOworREVDTEFSRV9IQU5ETEUoSElOU1RBTkNFKTsKK0RFQ0xBUkVfSEFORExFKEhNRU5VKTsKK0RFQ0xBUkVfSEFORExFKEhCSVRNQVApOworREVDTEFSRV9IQU5ETEUoSEJSVVNIKTsKK0RFQ0xBUkVfSEFORExFKExPQ0FMSEFORExFKTsKK0RFQ0xBUkVfSEFORExFKEhNRVRBRklMRSk7CitERUNMQVJFX0hBTkRMRShIRFdQKTsKK0RFQ0xBUkVfSEFORExFKEhEUk9QKTsKKworI2RlZmluZSBUUlVFIDEKKyNkZWZpbmUgRkFMU0UgMAorI2RlZmluZSBDV19VU0VERUZBVUxUICgoSU5UKTB4ODAwMCkKKyNkZWZpbmUgRkFSCisjZGVmaW5lIE5FQVIKKyNkZWZpbmUgUEFTQ0FMCisjZGVmaW5lIFZPSUQgICAgICAgICAgICAgICAgdm9pZAorI2RlZmluZSBXSU5BUEkgICAgICAgICAgICAgIFBBU0NBTAorI2RlZmluZSBDQUxMQkFDSyAgICAgICAgICAgIFBBU0NBTAorCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAodm9pZCAqKTAKKyNlbmRpZgorCisjaWZkZWYgV0lORUxJQgorI2RlZmluZSBXSU5FX1BBQ0tFRAorI2Vsc2UKKyNkZWZpbmUgV0lORV9QQUNLRUQgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisjZW5kaWYKKworI3ByYWdtYSBwYWNrKDEpCisKKyNkZWZpbmUgTE9CWVRFKHcpICAgICAgICAgICAoKEJZVEUpKHcpKQorI2RlZmluZSBISUJZVEUodykgICAgICAgICAgICgoQllURSkoKFVJTlQpKHcpID4+IDgpKQorCisjZGVmaW5lIExPV09SRChsKSAgICAgICAgICAgKChXT1JEKShsKSkKKyNkZWZpbmUgSElXT1JEKGwpICAgICAgICAgICAoKFdPUkQpKChEV09SRCkobCkgPj4gMTYpKQorCisjZGVmaW5lIE1BS0VMT05HKGxvdywgaGlnaCkgKChMT05HKSgoKFdPUkQpKGxvdykpIHwgXAorCQkJCSAgICAoKChEV09SRCkoKFdPUkQpKGhpZ2gpKSkgPDwgMTYpKSkKKworI2lmbmRlZiBtYXgKKyNkZWZpbmUgbWF4KGEsYikgKCgoYSkgPiAoYikpID8gKGEpIDogKGIpKQorI2VuZGlmCisKKyNpZm5kZWYgbWluCisjZGVmaW5lIG1pbihhLGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKyNlbmRpZgorCisjZW5kaWYgLyogX19XSU5FX1dJTlRZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2xvYWRlci9kdW1wLmMgYi9sb2FkZXIvZHVtcC5jCmluZGV4IDFjZjg0ZmEuLmM4MTFlNDQgMTAwNjQ0Ci0tLSBhL2xvYWRlci9kdW1wLmMKKysrIGIvbG9hZGVyL2R1bXAuYwpAQCAtMSw3ICsxLDggQEAKICNpZm5kZWYgV0lORUxJQgorLyoKIHN0YXRpYyBjaGFyIFJDU0lkW10gPSAiJElkOiBkdW1wLmMsdiAxLjIgMTk5My8wNy8wNCAwNDowNDoyMSByb290IEV4cCByb290ICQiOwogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBSb2JlcnQgSi4gQW1zdGFkdCwgMTk5MyI7Ci0KKyovCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2xvYWRlci9sZHQuYyBiL2xvYWRlci9sZHQuYwppbmRleCAwZmQ0YzAwLi40NWI2YWU0IDEwMDY0NAotLS0gYS9sb2FkZXIvbGR0LmMKKysrIGIvbG9hZGVyL2xkdC5jCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBXSU5FTElCCisvKgogc3RhdGljIGNoYXIgUkNTSWRbXSA9ICIkSWQ6IGxkdC5jLHYgMS4yIDE5OTMvMDcvMDQgMDQ6MDQ6MjEgcm9vdCBFeHAgcm9vdCAkIjsKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgUm9iZXJ0IEouIEFtc3RhZHQsIDE5OTMiOworKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CmRpZmYgLS1naXQgYS9sb2FkZXIvbGR0bGliLmMgYi9sb2FkZXIvbGR0bGliLmMKaW5kZXggNDU0NjU2MC4uZWIxMzUwOCAxMDA2NDQKLS0tIGEvbG9hZGVyL2xkdGxpYi5jCisrKyBiL2xvYWRlci9sZHRsaWIuYwpAQCAtMSwxMyArMSwxMyBAQAogI2lmbmRlZiBXSU5FTElCCisvKgogc3RhdGljIGNoYXIgUkNTSWRbXSA9ICIkSWQ6IGxkdGxpYi5jLHYgMS4yIDE5OTMvMDcvMDQgMDQ6MDQ6MjEgcm9vdCBFeHAgcm9vdCAkIjsKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgUm9iZXJ0IEouIEFtc3RhZHQsIDE5OTMiOworKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgotLyogI2RlZmluZSBERUJVR19MRFQgKi8KLS8qICN1bmRlZiBERUJVR19MRFQgICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogI2lmZGVmIGxpbnV4CmRpZmYgLS1naXQgYS9sb2FkZXIvbGlicmFyeS5jIGIvbG9hZGVyL2xpYnJhcnkuYwppbmRleCAzYjEzODYwLi42ZDdlOTczIDEwMDY0NAotLS0gYS9sb2FkZXIvbGlicmFyeS5jCisrKyBiL2xvYWRlci9saWJyYXJ5LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogICAgICAgIE1vZHVsZSAmIExpYnJhcnkgZnVuY3Rpb25zCi0gKi8KIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAxOTkzLCAxOTk0IE1hcnRpbiBBeW90dGUsIFJvYmVydCBKLiBBbXN0YWR0LCBFcmlrIEJvcyI7CisqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTEzLDI0ICsxMywyMSBAQAogI2luY2x1ZGUgIm5lZXhlLmgiCiAjaW5jbHVkZSAic2VnbWVtLmgiCiAjaW5jbHVkZSAiZGxscy5oIgotI2luY2x1ZGUgIndpbmUuaCIKKyNpbmNsdWRlICJpZjE2MzIuaCIKICNpbmNsdWRlICJ3aW5lb3B0cy5oIgogI2luY2x1ZGUgImFyY2guaCIKICNpbmNsdWRlICJvcHRpb25zLmgiCi0jaW5jbHVkZSAicHJvdG90eXBlcy5oIgorI2luY2x1ZGUgImRvc19mcy5oIgogI2luY2x1ZGUgIndpbmRvd3MuaCIKICNpbmNsdWRlICJ0YXNrLmgiCiAjaW5jbHVkZSAidG9vbGhlbHAuaCIKKyNpbmNsdWRlICJzZWxlY3RvcnMuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgotLyogI2RlZmluZSBERUJVR19NT0RVTEUgKi8KLS8qICN1bmRlZiBERUJVR19NT0RVTEUgICovCiAjaW5jbHVkZSAiZGVidWcuaCIKLQotZXh0ZXJuIGNoYXIgV2luZG93c1BhdGhbMjU2XTsKLWV4dGVybiBzdHJ1Y3QgZGxsX25hbWVfdGFibGVfZW50cnlfcyBkbGxfYnVpbHRpbl90YWJsZVtdOwotZXh0ZXJuIGNoYXIgKkdldERvc0ZpbGVOYW1lKGNoYXIgKik7Ci0KLWV4dGVybiBIQU5ETEUgaFN5c1JlczsKKyNpbmNsdWRlICJwcm90b3R5cGVzLmgiCisjaW5jbHVkZSAibGlicmFyeS5oIgorI2luY2x1ZGUgIm5lX2ltYWdlLmgiCisjaW5jbHVkZSAicGVfaW1hZ2UuaCIKIAogc3RydWN0IHdfZmlsZXMgKndpbmVfZmlsZXMgPSBOVUxMOwogc3RhdGljIGNoYXIgKkRMTF9FeHRlbnNpb25zW10gPSB7ICJkbGwiLCBOVUxMIH07CkBAIC01OCw4ICs1NSw3IEBACiAJfQogfQogCi1zdHJ1Y3Qgd19maWxlcyAqCi1HZXRGaWxlSW5mbyh1bnNpZ25lZCBzaG9ydCBpbnN0YW5jZSkKK3N0cnVjdCB3X2ZpbGVzICpHZXRGaWxlSW5mbyh1bnNpZ25lZCBzaG9ydCBpbnN0YW5jZSkKIHsKICAgICByZWdpc3RlciBzdHJ1Y3Qgd19maWxlcyAqdyA9IHdpbmVfZmlsZXM7CiAKQEAgLTg2LDkgKzgyLDkgQEAKIHZvaWQgSW5pdERMTChzdHJ1Y3Qgd19maWxlcyAqd3BudCkKIHsKIAlpZiAod3BudC0+bmUpIAotCQlJbml0TkVETEwod3BudCk7CisJCU5FX0luaXRETEwod3BudCk7CiAJZWxzZQotCQlJbml0UEVETEwod3BudCk7CisJCVBFX0luaXRETEwod3BudCk7CiB9CiAKIHZvaWQgSW5pdGlhbGl6ZUxvYWRlZERMTHMoc3RydWN0IHdfZmlsZXMgKndwbnQpCkBAIC0xNTQsNyArMTUwLDcgQEAKICAgICAvKgogICAgICAqIHNlYXJjaCBmaWxlCiAgICAgICovCi0gICAgZnVsbG5hbWUgPSBGaW5kRmlsZShidWZmZXIsIHNpemVvZihidWZmZXIpLCBtb2R1bGUsIAorICAgIGZ1bGxuYW1lID0gRE9TX0ZpbmRGaWxlKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIG1vZHVsZSwgCiAJCQkoZmlsZXR5cGUgPT0gRVhFID8gRVhFX0V4dGVuc2lvbnMgOiBETExfRXh0ZW5zaW9ucyksIAogCQkJV2luZG93c1BhdGgpOwogICAgIGlmIChmdWxsbmFtZSA9PSBOVUxMKQpAQCAtMTY0LDcgKzE2MCw3IEBACiAJcmV0dXJuIDI7CiAgICAgfQogCi0gICAgZnVsbG5hbWUgPSBHZXREb3NGaWxlTmFtZShmdWxsbmFtZSk7CisgICAgZnVsbG5hbWUgPSBET1NfR2V0RG9zRmlsZU5hbWUoZnVsbG5hbWUpOwogICAgIAogICAgIGRwcmludGZfbW9kdWxlKHN0ZGRlYiwiTG9hZEltYWdlOiBsb2FkaW5nICVzICglcylcbiAgICAgICAgICAgWyVzXVxuIiwgCiAJICAgIG1vZHVsZSwgYnVmZmVyLCBmdWxsbmFtZSk7CkBAIC0yMjUsNyArMjIxLDcgQEAKICAgICAvKiAKICAgICAgKiBTdGljayB0aGlzIGZpbGUgaW50byB0aGUgbGlzdCBvZiBsb2FkZWQgZmlsZXMgc28gd2UgZG9uJ3QgdHJ5IHRvIHJlbG9hZAogICAgICAqIGl0IGFnYWluIGlmIGFub3RoZXIgbW9kdWxlIHJlZmVyZW5jZXMgdGhpcyBtb2R1bGUuICBEbyB0aGlzIGJlZm9yZQotICAgICAqIGNhbGxpbmcgbG9hZE5FSW1hZ2UgYmVjYXVzZSB3ZSBtaWdodCBnZXQgYmFjayBoZXJlIGJlZm9yZSBsb2FkTkVJbWFnZQorICAgICAqIGNhbGxpbmcgTkVfTG9hZEltYWdlIGJlY2F1c2Ugd2UgbWlnaHQgZ2V0IGJhY2sgaGVyZSBiZWZvcmUgTkVfbG9hZEltYWdlCiAgICAgICogcmV0dXJucy4KICAgICAgKi8KICAgICBpZih3aW5lX2ZpbGVzID09IE5VTEwpCkBAIC0yMzksOSArMjM1LDkgQEAKICAgICB3cG50LT5uZXh0ID0gTlVMTDsKIAogICAgIGlmIChoZWFkZXJbMF0gPT0gJ04nICYmIGhlYWRlclsxXSA9PSAnRScpCi0gICAgCWhhbmRsZSA9IExvYWRORUltYWdlKHdwbnQpOworICAgIAloYW5kbGUgPSBORV9Mb2FkSW1hZ2Uod3BudCk7CiAgICAgaWYgKGhlYWRlclswXSA9PSAnUCcgJiYgaGVhZGVyWzFdID09ICdFJykKLSAgICAgICAgaGFuZGxlID0gTG9hZFBFSW1hZ2Uod3BudCk7CisgICAgICAgIGhhbmRsZSA9IFBFX0xvYWRJbWFnZSh3cG50KTsKICAgICB3cG50LT5oaW5zdGFuY2UgPSBoYW5kbGU7CiAKICAgICBpZiAoaGFuZGxlID4gMzIpIHsKQEAgLTM2NSw3ICszNjEsNyBAQAogICAgIC8qIGNoZWNrIGxvYWRlZCBkbGxzICovCiAgICAgaWYgKCh3ID0gR2V0RmlsZUluZm8oaE1vZHVsZSkpID09IE5VTEwpCiAgICAgCXJldHVybiAwOwotICAgIHN0ciA9IEdldERvc0ZpbGVOYW1lKHctPmZpbGVuYW1lKTsKKyAgICBzdHIgPSBET1NfR2V0RG9zRmlsZU5hbWUody0+ZmlsZW5hbWUpOwogICAgIGlmIChuU2l6ZSA+IHN0cmxlbihzdHIpKSBuU2l6ZSA9IHN0cmxlbihzdHIpICsgMTsKICAgICBzdHJuY3B5KGxwRmlsZU5hbWUsIHN0ciwgblNpemUpOwogICAgIGRwcmludGZfbW9kdWxlKHN0ZGRlYiwiR2V0TW9kdWxlRmlsZU5hbWUgY29waWVkICclcycgcmV0dXJuICVkIFxuIiwgbHBGaWxlTmFtZSwgblNpemUpOwpAQCAtNDA2LDkgKzQwMiw5IEBACiAJCQlpZiAobHBNb2QtPkNvdW50ID09IDEpIHsKIAkJCQl3cG50ID0gR2V0RmlsZUluZm8oaExpYik7CiAJCQkJaWYgKHdwbnQtPm5lKQotCQkJCQlORXVubG9hZEltYWdlKHdwbnQpOworCQkJCQlORV9VbmxvYWRJbWFnZSh3cG50KTsKIAkJCQllbHNlCi0JCQkJCVBFdW5sb2FkSW1hZ2Uod3BudCk7CisJCQkJCVBFX1VubG9hZEltYWdlKHdwbnQpOwogCQkJCWlmIChoTGliICE9IChIQU5ETEUpTlVMTCkgR2xvYmFsRnJlZShoTGliKTsKIAkJCQlpZiAobHBNb2QtPk1vZHVsZU5hbWUgIT0gTlVMTCkgZnJlZShscE1vZC0+TW9kdWxlTmFtZSk7CiAJCQkJaWYgKGxwTW9kLT5GaWxlTmFtZSAhPSBOVUxMKSBmcmVlKGxwTW9kLT5GaWxlTmFtZSk7CmRpZmYgLS1naXQgYS9sb2FkZXIvbWFpbi5jIGIvbG9hZGVyL21haW4uYwppbmRleCA1NzIxYTUyLi4xMGRkODgzIDEwMDY0NAotLS0gYS9sb2FkZXIvbWFpbi5jCisrKyBiL2xvYWRlci9tYWluLmMKQEAgLTEsNiArMSw3IEBACisvKgogc3RhdGljIGNoYXIgUkNTSWRbXSA9ICIkSWQ6IHdpbmUuYyx2IDEuMiAxOTkzLzA3LzA0IDA0OjA0OjIxIHJvb3QgRXhwIHJvb3QgJCI7CiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIFJvYmVydCBKLiBBbXN0YWR0LCAxOTkzIjsKLQorKi8KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtMTEsMjYgKzEyLDI0IEBACiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlICJuZWV4ZS5oIgogI2luY2x1ZGUgInNlZ21lbS5oIgotI2luY2x1ZGUgInByb3RvdHlwZXMuaCIKKyNpbmNsdWRlICJkb3NfZnMuaCIKICNpbmNsdWRlICJkbGxzLmgiCi0jaW5jbHVkZSAid2luZS5oIgorI2luY2x1ZGUgImxpYnJhcnkuaCIKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAid2luZW9wdHMuaCIKLSNpbmNsdWRlICJhcmNoLmgiCisjaW5jbHVkZSAiZG9zX2ZzLmgiCiAjaW5jbHVkZSAidGFzay5oIgorI2luY2x1ZGUgInByb3RvdHlwZXMuaCIKICNpbmNsdWRlICJvcHRpb25zLmgiCisjaW5jbHVkZSAiaWYxNjMyLmgiCisjaW5jbHVkZSAibmVfaW1hZ2UuaCIKKyNpbmNsdWRlICJwZV9pbWFnZS5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCi0vKiAjZGVmaW5lIERFQlVHX0RMTCAqLwotLyogI3VuZGVmICBERUJVR19ETEwgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCi0KLWNoYXIgKkdldERvc0ZpbGVOYW1lKGNoYXIgKnVuaXhmaWxlbmFtZSk7Ci1leHRlcm4gY2hhciBXaW5kb3dzUGF0aFsyNTZdOwotCiBjaGFyICoqQXJndjsKIGludCBBcmdjOwotSElOU1RBTkNFIGhTeXNSZXM7CitISU5TVEFOQ0UgaFN5c1JlcywgaEluc3RNYWluOwogdW5zaWduZWQgc2hvcnQgV0lOX1N0YWNrU2l6ZTsKIHVuc2lnbmVkIHNob3J0IFdJTl9IZWFwU2l6ZTsKIApAQCAtNTUsOCArNTQsOCBAQAogaW50IF9XaW5NYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAljaGFyICpwLCBmaWxlbmFtZVsyNTZdOwotCUhBTkRMRQkJaFRhc2tNYWluOwotCUhJTlNUQU5DRQloSW5zdE1haW47CisJSEFORExFCWhUYXNrTWFpbjsKKwogCXN0cnVjdCB3X2ZpbGVzICp3cG50OwogI2lmZGVmIFdJTkVTVEFUCiAJY2hhciAqIGNwOwpAQCAtNzMsMTEgKzcyLDExIEBACiAJICAgIGZpbGVuYW1lW3AgLSBBcmd2WzBdXSA9ICdcMCc7CiAJICAgIHN0cmNhdChXaW5kb3dzUGF0aCwgIjsiKTsKIAkgICAgaWYgKHN0cmNocihmaWxlbmFtZSwgJy8nKSkKLQkJICAgIHN0cmNhdChXaW5kb3dzUGF0aCwgR2V0RG9zRmlsZU5hbWUoZmlsZW5hbWUpKTsKKwkJICAgIHN0cmNhdChXaW5kb3dzUGF0aCwgRE9TX0dldERvc0ZpbGVOYW1lKGZpbGVuYW1lKSk7CiAJICAgIGVsc2UKIAkgICAgCSAgICBzdHJjYXQoV2luZG93c1BhdGgsIGZpbGVuYW1lKTsKIAl9Ci0JCisKIAlpZiAoKGhJbnN0TWFpbiA9IExvYWRJbWFnZShBcmd2WzBdLCBFWEUsIDEpKSA8IDMyKSB7CiAJCWZwcmludGYoc3RkZXJyLCAid2luZTogY2FuJ3QgbG9hZCAlcyEuXG4iLCBBcmd2WzBdKTsKIAkJZXhpdCgxKTsKQEAgLTk3LDYgKzk2LDcgQEAKICAJICAgIGRwcmludGZfZGxsKHN0ZGRlYiwiU3lzdGVtIFJlc291cmNlcyBMb2FkZWQgLy8gaFN5c1Jlcz0nJTA0WCdcbiIsCiAJCQloU3lzUmVzKTsKIAkKKwogI2lmZGVmIFdJTkVTVEFUCiAgICAgY3AgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJyk7CiAgICAgaWYoIWNwKSBjcCA9IGFyZ3ZbMF07CkBAIC0xMTcsOSArMTE3LDkgQEAKIAl3aW5lX2RlYnVnKDAsIE5VTEwpOwogCiAgICAgaWYgKHdwbnQtPm5lKQotCVN0YXJ0TkVwcm9ncmFtKHdwbnQpOworCXJldHVybihORV9TdGFydFByb2dyYW0od3BudCkpOwogICAgIGVsc2UKLQlTdGFydFBFcHJvZ3JhbSh3cG50KTsKKwlyZXR1cm4oUEVfU3RhcnRQcm9ncmFtKHdwbnQpKTsKIH0KIAogI2VuZGlmIC8qICNpZm5kZWYgV0lORUxJQiAqLwpkaWZmIC0tZ2l0IGEvbG9hZGVyL25lX2ltYWdlLmMgYi9sb2FkZXIvbmVfaW1hZ2UuYwppbmRleCA4Y2Y2MmE5Li45ZTEwYWU5IDEwMDY0NAotLS0gYS9sb2FkZXIvbmVfaW1hZ2UuYworKysgYi9sb2FkZXIvbmVfaW1hZ2UuYwpAQCAtMSw2ICsxLDcgQEAKKy8qCiBzdGF0aWMgY2hhciBSQ1NJZFtdID0gIiRJZDogd2luZS5jLHYgMS4yIDE5OTMvMDcvMDQgMDQ6MDQ6MjEgcm9vdCBFeHAgcm9vdCAkIjsKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgUm9iZXJ0IEouIEFtc3RhZHQsIDE5OTMiOwotCisqLwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC04LDE4MCArOSw2MyBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KLSNpZmRlZiBsaW51eAotI2luY2x1ZGUgPGxpbnV4L2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9sZHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zZWdtZW50Lmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgIm5lZXhlLmgiCiAjaW5jbHVkZSAic2VnbWVtLmgiCi0jaW5jbHVkZSAicHJvdG90eXBlcy5oIgogI2luY2x1ZGUgImRsbHMuaCIKLSNpbmNsdWRlICJ3aW5lLmgiCiAjaW5jbHVkZSAid2luZG93cy5oIgotI2luY2x1ZGUgIndpbmVvcHRzLmgiCiAjaW5jbHVkZSAiYXJjaC5oIgotI2luY2x1ZGUgIm9wdGlvbnMuaCIKKyNpbmNsdWRlICJsaWJyYXJ5LmgiCisjaW5jbHVkZSAiaWYxNjMyLmgiCisjaW5jbHVkZSAic2VsZWN0b3JzLmgiCisjaW5jbHVkZSAibmVfaW1hZ2UuaCIKKyNpbmNsdWRlICJwcm90b3R5cGVzLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCi1leHRlcm4gSEFORExFIENyZWF0ZU5ld1Rhc2soSElOU1RBTkNFIGhJbnN0KTsKLWV4dGVybiB2b2lkIEluaXRpYWxpemVMb2FkZWRETExzKHN0cnVjdCB3X2ZpbGVzICp3cG50KTsKLWV4dGVybiBpbnQgQ2FsbFRvSW5pdDE2KHVuc2lnbmVkIGxvbmcgY3NpcCwgdW5zaWduZWQgbG9uZyBzc3NwLCAKLQkJCXVuc2lnbmVkIHNob3J0IGRzKTsKLWV4dGVybiBpbnQgQ2FsbFRvMTZjeCh1bnNpZ25lZCBsb25nIGNzaXAsIHVuc2lnbmVkIGxvbmcgZHNjeCk7Ci1leHRlcm4gdm9pZCBDYWxsVG8zMigpOwotZXh0ZXJuIGNoYXIgV2luZG93c1BhdGhbMjU2XTsKIGV4dGVybiB1bnNpZ25lZCBzaG9ydCBXSU5fU3RhY2tTaXplOwogZXh0ZXJuIHVuc2lnbmVkIHNob3J0IFdJTl9IZWFwU2l6ZTsKIAotaW50IEZpeHVwU2VnbWVudChzdHJ1Y3Qgd19maWxlcyAqLCBpbnQpOwogdm9pZCBGaXh1cEZ1bmN0aW9uUHJvbG9ncyhzdHJ1Y3Qgd19maWxlcyAqKTsKLWNoYXIgKkdldE1vZHVsZU5hbWUoc3RydWN0IHdfZmlsZXMgKiB3cG50LCBpbnQgaW5kZXgsIGNoYXIgKmJ1ZmZlcik7Ci0KLSNpZm5kZWYgV0lORUxJQgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZCBsb2FkX25lX2hlYWRlciAoaW50IGZkLCBzdHJ1Y3QgbmVfaGVhZGVyX3MgKm5lX2hlYWRlcikKLXsKLSAgICBpZiAocmVhZChmZCwgbmVfaGVhZGVyLCBzaXplb2Yoc3RydWN0IG5lX2hlYWRlcl9zKSkgCi0JIT0gc2l6ZW9mKHN0cnVjdCBuZV9oZWFkZXJfcykpCi0gICAgewotCW15ZXJyb3IoIlVuYWJsZSB0byByZWFkIE5FIGhlYWRlciBmcm9tIGZpbGUiKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJTG9hZE5FSW1hZ2UKLSAqIExvYWQgb25lIE5FIGZvcm1hdCBleGVjdXRhYmxlIGludG8gbWVtb3J5Ci0gKi8KLUhJTlNUQU5DRSBMb2FkTkVJbWFnZShzdHJ1Y3Qgd19maWxlcyAqd3BudCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgcmVhZF9zaXplLCBzdGF0dXMsIHNlZ21lbnQ7Ci0gICAgaW50IGk7Ci0KLSAgICB3cG50LT5uZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG5lX2RhdGEpKTsKLSAgICB3cG50LT5uZS0+cmVzbmFtdGFiID0gTlVMTDsKLSAgICB3cG50LT5uZS0+bmVfaGVhZGVyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmVfaGVhZGVyX3MpKTsKLSAgICBsc2Vlayh3cG50LT5mZCwgd3BudC0+bXpfaGVhZGVyLT5uZV9vZmZzZXQsIFNFRUtfU0VUKTsKLSAgICBsb2FkX25lX2hlYWRlcih3cG50LT5mZCwgd3BudC0+bmUtPm5lX2hlYWRlcik7Ci0KLSNpZm5kZWYgV0lORUxJQgotICAgIC8qCi0gICAgICogQ3JlYXRlIHNlZ21lbnQgc2VsZWN0b3JzLgotICAgICAqLwotICAgIHN0YXR1cyA9IGxzZWVrKHdwbnQtPmZkLCB3cG50LT5tel9oZWFkZXItPm5lX29mZnNldCArIAotCQkgICB3cG50LT5uZS0+bmVfaGVhZGVyLT5zZWdtZW50X3RhYl9vZmZzZXQsCi0JCSAgIFNFRUtfU0VUKTsKLSAgICByZWFkX3NpemUgID0gd3BudC0+bmUtPm5lX2hlYWRlci0+bl9zZWdtZW50X3RhYiAqCi0Jc2l6ZW9mKHN0cnVjdCBuZV9zZWdtZW50X3RhYmxlX2VudHJ5X3MpOwotICAgIHdwbnQtPm5lLT5zZWdfdGFibGUgPSAoc3RydWN0IG5lX3NlZ21lbnRfdGFibGVfZW50cnlfcyAqKSBtYWxsb2MocmVhZF9zaXplKTsKLSAgICBpZiAocmVhZCh3cG50LT5mZCwgd3BudC0+bmUtPnNlZ190YWJsZSwgcmVhZF9zaXplKSAhPSByZWFkX3NpemUpCi0JbXllcnJvcigiVW5hYmxlIHRvIHJlYWQgc2VnbWVudCB0YWJsZSBoZWFkZXIgZnJvbSBmaWxlIik7Ci0gICAgd3BudC0+bmUtPnNlbGVjdG9yX3RhYmxlID0gQ3JlYXRlU2VsZWN0b3JzKHdwbnQpOwotICAgIHdwbnQtPmhpbnN0YW5jZSA9ICh3cG50LT5uZS0+Ci0JCSAgICAgICBzZWxlY3Rvcl90YWJsZVt3cG50LT5uZS0+bmVfaGVhZGVyLT5hdXRvX2RhdGFfc2VnLTFdLgotCQkgICAgICAgc2VsZWN0b3IpOwotI2VuZGlmCi0gICAgLyogR2V0IHRoZSBsb29rdXAgIHRhYmxlLiAgVGhpcyBpcyB1c2VkIGZvciBsb29raW5nIHVwIHRoZSBhZGRyZXNzZXMKLSAgICAgICBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3J0ZWQgKi8KLQotICAgIHJlYWRfc2l6ZSAgPSB3cG50LT5uZS0+bmVfaGVhZGVyLT5lbnRyeV90YWJfbGVuZ3RoOwotICAgIHdwbnQtPm5lLT5sb29rdXBfdGFibGUgPSAoY2hhciAqKSBtYWxsb2MocmVhZF9zaXplKTsKLSAgICBsc2Vlayh3cG50LT5mZCwgd3BudC0+bXpfaGVhZGVyLT5uZV9vZmZzZXQgKyAKLQkgIHdwbnQtPm5lLT5uZV9oZWFkZXItPmVudHJ5X3RhYl9vZmZzZXQsIFNFRUtfU0VUKTsKLSAgICBpZiAocmVhZCh3cG50LT5mZCwgd3BudC0+bmUtPmxvb2t1cF90YWJsZSwgcmVhZF9zaXplKSAhPSByZWFkX3NpemUpCi0JbXllcnJvcigiVW5hYmxlIHRvIHJlYWQgbG9va3VwIHRhYmxlIGhlYWRlciBmcm9tIGZpbGUiKTsKLQotICAgIC8qIEdldCB0aGUgaW5hbWUgdGFibGUuICBUaGlzIGlzIHVzZWQgZm9yIGxvb2tpbmcgdXAgdGhlIG5hbWVzCi0gICAgICAgb2YgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkICovCi0KLSAgICBzdGF0dXMgPSBsc2Vlayh3cG50LT5mZCwgd3BudC0+bmUtPm5lX2hlYWRlci0+bnJuYW1lX3RhYl9vZmZzZXQsICBTRUVLX1NFVCk7Ci0gICAgcmVhZF9zaXplICA9IHdwbnQtPm5lLT5uZV9oZWFkZXItPm5ybmFtZV90YWJfbGVuZ3RoOwotICAgIHdwbnQtPm5lLT5ucm5hbWVfdGFibGUgPSAoY2hhciAqKSBtYWxsb2MocmVhZF9zaXplKTsKLSAgICBpZiAocmVhZCh3cG50LT5mZCwgd3BudC0+bmUtPm5ybmFtZV90YWJsZSwgcmVhZF9zaXplKSAhPSByZWFkX3NpemUpCi0JbXllcnJvcigiVW5hYmxlIHRvIHJlYWQgbnJuYW1lIHRhYmxlIGhlYWRlciBmcm9tIGZpbGUiKTsKLQotICAgIHN0YXR1cyA9IGxzZWVrKHdwbnQtPmZkLCB3cG50LT5tel9oZWFkZXItPm5lX29mZnNldCArIAotCQkgICB3cG50LT5uZS0+bmVfaGVhZGVyLT5ybmFtZV90YWJfb2Zmc2V0LCAgU0VFS19TRVQpOwotICAgIHJlYWRfc2l6ZSAgPSB3cG50LT5uZS0+bmVfaGVhZGVyLT5tb2R1bGVyZWZfdGFiX29mZnNldCAtIAotCSAgICB3cG50LT5uZS0+bmVfaGVhZGVyLT5ybmFtZV90YWJfb2Zmc2V0OwotICAgIHdwbnQtPm5lLT5ybmFtZV90YWJsZSA9IChjaGFyICopIG1hbGxvYyhyZWFkX3NpemUpOwotICAgIGlmIChyZWFkKHdwbnQtPmZkLCB3cG50LT5uZS0+cm5hbWVfdGFibGUsIHJlYWRfc2l6ZSkgIT0gcmVhZF9zaXplKQotCW15ZXJyb3IoIlVuYWJsZSB0byByZWFkIHJuYW1lIHRhYmxlIGhlYWRlciBmcm9tIGZpbGUiKTsKLQotICAgIC8qCi0gICAgICogTm93IGxvYWQgYW55IERMTHMgdGhhdCAgdGhpcyBtb2R1bGUgcmVmZXJzIHRvLgotICAgICAqLwotICAgIGZvcihpPTA7IGk8d3BudC0+bmUtPm5lX2hlYWRlci0+bl9tb2RfcmVmX3RhYjsgaSsrKQotICAgIHsKLSAgICAgIGNoYXIgYnVmZlsxNF07Ci0gICAgICBHZXRNb2R1bGVOYW1lKHdwbnQsIGkgKyAxLCBidWZmKTsKLQotICAgICAgaWYgKHN0cmNhc2VjbXAoYnVmZiwgd3BudC0+bmFtZSkgIT0gMCApCi0JTG9hZEltYWdlKGJ1ZmYsIERMTCwgMCk7Ci0gICAgfQotI2lmbmRlZiBXSU5FTElCCi0gICAgLyogZml4dXAgcmVmZXJlbmNlcyAqLwotCi0gICAgZm9yIChzZWdtZW50ID0gMDsgc2VnbWVudCA8IHdwbnQtPm5lLT5uZV9oZWFkZXItPm5fc2VnbWVudF90YWI7IHNlZ21lbnQrKykKLQlpZiAoRml4dXBTZWdtZW50KHdwbnQsIHNlZ21lbnQpIDwgMCkKLQkJbXllcnJvcigiZml4dXAgZmFpbGVkLiIpOwotCi0gICAgRml4dXBGdW5jdGlvblByb2xvZ3Mod3BudCk7Ci0gICAgSW5pdGlhbGl6ZUxvYWRlZERMTHMod3BudCk7Ci0jZW5kaWYKLSAgICByZXR1cm4od3BudC0+aGluc3RhbmNlKTsKLX0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQlHZXRJbXBvcnRlZE5hbWUKICAqLwotY2hhciAqCi1HZXRJbXBvcnRlZE5hbWUoaW50IGZkLCBzdHJ1Y3QgbXpfaGVhZGVyX3MgKm16X2hlYWRlciwgCi0JCXN0cnVjdCBuZV9oZWFkZXJfcyAqbmVfaGVhZGVyLCBpbnQgbmFtZV9vZmZzZXQsIGNoYXIgKmJ1ZmZlcikKK3N0YXRpYworY2hhciAqTkVfR2V0SW1wb3J0ZWROYW1lKHN0cnVjdCB3X2ZpbGVzICp3cG50LCBpbnQgbmFtZV9vZmZzZXQsIGNoYXIgKmJ1ZmZlcikKIHsKLSAgICBpbnQgbGVuZ3RoOwotICAgIGludCBzdGF0dXM7Ci0gICAgCi0gICAgc3RhdHVzID0gbHNlZWsoZmQsIG16X2hlYWRlci0+bmVfb2Zmc2V0ICsgbmVfaGVhZGVyLT5pbmFtZV90YWJfb2Zmc2V0ICsKLQkJICAgbmFtZV9vZmZzZXQsIFNFRUtfU0VUKTsKLSAgICBsZW5ndGggPSAwOwotICAgIHJlYWQoZmQsICZsZW5ndGgsIDEpOyAgLyogR2V0IHRoZSBsZW5ndGggYnl0ZSAqLwotICAgIGxlbmd0aCA9IENPTlZfQ0hBUl9UT19MT05HIChsZW5ndGgpOwotICAgIHJlYWQoZmQsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICBCWVRFIGxlbmd0aDsKKworICAgIGxzZWVrKHdwbnQtPmZkLCB3cG50LT5tel9oZWFkZXItPm5lX29mZnNldCArIAorICAgIAl3cG50LT5uZS0+bmVfaGVhZGVyLT5pbmFtZV90YWJfb2Zmc2V0ICsgbmFtZV9vZmZzZXQsIFNFRUtfU0VUKTsKKyAgICByZWFkKHdwbnQtPmZkLCAmbGVuZ3RoLCAxKTsgIC8qIEdldCB0aGUgbGVuZ3RoIGJ5dGUgKi8KKyAgICByZWFkKHdwbnQtPmZkLCBidWZmZXIsIGxlbmd0aCk7CiAgICAgYnVmZmVyW2xlbmd0aF0gPSAwOworCiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAorc3RydWN0IHdfZmlsZXMgKmN1cnJlbnRfZXhlOworV09SRCBjdXJyZW50X25vZGF0YT0weGZkMDA7CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJCUdldE1vZHVsZU5hbWUKICAqLwotY2hhciAqCi1HZXRNb2R1bGVOYW1lKHN0cnVjdCB3X2ZpbGVzICogd3BudCwgaW50IGluZGV4LCBjaGFyICpidWZmZXIpCitzdGF0aWMgY2hhciAqTkVfR2V0TW9kdWxlTmFtZShzdHJ1Y3Qgd19maWxlcyAqd3BudCwgaW50IGluZGV4LCBjaGFyICpidWZmZXIpCiB7Ci0gICAgaW50IGZkID0gd3BudC0+ZmQ7Ci0gICAgc3RydWN0IG16X2hlYWRlcl9zICptel9oZWFkZXIgPSB3cG50LT5tel9oZWFkZXI7IAotICAgIHN0cnVjdCBuZV9oZWFkZXJfcyAqbmVfaGVhZGVyID0gd3BudC0+bmUtPm5lX2hlYWRlcjsKLSAgICBpbnQgbGVuZ3RoOwotICAgIFdPUkQgbmFtZV9vZmZzZXQsIHN0YXR1czsKKyAgICBCWVRFIGxlbmd0aDsKKyAgICBXT1JEIG5hbWVfb2Zmc2V0OwogICAgIGludCBpOwogICAgIAotICAgIHN0YXR1cyA9IGxzZWVrKGZkLCBtel9oZWFkZXItPm5lX29mZnNldCArIG5lX2hlYWRlci0+bW9kdWxlcmVmX3RhYl9vZmZzZXQgKwotCQkgICAyKihpbmRleCAtIDEpLCBTRUVLX1NFVCk7Ci0gICAgbmFtZV9vZmZzZXQgPSAwOwotICAgIHJlYWQoZmQsICZuYW1lX29mZnNldCwgMik7CisgICAgbHNlZWsod3BudC0+ZmQsIHdwbnQtPm16X2hlYWRlci0+bmVfb2Zmc2V0ICsKKyAgICAJd3BudC0+bmUtPm5lX2hlYWRlci0+bW9kdWxlcmVmX3RhYl9vZmZzZXQgKyAyICogKGluZGV4IC0gMSksIFNFRUtfU0VUKTsKKyAgICByZWFkKHdwbnQtPmZkLCAmbmFtZV9vZmZzZXQsIDIpOwogICAgIG5hbWVfb2Zmc2V0ID0gQ09OVl9TSE9SVCAobmFtZV9vZmZzZXQpOwotICAgIHN0YXR1cyA9IGxzZWVrKGZkLCBtel9oZWFkZXItPm5lX29mZnNldCArIG5lX2hlYWRlci0+aW5hbWVfdGFiX29mZnNldCArCi0JCSAgIG5hbWVfb2Zmc2V0LCBTRUVLX1NFVCk7Ci0gICAgbGVuZ3RoID0gMDsKLSAgICByZWFkKGZkLCAmbGVuZ3RoLCAxKTsgIC8qIEdldCB0aGUgbGVuZ3RoIGJ5dGUgKi8KLSAgICBsZW5ndGggPSBDT05WX0NIQVJfVE9fTE9ORyAobGVuZ3RoKTsKLSAgICByZWFkKGZkLCBidWZmZXIsIGxlbmd0aCk7CisKKyAgICBsc2Vlayh3cG50LT5mZCwgd3BudC0+bXpfaGVhZGVyLT5uZV9vZmZzZXQgKyAKKyAgICAJd3BudC0+bmUtPm5lX2hlYWRlci0+aW5hbWVfdGFiX29mZnNldCArIG5hbWVfb2Zmc2V0LCBTRUVLX1NFVCk7CisgICAgcmVhZCh3cG50LT5mZCwgJmxlbmd0aCwgMSk7ICAvKiBHZXQgdGhlIGxlbmd0aCBieXRlICovCisgICAgcmVhZCh3cG50LT5mZCwgYnVmZmVyLCBsZW5ndGgpOwogICAgIGJ1ZmZlcltsZW5ndGhdID0gMDsKIAogICAgIC8qIE1vZHVsZSBuYW1lcyAgYXJlIGFsd2F5cyB1cHBlciBjYXNlICovCkBAIC0xOTEsMzMgKzc1LDIzIEBACiAKICAgICByZXR1cm4gYnVmZmVyOwogfQotCiAMCiAjaWZuZGVmIFdJTkVMSUIKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkJCQkJRml4dXBTZWdtZW50CisgKgkJCQlORV9GaXh1cFNlZ21lbnQKICAqLwotaW50Ci1GaXh1cFNlZ21lbnQoc3RydWN0IHdfZmlsZXMgKiB3cG50LCBpbnQgc2VnbWVudF9udW0pCitpbnQgTkVfRml4dXBTZWdtZW50KHN0cnVjdCB3X2ZpbGVzICp3cG50LCBpbnQgc2VnbWVudF9udW0pCiB7Ci0gICAgc3RydWN0IG16X2hlYWRlcl9zICptel9oZWFkZXIgPSB3cG50LT5tel9oZWFkZXI7Ci0gICAgc3RydWN0IG5lX2hlYWRlcl9zICpuZV9oZWFkZXIgPSAgd3BudC0+bmUtPm5lX2hlYWRlcjsKLSAgICBzdHJ1Y3QgbmVfc2VnbWVudF90YWJsZV9lbnRyeV9zICpzZWdfdGFibGUgPSB3cG50LT5uZS0+c2VnX3RhYmxlOwogICAgIHN0cnVjdCBzZWdtZW50X2Rlc2NyaXB0b3JfcyAqc2VsZWN0b3JfdGFibGUgPSB3cG50LT5uZS0+c2VsZWN0b3JfdGFibGU7CiAgICAgc3RydWN0IHJlbG9jYXRpb25fZW50cnlfcyAqcmVwLCAqcmVwMTsKICAgICBzdHJ1Y3QgbmVfc2VnbWVudF90YWJsZV9lbnRyeV9zICpzZWc7CiAgICAgc3RydWN0IHNlZ21lbnRfZGVzY3JpcHRvcl9zICpzZWw7Ci0gICAgaW50IHN0YXR1czsKKyAgICBpbnQgc3RhdHVzLCBvcmRpbmFsLCBpLCBuX2VudHJpZXMsIGFkZGl0aXZlOwogICAgIHVuc2lnbmVkIHNob3J0ICpzcDsKLSAgICB1bnNpZ25lZCBpbnQgc2VsZWN0b3IsIGFkZHJlc3M7Ci0gICAgdW5zaWduZWQgaW50IG5leHRfYWRkcjsKLSAgICBpbnQgb3JkaW5hbDsKLSAgICBjaGFyIGRsbF9uYW1lWzI1N107Ci0gICAgY2hhciBmdW5jX25hbWVbMjU3XTsKLSAgICBpbnQgaSwgbl9lbnRyaWVzOwotICAgIGludCBhZGRpdGl2ZTsKKyAgICB1bnNpZ25lZCBpbnQgc2VsZWN0b3IsIGFkZHJlc3MsIG5leHRfYWRkcjsKKyAgICB1bnNpZ25lZCBjaGFyIGRsbF9uYW1lWzI1N10sIGZ1bmNfbmFtZVsyNTddOwogCi0gICAgc2VnID0gJnNlZ190YWJsZVtzZWdtZW50X251bV07CisgICAgc2VnID0gJndwbnQtPm5lLT5zZWdfdGFibGVbc2VnbWVudF9udW1dOwogICAgIHNlbCA9ICZzZWxlY3Rvcl90YWJsZVtzZWdtZW50X251bV07CiAKICAgICBkcHJpbnRmX2ZpeHVwKHN0ZGRlYiwgIlNlZ21lbnQgZml4dXBzIGZvciAlcywgc2VnbWVudCAlZCwgc2VsZWN0b3IgJXhcbiIsIApAQCAtMjM1LDcgKzEwOSw3IEBACiAJaSA9IDB4MTAwMDA7CiAKICAgICBzdGF0dXMgPSBsc2Vlayh3cG50LT5mZCwgc2VnLT5zZWdfZGF0YV9vZmZzZXQgKiAKLQkJICAgICAgICgxIDw8IG5lX2hlYWRlci0+YWxpZ25fc2hpZnRfY291bnQpICsgaSwgU0VFS19TRVQpOworCQkoMSA8PCB3cG50LT5uZS0+bmVfaGVhZGVyLT5hbGlnbl9zaGlmdF9jb3VudCkgKyBpLCBTRUVLX1NFVCk7CiAgICAgbl9lbnRyaWVzID0gMDsKICAgICByZWFkKHdwbnQtPmZkLCAmbl9lbnRyaWVzLCBzaXplb2Yoc2hvcnQgaW50KSk7CiAgICAgcmVwID0gKHN0cnVjdCByZWxvY2F0aW9uX2VudHJ5X3MgKikKQEAgLTI2Miw3ICsxMzYsNyBAQAogCSAgICBhZGRpdGl2ZSA9IDE7CiAJICAgIAogCSAgY2FzZSBORV9SRUxUWVBFX09SRElOQUw6Ci0JICAgIGlmIChHZXRNb2R1bGVOYW1lKHdwbnQsIHJlcC0+dGFyZ2V0MSwKKwkgICAgaWYgKE5FX0dldE1vZHVsZU5hbWUod3BudCwgcmVwLT50YXJnZXQxLAogCQkJICAgICAgZGxsX25hbWUpID09IE5VTEwpCiAJICAgIHsKIAkgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5FX1JFTFRZUEVfT1JESU5BTCBmYWlsZWQiKTsKQEAgLTI5MCwxNyArMTY0LDEzIEBACiAJICAgIGFkZGl0aXZlID0gMTsKIAkgICAgCiAJICBjYXNlIE5FX1JFTFRZUEVfTkFNRToKLQkgICAgaWYgKEdldE1vZHVsZU5hbWUod3BudCwgcmVwLT50YXJnZXQxLCBkbGxfbmFtZSkKLQkJPT0gTlVMTCkKLQkgICAgewotCSAgICAgIGZwcmludGYoc3RkZXJyLCJORV9SRUxUWVBFX05BTUUgZmFpbGVkIik7CisJICAgIGlmIChORV9HZXRNb2R1bGVOYW1lKHdwbnQsIHJlcC0+dGFyZ2V0MSwgZGxsX25hbWUpID09IE5VTEwpIHsKKwkgICAgICAgIGZwcmludGYoc3RkZXJyLCJORV9SRUxUWVBFX05BTUUgZmFpbGVkIik7CiAJCXJldHVybiAtMTsKIAkgICAgfQogCi0JICAgIGlmIChHZXRJbXBvcnRlZE5hbWUod3BudC0+ZmQsIG16X2hlYWRlciwgbmVfaGVhZGVyLCAKLQkJCQlyZXAtPnRhcmdldDIsIGZ1bmNfbmFtZSkgPT0gTlVMTCkKLQkgICAgewotCSAgICAgIGZwcmludGYoc3RkZXJyLCJnZXRpbXBvcnRlZG5hbWUgZmFpbGVkIik7CisJICAgIGlmIChORV9HZXRJbXBvcnRlZE5hbWUod3BudCwgcmVwLT50YXJnZXQyLCBmdW5jX25hbWUpID09IE5VTEwpIHsKKwkgICAgICAgIGZwcmludGYoc3RkZXJyLCJORV9nZXRpbXBvcnRlZG5hbWUgZmFpbGVkIik7CiAJCXJldHVybiAtMTsKIAkgICAgfQogCkBAIC0zMTQsOSArMTg0LDggQEAKIAkJbXllcnJvcihzKTsKIAkJcmV0dXJuIC0xOwogCSAgICB9Ci0KLQkgICAgZHByaW50Zl9maXh1cChzdGRkZWIsIiVkOiAlcyAlcy4lZDogJTA0eDolMDR4XG4iLCBpICsgMSwgCi0gICAgICAgICAgICAgICAgICAgZnVuY19uYW1lLCBkbGxfbmFtZSwgb3JkaW5hbCwgc2VsZWN0b3IsIGFkZHJlc3MpOworLyoJICAgIGRwcmludGZfZml4dXAoc3RkZGViLCIlZDogJXMgJXMuJWQ6ICUwNHg6JTA0eFxuIiwgaSArIDEsIAorICAgICAgICAgICAgICAgICAgIGZ1bmNfbmFtZSwgZGxsX25hbWUsIG9yZGluYWwsIHNlbGVjdG9yLCBhZGRyZXNzKTsqLwogCSAgICBicmVhazsKIAkgICAgCiAJICBjYXNlIE5FX1JFTFRZUEVfSU5URVJOQUw6CkBAIC00NDMsMTQgKzMxMiwxNCBAQAogICAgIHJldHVybiAwOwogfQogCi1pbnQgTkV1bmxvYWRJbWFnZShzdHJ1Y3Qgd19maWxlcyAqd3BudCkKK2ludCBORV91bmxvYWRJbWFnZShzdHJ1Y3Qgd19maWxlcyAqd3BudCkKIHsKIAlkcHJpbnRmX2ZpeHVwKHN0ZG5pbXAsICJORXVubG9hZEltYWdlKCkgY2FsbGVkIVxuIik7CiAJLyogZnJlZSByZXNvdXJjZXMsIGltYWdlICovCiAJcmV0dXJuIDE7CiB9CiAKLWludCBTdGFydE5FcHJvZ3JhbShzdHJ1Y3Qgd19maWxlcyAqd3BudCkKK2ludCBORV9TdGFydFByb2dyYW0oc3RydWN0IHdfZmlsZXMgKndwbnQpCiB7CiAgICAgaW50IGNzX3JlZywgZHNfcmVnLCBzc19yZWcsIGlwX3JlZywgc3BfcmVnOwogICAgIC8qCkBAIC00NjgsMjggKzMzNywzNyBAQAogICAgIHJldHVybiBDYWxsVG9Jbml0MTYoY3NfcmVnIDw8IDE2IHwgaXBfcmVnLCBzc19yZWcgPDwgMTYgfCBzcF9yZWcsIGRzX3JlZyk7CiB9CiAKLXZvaWQgSW5pdE5FRExMKHN0cnVjdCB3X2ZpbGVzICp3cG50KQordm9pZCBORV9Jbml0RExMKHN0cnVjdCB3X2ZpbGVzICp3cG50KQogewotCWludCBjc19yZWcsIGRzX3JlZywgaXBfcmVnLCBjeF9yZWcsIHJ2OworCWludCBjc19yZWcsIGRzX3JlZywgaXBfcmVnLCBjeF9yZWcsIGRpX3JlZywgcnY7CisJZXh0ZXJuIHN0cnVjdCB3X2ZpbGVzICpjdXJyZW50X2V4ZTsKIAkvKiAKIAkgKiBJcyB0aGlzIGEgbGlicmFyeT8gCiAJICovCiAJaWYgKHdwbnQtPm5lLT5uZV9oZWFkZXItPmZvcm1hdF9mbGFncyAmIDB4ODAwMCkKIAl7Ci0JICAgIGlmICghKHdwbnQtPm5lLT5uZV9oZWFkZXItPmZvcm1hdF9mbGFncyAmIDB4MDAwMSkpCi0JICAgIHsKLQkJLyogTm90IFNJTkdMRURBVEEgKi8KLQkJZnByaW50ZihzdGRlcnIsICJMaWJyYXJ5IGlzIG5vdCBtYXJrZWQgU0lOR0xFREFUQVxuIik7Ci0JCWV4aXQoMSk7Ci0JICAgIH0KLQotCSAgICBkc19yZWcgPSB3cG50LT5uZS0+c2VsZWN0b3JfdGFibGVbd3BudC0+bmUtPgorICAJICAgIGlmICghKHdwbnQtPm5lLT5uZV9oZWFkZXItPmZvcm1hdF9mbGFncyAmIDB4MDAwMSkpCisJICAgIGlmKHdwbnQtPm5lLT5uZV9oZWFkZXItPmZvcm1hdF9mbGFncyAmIE5FX0ZGTEFHU19NVUxUSVBMRURBVEEKKwkJfHwgd3BudC0+bmUtPm5lX2hlYWRlci0+YXV0b19kYXRhX3NlZykKKyAgCSAgICB7CisgIAkJLyogTm90IFNJTkdMRURBVEEgKi8KKyAgCQlmcHJpbnRmKHN0ZGVyciwgIkxpYnJhcnkgaXMgbm90IG1hcmtlZCBTSU5HTEVEQVRBXG4iKTsKKyAgCQlleGl0KDEpOworCSAgICB9IGVsc2UgeyAvKiBEQVRBIE5PTkUgRExMICovCisJCWRzX3JlZyA9IGN1cnJlbnRfZXhlLT5uZS0+c2VsZWN0b3JfdGFibGVbCisJCSAgICAgICAgY3VycmVudF9leGUtPm5lLT5uZV9oZWFkZXItPmF1dG9fZGF0YV9zZWctMV0uc2VsZWN0b3I7CisJCWN4X3JlZyA9IDA7CisJICAgIH0gZWxzZSB7IC8qIERBVEEgU0lOR0xFIERMTCAqLworCQkgICAgZHNfcmVnID0gd3BudC0+bmUtPnNlbGVjdG9yX3RhYmxlW3dwbnQtPm5lLT4KIAkJCQkJICBuZV9oZWFkZXItPmF1dG9fZGF0YV9zZWctMV0uc2VsZWN0b3I7Ci0JICAgIGNzX3JlZyA9IHdwbnQtPm5lLT5zZWxlY3Rvcl90YWJsZVt3cG50LT5uZS0+bmVfaGVhZGVyLT5jcy0xXS5zZWxlY3RvcjsKLQkgICAgaXBfcmVnID0gd3BudC0+bmUtPm5lX2hlYWRlci0+aXA7Ci0KLQkgICAgY3hfcmVnID0gd3BudC0+bmUtPm5lX2hlYWRlci0+bG9jYWxfaGVhcF9sZW5ndGg7Ci0KKwkJICAgIGN4X3JlZyA9IHdwbnQtPm5lLT5uZV9oZWFkZXItPmxvY2FsX2hlYXBfbGVuZ3RoOworICAJICAgIH0KKyAgCisgIAkgICAgY3NfcmVnID0gd3BudC0+bmUtPnNlbGVjdG9yX3RhYmxlW3dwbnQtPm5lLT5uZV9oZWFkZXItPmNzLTFdLnNlbGVjdG9yOworICAJICAgIGlwX3JlZyA9IHdwbnQtPm5lLT5uZV9oZWFkZXItPmlwOworICAKKyAgICAgICAgICAgIGRpX3JlZyA9IHdwbnQtPmhpbnN0YW5jZTsKKyAgCiAJICAgIGlmIChjc19yZWcpIHsKIAkJZHByaW50Zl9kbGwoc3RkZGViLCJJbml0aWFsaXppbmcgJXMsIGNzOmlwICUwNHg6JTA0eCwgZHMgJTA0eCwgY3ggJTA0eFxuIiwgCiAJCSAgICB3cG50LT5uYW1lLCBjc19yZWcsIGlwX3JlZywgZHNfcmVnLCBjeF9yZWcpOwpAQCAtNTAxLDQgKzM3OSwxMDEgQEAKIAl9CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJCU5FX0xvYWRJbWFnZQorICogTG9hZCBvbmUgTkUgZm9ybWF0IGV4ZWN1dGFibGUgaW50byBtZW1vcnkKKyAqLworSElOU1RBTkNFIE5FX0xvYWRJbWFnZShzdHJ1Y3Qgd19maWxlcyAqd3BudCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgcmVhZF9zaXplLCBzdGF0dXMsIHNlZ21lbnQ7CisgICAgaW50IGk7CisKKyAgICB3cG50LT5uZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG5lX2RhdGEpKTsKKyAgICB3cG50LT5uZS0+cmVzbmFtdGFiID0gTlVMTDsKKyAgICB3cG50LT5uZS0+bmVfaGVhZGVyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmVfaGVhZGVyX3MpKTsKKworICAgIGxzZWVrKHdwbnQtPmZkLCB3cG50LT5tel9oZWFkZXItPm5lX29mZnNldCwgU0VFS19TRVQpOworICAgIGlmIChyZWFkKHdwbnQtPmZkLCB3cG50LT5uZS0+bmVfaGVhZGVyLCBzaXplb2Yoc3RydWN0IG5lX2hlYWRlcl9zKSkgCisJIT0gc2l6ZW9mKHN0cnVjdCBuZV9oZWFkZXJfcykpCisJbXllcnJvcigiVW5hYmxlIHRvIHJlYWQgTkUgaGVhZGVyIGZyb20gZmlsZSIpOworICAgIGlmKCEod3BudC0+bmUtPm5lX2hlYWRlci0+Zm9ybWF0X2ZsYWdzICYgTkVfRkZMQUdTX0xJQk1PRFVMRSkpeworCWlmKGN1cnJlbnRfZXhlKXByaW50ZigiV2FybmluZzogbW9yZSB0aGFuIG9uZSBFWEVcbiIpOworICAgICAgICBjdXJyZW50X2V4ZT13cG50OworICAgIH0KKworI2lmbmRlZiBXSU5FTElCCisgICAgLyoKKyAgICAgKiBDcmVhdGUgc2VnbWVudCBzZWxlY3RvcnMuCisgICAgICovCisgICAgc3RhdHVzID0gbHNlZWsod3BudC0+ZmQsIHdwbnQtPm16X2hlYWRlci0+bmVfb2Zmc2V0ICsgCisJCSAgIHdwbnQtPm5lLT5uZV9oZWFkZXItPnNlZ21lbnRfdGFiX29mZnNldCwKKwkJICAgU0VFS19TRVQpOworICAgIHJlYWRfc2l6ZSAgPSB3cG50LT5uZS0+bmVfaGVhZGVyLT5uX3NlZ21lbnRfdGFiICoKKwlzaXplb2Yoc3RydWN0IG5lX3NlZ21lbnRfdGFibGVfZW50cnlfcyk7CisgICAgd3BudC0+bmUtPnNlZ190YWJsZSA9IChzdHJ1Y3QgbmVfc2VnbWVudF90YWJsZV9lbnRyeV9zICopIG1hbGxvYyhyZWFkX3NpemUpOworICAgIGlmIChyZWFkKHdwbnQtPmZkLCB3cG50LT5uZS0+c2VnX3RhYmxlLCByZWFkX3NpemUpICE9IHJlYWRfc2l6ZSkKKwlteWVycm9yKCJVbmFibGUgdG8gcmVhZCBzZWdtZW50IHRhYmxlIGhlYWRlciBmcm9tIGZpbGUiKTsKKyAgICB3cG50LT5uZS0+c2VsZWN0b3JfdGFibGUgPSBDcmVhdGVTZWxlY3RvcnMod3BudCk7CisgICAgaWYod3BudC0+bmUtPm5lX2hlYWRlci0+YXV0b19kYXRhX3NlZz09MCkKKyAgICB7CisgICAgICAgIHByaW50ZigiREFUQSBOT05FIERMTCAlc1xuIix3cG50LT5uYW1lKTsKKyAgICAgICAgd3BudC0+aGluc3RhbmNlPWN1cnJlbnRfbm9kYXRhKys7CisgICAgfSBlbHNlCisgICAgd3BudC0+aGluc3RhbmNlID0gKHdwbnQtPm5lLT4KKwkJICAgICAgIHNlbGVjdG9yX3RhYmxlW3dwbnQtPm5lLT5uZV9oZWFkZXItPmF1dG9fZGF0YV9zZWctMV0uCisJCSAgICAgICBzZWxlY3Rvcik7CisgICAgaWYgKHdwbnQtPmhpbnN0YW5jZSA9PSAwKQorICAgIAl3cG50LT5oaW5zdGFuY2UgPSAweGYwMDA7CisjZW5kaWYKKyAgICAvKiBHZXQgdGhlIGxvb2t1cCAgdGFibGUuICBUaGlzIGlzIHVzZWQgZm9yIGxvb2tpbmcgdXAgdGhlIGFkZHJlc3NlcworICAgICAgIG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBleHBvcnRlZCAqLworCisgICAgcmVhZF9zaXplICA9IHdwbnQtPm5lLT5uZV9oZWFkZXItPmVudHJ5X3RhYl9sZW5ndGg7CisgICAgd3BudC0+bmUtPmxvb2t1cF90YWJsZSA9IChjaGFyICopIG1hbGxvYyhyZWFkX3NpemUpOworICAgIGxzZWVrKHdwbnQtPmZkLCB3cG50LT5tel9oZWFkZXItPm5lX29mZnNldCArIAorCSAgd3BudC0+bmUtPm5lX2hlYWRlci0+ZW50cnlfdGFiX29mZnNldCwgU0VFS19TRVQpOworICAgIGlmIChyZWFkKHdwbnQtPmZkLCB3cG50LT5uZS0+bG9va3VwX3RhYmxlLCByZWFkX3NpemUpICE9IHJlYWRfc2l6ZSkKKwlteWVycm9yKCJVbmFibGUgdG8gcmVhZCBsb29rdXAgdGFibGUgaGVhZGVyIGZyb20gZmlsZSIpOworCisgICAgLyogR2V0IHRoZSBpbmFtZSB0YWJsZS4gIFRoaXMgaXMgdXNlZCBmb3IgbG9va2luZyB1cCB0aGUgbmFtZXMKKyAgICAgICBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3J0ZWQgKi8KKworICAgIHN0YXR1cyA9IGxzZWVrKHdwbnQtPmZkLCB3cG50LT5uZS0+bmVfaGVhZGVyLT5ucm5hbWVfdGFiX29mZnNldCwgIFNFRUtfU0VUKTsKKyAgICByZWFkX3NpemUgID0gd3BudC0+bmUtPm5lX2hlYWRlci0+bnJuYW1lX3RhYl9sZW5ndGg7CisgICAgd3BudC0+bmUtPm5ybmFtZV90YWJsZSA9IChjaGFyICopIG1hbGxvYyhyZWFkX3NpemUpOworICAgIGlmIChyZWFkKHdwbnQtPmZkLCB3cG50LT5uZS0+bnJuYW1lX3RhYmxlLCByZWFkX3NpemUpICE9IHJlYWRfc2l6ZSkKKwlteWVycm9yKCJVbmFibGUgdG8gcmVhZCBucm5hbWUgdGFibGUgaGVhZGVyIGZyb20gZmlsZSIpOworCisgICAgc3RhdHVzID0gbHNlZWsod3BudC0+ZmQsIHdwbnQtPm16X2hlYWRlci0+bmVfb2Zmc2V0ICsgCisJCSAgIHdwbnQtPm5lLT5uZV9oZWFkZXItPnJuYW1lX3RhYl9vZmZzZXQsICBTRUVLX1NFVCk7CisgICAgcmVhZF9zaXplICA9IHdwbnQtPm5lLT5uZV9oZWFkZXItPm1vZHVsZXJlZl90YWJfb2Zmc2V0IC0gCisJICAgIHdwbnQtPm5lLT5uZV9oZWFkZXItPnJuYW1lX3RhYl9vZmZzZXQ7CisgICAgd3BudC0+bmUtPnJuYW1lX3RhYmxlID0gKGNoYXIgKikgbWFsbG9jKHJlYWRfc2l6ZSk7CisgICAgaWYgKHJlYWQod3BudC0+ZmQsIHdwbnQtPm5lLT5ybmFtZV90YWJsZSwgcmVhZF9zaXplKSAhPSByZWFkX3NpemUpCisJbXllcnJvcigiVW5hYmxlIHRvIHJlYWQgcm5hbWUgdGFibGUgaGVhZGVyIGZyb20gZmlsZSIpOworCisgICAgLyoKKyAgICAgKiBOb3cgbG9hZCBhbnkgRExMcyB0aGF0ICB0aGlzIG1vZHVsZSByZWZlcnMgdG8uCisgICAgICovCisgICAgZm9yKGk9MDsgaTx3cG50LT5uZS0+bmVfaGVhZGVyLT5uX21vZF9yZWZfdGFiOyBpKyspCisgICAgeworICAgICAgY2hhciBidWZmWzE0XTsKKyAgICAgIE5FX0dldE1vZHVsZU5hbWUod3BudCwgaSArIDEsIGJ1ZmYpOworCisgICAgICBpZiAoc3RyY2FzZWNtcChidWZmLCB3cG50LT5uYW1lKSAhPSAwICkKKwlMb2FkSW1hZ2UoYnVmZiwgRExMLCAwKTsKKyAgICB9CisjaWZuZGVmIFdJTkVMSUIKKyAgICAvKiBmaXh1cCByZWZlcmVuY2VzICovCisKKyAgICBmb3IgKHNlZ21lbnQgPSAwOyBzZWdtZW50IDwgd3BudC0+bmUtPm5lX2hlYWRlci0+bl9zZWdtZW50X3RhYjsgc2VnbWVudCsrKQorCWlmIChORV9GaXh1cFNlZ21lbnQod3BudCwgc2VnbWVudCkgPCAwKQorCQlteWVycm9yKCJmaXh1cCBmYWlsZWQuIik7CisKKyAgICBGaXh1cEZ1bmN0aW9uUHJvbG9ncyh3cG50KTsKKyAgICBJbml0aWFsaXplTG9hZGVkRExMcyh3cG50KTsKKyNlbmRpZgorICAgIHJldHVybih3cG50LT5oaW5zdGFuY2UpOworfQorCiAjZW5kaWYgLyogIVdJTkVMSUIgKi8KZGlmZiAtLWdpdCBhL2xvYWRlci9uZV9yZXNvdXJjZS5jIGIvbG9hZGVyL25lX3Jlc291cmNlLmMKaW5kZXggYWVlYWIxOS4uOWEzZTU2ZCAxMDA2NDQKLS0tIGEvbG9hZGVyL25lX3Jlc291cmNlLmMKKysrIGIvbG9hZGVyL25lX3Jlc291cmNlLmMKQEAgLTEsNiArMSw3IEBACisvKgogc3RhdGljIGNoYXIgUkNTSWRbXSA9ICIkSWQ6IG5lX3Jlc291cmNlLmMsdiAxLjQgMTk5My8wNy8wNCAwNDowNDoyMSByb290IEV4cCByb290ICQiOwogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBSb2JlcnQgSi4gQW1zdGFkdCwgMTk5MyI7Ci0KKyovCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTEzLDYgKzE0LDggQEAKICNpbmNsdWRlICJwZWV4ZS5oIgogI2luY2x1ZGUgImFyY2guaCIKICNpbmNsdWRlICJkbGxzLmgiCisjaW5jbHVkZSAibGlicmFyeS5oIgorI2luY2x1ZGUgImhlYXAuaCIKICNpbmNsdWRlICJyZXNvdXJjZS5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKZGlmZiAtLWdpdCBhL2xvYWRlci9wZV9pbWFnZS5jIGIvbG9hZGVyL3BlX2ltYWdlLmMKaW5kZXggNzhiNTM2Yi4uOWNhZGVkNiAxMDA2NDQKLS0tIGEvbG9hZGVyL3BlX2ltYWdlLmMKKysrIGIvbG9hZGVyL3BlX2ltYWdlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlICJkbGxzLmgiCiAjaW5jbHVkZSAibmVleGUuaCIKICNpbmNsdWRlICJwZWV4ZS5oIgorI2luY2x1ZGUgInBlX2ltYWdlLmgiCiAKICNkZWZpbmUgTUFQX0FOT05ZTU9VUwkweDIwCiAKQEAgLTEzMywxMCArMTM0LDEwIEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkJCUxvYWRQRUltYWdlCisgKgkJCVBFX0xvYWRJbWFnZQogICogTG9hZCBvbmUgUEUgZm9ybWF0IGV4ZWN1dGFibGUgaW50byBtZW1vcnkKICAqLwotSElOU1RBTkNFIExvYWRQRUltYWdlKHN0cnVjdCB3X2ZpbGVzICp3cG50KQorSElOU1RBTkNFIFBFX0xvYWRJbWFnZShzdHJ1Y3Qgd19maWxlcyAqd3BudCkKIHsKIAlpbnQgaSwgcmVzdWx0OwogCkBAIC0xNTksOCArMTYwLDggQEAKIAlmb3IoaT0wOyBpIDwgd3BudC0+cGUtPnBlX2hlYWRlci0+Y29mZi5OdW1iZXJPZlNlY3Rpb25zOyBpKyspCiAJewogCWlmKCFsb2FkX2FkZHIpIHsKLQkJcmVzdWx0ID0geG1tYXAoMCwgd3BudC0+cGUtPnBlX3NlZ1tpXS5TaXplX09mX1Jhd19EYXRhLCA3LCBNQVBfUFJJVkFURSwgCi0JCSAgICAgIHdwbnQtPmZkLCB3cG50LT5wZS0+cGVfc2VnW2ldLlBvaW50ZXJUb1Jhd0RhdGEpOworCQlyZXN1bHQgPSB4bW1hcCgoY2hhciAqKTAsIHdwbnQtPnBlLT5wZV9zZWdbaV0uU2l6ZV9PZl9SYXdfRGF0YSwgNywKKwkJCU1BUF9QUklWQVRFLCB3cG50LT5mZCwgd3BudC0+cGUtPnBlX3NlZ1tpXS5Qb2ludGVyVG9SYXdEYXRhKTsKIAkJbG9hZF9hZGRyID0gKHVuc2lnbmVkIGludCkgcmVzdWx0IC0gIHdwbnQtPnBlLT5wZV9zZWdbaV0uVmlydHVhbF9BZGRyZXNzOwogCX0gZWxzZSB7CiAJCXJlc3VsdCA9IHhtbWFwKChjaGFyICopIGxvYWRfYWRkciArIHdwbnQtPnBlLT5wZV9zZWdbaV0uVmlydHVhbF9BZGRyZXNzLCAKQEAgLTE5MCwyMCArMTkxLDIwIEBACiAJcmV0dXJuICh3cG50LT5oaW5zdGFuY2UpOwogfQogCi1pbnQgUEV1bmxvYWRJbWFnZShzdHJ1Y3Qgd19maWxlcyAqd3BudCkKK2ludCBQRV9VbmxvYWRJbWFnZShzdHJ1Y3Qgd19maWxlcyAqd3BudCkKIHsKIAlwcmludGYoIlBFdW5sb2FkSW1hZ2UoKSBjYWxsZWQhXG4iKTsKIAkvKiBmcmVlIHJlc291cmNlcywgaW1hZ2UsIHVubWFwICovCiAJcmV0dXJuIDE7CiB9CiAKLWludCBTdGFydFBFcHJvZ3JhbShzdHJ1Y3Qgd19maWxlcyAqd3BudCkKK2ludCBQRV9TdGFydFByb2dyYW0oc3RydWN0IHdfZmlsZXMgKndwbnQpCiB7CiAJcHJpbnRmKCJTdGFydFBFcHJvZ3JhbSgpIGNhbGxlZCFcbiIpOwogCXJldHVybiAwOwogfQogCi12b2lkIEluaXRQRURMTChzdHJ1Y3Qgd19maWxlcyAqd3BudCkKK3ZvaWQgUEVfSW5pdERMTChzdHJ1Y3Qgd19maWxlcyAqd3BudCkKIHsKIAkvKiBJcyB0aGlzIGEgbGlicmFyeT8gKi8KIAlpZiAod3BudC0+cGUtPnBlX2hlYWRlci0+Y29mZi5DaGFyYWN0ZXJpc3RpY3MgJiBJTUFHRV9GSUxFX0RMTCkgewpkaWZmIC0tZ2l0IGEvbG9hZGVyL3BlX3Jlc291cmNlLmMgYi9sb2FkZXIvcGVfcmVzb3VyY2UuYwppbmRleCA0MWZhOTJkLi45ZWZlYzM0IDEwMDY0NAotLS0gYS9sb2FkZXIvcGVfcmVzb3VyY2UuYworKysgYi9sb2FkZXIvcGVfcmVzb3VyY2UuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKgkoYykgMTk5NAlFcmlrIEJvcwk8ZXJpa0BoYWNrdGljLm5sPgorICoJKGMpIDE5OTQJRXJpayBCb3MJPGVyaWtAeHM0YWxsLm5sPgogICoKICAqCWJhc2VkIG9uIEVyaWMgWW91bmRhbGUncyBwZS10ZXN0IGFuZDoKICAqCkBAIC0xNywxMCArMTcsMTAgQEAKICNpbmNsdWRlICJuZWV4ZS5oIgogI2luY2x1ZGUgInBlZXhlLmgiCiAjaW5jbHVkZSAiZGxscy5oIgorI2luY2x1ZGUgInBlX2ltYWdlLmgiCiAjaW5jbHVkZSAicmVzb3VyY2UuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogLyogI2RlZmluZSBERUJVR19SRVNPVVJDRSAqLwotLyogI3VuZGVmICBERUJVR19SRVNPVVJDRSAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKIApkaWZmIC0tZ2l0IGEvbG9hZGVyL3Jlc291cmNlLmMgYi9sb2FkZXIvcmVzb3VyY2UuYwppbmRleCAyYzQyMzhiLi5hZGVlMGNmIDEwMDY0NAotLS0gYS9sb2FkZXIvcmVzb3VyY2UuYworKysgYi9sb2FkZXIvcmVzb3VyY2UuYwpAQCAtMSw2ICsxLDcgQEAKKy8qCiBzdGF0aWMgY2hhciBSQ1NJZFtdID0gIiRJZDogcmVzb3VyY2UuYyx2IDEuNCAxOTkzLzA3LzA0IDA0OjA0OjIxIHJvb3QgRXhwIHJvb3QgJCI7CiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIFJvYmVydCBKLiBBbXN0YWR0LCAxOTkzIjsKLQorKi8KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtOSwyNyArMTAsMjIgQEAKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgImFyY2guaCIKLSNpbmNsdWRlICJwcm90b3R5cGVzLmgiCiAjaW5jbHVkZSAid2luZG93cy5oIgogI2luY2x1ZGUgImdkaS5oIgotI2luY2x1ZGUgIndpbmUuaCIKKyNpbmNsdWRlICJuZWV4ZS5oIgogI2luY2x1ZGUgImljb24uaCIKICNpbmNsdWRlICJtZW51LmgiCiAjaW5jbHVkZSAiYWNjZWwuaCIKICNpbmNsdWRlICJkbGxzLmgiCiAjaW5jbHVkZSAicmVzb3VyY2UuaCIKKyNpbmNsdWRlICJsaWJyYXJ5LmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKLS8qICNkZWZpbmUgREVCVUdfUkVTT1VSQ0UgKi8KLS8qICN1bmRlZiAgREVCVUdfUkVTT1VSQ0UgKi8KLS8qICNkZWZpbmUgREVCVUdfQUNDRUwgICAgKi8KLS8qICN1bmRlZiAgREVCVUdfQUNDRUwgICAgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgIi4uL3JjL3N5c3Jlc2JtLmgiCiAKICNkZWZpbmUgTUlOKGEsYikJKChhKSA8IChiKSA/IChhKSA6IChiKSkKIAogUkVTT1VSQ0UgKlRvcCA9IE5VTEw7Ci1leHRlcm4gSElOU1RBTkNFIGhTeXNSZXM7CiAKIGV4dGVybiBpbnQgTkVfRmluZFJlc291cmNlKEhBTkRMRSwgTFBTVFIsIExQU1RSLCBSRVNPVVJDRSAqKTsKIGV4dGVybiBpbnQgUEVfRmluZFJlc291cmNlKEhBTkRMRSwgTFBTVFIsIExQU1RSLCBSRVNPVVJDRSAqKTsKQEAgLTUwLDEzICs0NiwxMyBAQAogCVJFU09VUkNFICpyOwogCUhBTkRMRSByaDsKIAotI2lmZGVmIERFQlVHX1JFU09VUkNFIAorCWlmKGRlYnVnZ2luZ19yZXNvdXJjZSl7CiAJcHJpbnRmKCJGaW5kUmVzb3VyY2UoJTA0WCIsIGluc3RhbmNlKTsKIAlQcmludElkKG5hbWUpOwogCVByaW50SWQodHlwZSk7CiAJcHJpbnRmKCIpXG4iKTsKLSNlbmRpZgotCisJfQorCQogCWlmIChpbnN0YW5jZSA9PSAoSEFORExFKU5VTEwpCiAJCWluc3RhbmNlID0gaFN5c1JlczsKIApAQCAtMzY0LDExICszNjAsMTEgQEAKICAgICBpbnQgCWltYWdlX3NpemU7CiAgICAgSEJJVE1BUCAgICAgaGJtcE9sZDEsIGhibXBPbGQyOwogCi0jaWZkZWYgREVCVUdfUkVTT1VSQ0UKKyAgICBpZihkZWJ1Z2dpbmdfcmVzb3VyY2UpewogCXByaW50ZigiTG9hZEljb24oJTA0WCIsIGluc3RhbmNlKTsKIAlQcmludElkKGljb25fbmFtZSk7CiAJcHJpbnRmKCIpXG4iKTsKLSNlbmRpZgorICAgIH0KICAgICAKICAgICBpZiAoIShoZGMgPSBHZXREQyhHZXREZXNrdG9wV2luZG93KCkpKSkgcmV0dXJuIDA7CiAgICAgcnNjX21lbSA9IFJTQ19Mb2FkUmVzb3VyY2UoaW5zdGFuY2UsIGljb25fbmFtZSwgKExQU1RSKSBORV9SU0NUWVBFX0dST1VQX0lDT04sIApAQCAtNTQ1LDExICs1NDEsMTEgQEAKICAgICBBQ0NFTEhFQURFUgkqbHBBY2NlbFRibDsKICAgICBpbnQgCWksIGltYWdlX3NpemUsIG47CiAKLSNpZmRlZiBERUJVR19BQ0NFTAorICAgIGlmKGRlYnVnZ2luZ19hY2NlbCl7CiAJcHJpbnRmKCJMb2FkQWNjZWxlcmF0b3JzKCUwNFgiLCBpbnN0YW5jZSk7CiAJUHJpbnRJZChscFRhYmxlTmFtZSk7CiAJcHJpbnRmKCIpXG4iKTsKLSNlbmRpZgorICAgIH0KIAogICAgIHJzY19tZW0gPSBSU0NfTG9hZFJlc291cmNlKGluc3RhbmNlLCBscFRhYmxlTmFtZSwgKExQU1RSKSBORV9SU0NUWVBFX0FDQ0VMRVJBVE9SLCAKIAkJCSAgICAgICAmaW1hZ2Vfc2l6ZSk7CkBAIC02OTYsMTEgKzY5MiwxMSBAQAogCUhBTkRMRQkJaE1lbnVfZGVzYzsKIAlNRU5VX0hFQURFUiAJKm1lbnVfZGVzYzsKIAotI2lmZGVmIERFQlVHX01FTlUKKwlpZihkZWJ1Z2dpbmdfbWVudSl7CiAJcHJpbnRmKCJMb2FkTWVudSglMDRYIiwgaW5zdGFuY2UpOwogCVByaW50SWQobWVudV9uYW1lKTsKIAlwcmludGYoIilcbiIpOwotI2VuZGlmCisJfQogCWlmIChtZW51X25hbWUgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKQEAgLTcyNSwxMSArNzIxLDExIEBACiAgICAgaW50IGltYWdlX3NpemU7CiAgICAgaW50IHNpemU7CiAgICAgCi0jaWZkZWYgREVCVUdfUkVTT1VSQ0UKKyAgICBpZihkZWJ1Z2dpbmdfcmVzb3VyY2UpewogCXByaW50ZigiTG9hZEJpdG1hcCglMDRYIiwgaW5zdGFuY2UpOwogCVByaW50SWQoYm1wX25hbWUpOwogCXByaW50ZigiKVxuIik7Ci0jZW5kaWYKKyAgICB9CiAKICAgICBpZiAoIWluc3RhbmNlKSB7CiAJc3RydWN0IFJlc291cmNlVGFibGUgKml0OwpAQCAtNzM3LDcgKzczMyw3IEBACiAJaWYgKGhiaXRtYXApCiAJCXJldHVybiBoYml0bWFwOwogCS8qIExvYWQgZnJvbSBzeXNyZXNibSAqLwotCWRwcmludGZfcmVzb3VyY2Uoc3RkZGViLCJTZWFyY2hpbmcgZm9yICVkXG4iLGJtcF9uYW1lKTsKKwlkcHJpbnRmX3Jlc291cmNlKHN0ZGRlYiwiU2VhcmNoaW5nIGZvciAlZFxuIiwgKGludCkgYm1wX25hbWUpOwogCWZvcihpdD1zeXNyZXNibVRhYmxlO2l0LT52YWx1ZTtpdCsrKXsKIAkgICAgaWYoaXQtPnR5cGU9PU5FX1JTQ1RZUEVfQklUTUFQKQogCSAgICBpZigoKChpbnQpYm1wX25hbWUgJiAweEZGRkYwMDAwKSA9PSAwKSkKZGlmZiAtLWdpdCBhL2xvYWRlci9zZWxlY3Rvci5jIGIvbG9hZGVyL3NlbGVjdG9yLmMKaW5kZXggYWRiOWU2OS4uZmU5ZWMyYSAxMDA2NDQKLS0tIGEvbG9hZGVyL3NlbGVjdG9yLmMKKysrIGIvbG9hZGVyL3NlbGVjdG9yLmMKQEAgLTEsNyArMSw4IEBACiAjaWZuZGVmIFdJTkVMSUIKKy8qCiBzdGF0aWMgY2hhciBSQ1NJZFtdID0gIiRJZDogc2VsZWN0b3IuYyx2IDEuMyAxOTkzLzA3LzA0IDA0OjA0OjIxIHJvb3QgRXhwIHJvb3QgJCI7CiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIFJvYmVydCBKLiBBbXN0YWR0LCAxOTkzIjsKLQorKi8KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMTAsNyArMTEsNiBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KLQogI2lmZGVmIF9fbGludXhfXwogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CkBAIC0yNywxMSArMjcsMTEgQEAKICNpbmNsdWRlICJuZWV4ZS5oIgogI2luY2x1ZGUgInNlZ21lbS5oIgogI2luY2x1ZGUgIndpbmUuaCIKKyNpbmNsdWRlICJpZjE2MzIuaCIKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAicHJvdG90eXBlcy5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX1NFTEVDVE9SUyAqLwotLyogI3VuZGVmIERFQlVHX1NFTEVDVE9SUyAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKIApAQCAtODU0LDYgKzg1NCw3IEBACiAgICAgaW50IG9sZF9sZW5ndGgsIGZpbGVfaW1hZ2VfbGVuZ3RoOwogICAgIGludCBzYXZlZF9vbGRfbGVuZ3RoOwogCisgICAgYXV0b19kYXRhX3NlbD0wOwogICAgIC8qCiAgICAgICogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgdGFibGUgdG8ga2VlcCB0cmFjayBvZiBhbGwgc2VsZWN0b3JzLgogICAgICAqLwpAQCAtOTY2LDYgKzk2Nyw3IEBACiAJfQogICAgIH0KIAorICAgIGlmKCFhdXRvX2RhdGFfc2VsKWRwcmludGZfc2VsZWN0b3JzKHN0ZGRlYiwiV2FybmluZzogTm8gYXV0b19kYXRhX3NlbFxuIik7CiAgICAgcyA9IHNlbGVjdG9yczsKICAgICBmb3IgKGkgPSAwOyBpIDwgbmVfaGVhZGVyLT5uX3NlZ21lbnRfdGFiOyBpKyssIHMrKykKICAgICB7CmRpZmYgLS1naXQgYS9sb2FkZXIvc2lnbmFsLmMgYi9sb2FkZXIvc2lnbmFsLmMKaW5kZXggNjUyN2YxZS4uM2NjNzQ2MSAxMDA2NDQKLS0tIGEvbG9hZGVyL3NpZ25hbC5jCisrKyBiL2xvYWRlci9zaWduYWwuYwpAQCAtMiw2ICsyLDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHNldGptcC5oPgpAQCAtMjAsMjAgKzIxLDEyIEBACiAjZW5kaWYKIAogI2luY2x1ZGUgIndpbmUuaCIKKyNpbmNsdWRlICJkb3NfZnMuaCIKICNpbmNsdWRlICJzZWdtZW0uaCIKICNpbmNsdWRlICJwcm90b3R5cGVzLmgiCisjaW5jbHVkZSAibWlzY2VtdS5oIgogI2luY2x1ZGUgIndpbi5oIgogCi1leHRlcm4gaW50IGRvX2ludDEwKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqKTsKLWV4dGVybiBpbnQgZG9faW50MTMoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICopOwotZXh0ZXJuIGludCBkb19pbnQxNShzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKik7Ci1leHRlcm4gaW50IGRvX2ludDE2KHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqKTsKLWV4dGVybiBpbnQgZG9faW50MjUoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICopOwotZXh0ZXJuIGludCBkb19pbnQyNihzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKik7Ci1leHRlcm4gaW50IGRvX2ludDJhKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqKTsKLWV4dGVybiBpbnQgZG9faW50MmYoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICopOwotZXh0ZXJuIGludCBkb19pbnQzMShzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKik7Ci0gCiAjaWYgIWRlZmluZWQoQlNENF80KSB8fCBkZWZpbmVkKGxpbnV4KSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKQogY2hhciAqIGNzdGFja1s0MDk2XTsKICNlbmRpZgpAQCAtNzUsNyArNjgsNyBAQAogICAgICAgICAgICAgICBjYXNlIDB4MTM6IHJldHVybiBkb19pbnQxMyhzY3ApOwogCSAgICAgIGNhc2UgMHgxNTogcmV0dXJuIGRvX2ludDE1KHNjcCk7CiAJICAgICAgY2FzZSAweDE2OiByZXR1cm4gZG9faW50MTYoc2NwKTsKLQkgICAgICBjYXNlIDB4MUE6IHJldHVybiBkb19pbnQxQShzY3ApOworCSAgICAgIGNhc2UgMHgxYTogcmV0dXJuIGRvX2ludDFhKHNjcCk7CiAJICAgICAgY2FzZSAweDIxOiByZXR1cm4gZG9faW50MjEoc2NwKTsKIAogCSAgICAgIGNhc2UgMHgyMjoKQEAgLTE1Nyw2ICsxNTAsMjYgQEAKIAkgICAgc2NwLT5zY19laXAgKz0gMjsgIC8qIEJ5cGFzcyB0aGUgaW50IGluc3RydWN0aW9uICovCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAorICAgICAgY2FzZSAweGU0OiAvKiBpbmIgYWwsWFggKi8KKyAgICAgICAgICAgIGlucG9ydGJfYWJzKHNjcCk7CisJICAgIHNjcC0+c2NfZWlwICs9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAweGU1OiAvKiBpbiBheCxYWCAqLworICAgICAgICAgICAgaW5wb3J0X2FicyhzY3ApOworCSAgICBzY3AtPnNjX2VpcCArPSAyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMHhlNjogLyogb3V0YiBYWCxhbCAqLworICAgICAgICAgICAgb3V0cG9ydGJfYWJzKHNjcCk7CisJICAgIHNjcC0+c2NfZWlwICs9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAweGU3OiAvKiBvdXQgWFgsYXggKi8KKyAgICAgICAgICAgIG91dHBvcnRfYWJzKHNjcCk7CisJICAgIHNjcC0+c2NfZWlwICs9IDI7CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgY2FzZSAweGVjOiAvKiBpbmIgYWwsZHggKi8KICAgICAgICAgICAgIGlucG9ydGIoc2NwKTsKIAkgICAgc2NwLT5zY19laXArKzsKZGlmZiAtLWdpdCBhL2xvYWRlci90YXNrLmMgYi9sb2FkZXIvdGFzay5jCmluZGV4IDRmOTk5MjEuLmRlNDJjYzMgMTAwNjQ0Ci0tLSBhL2xvYWRlci90YXNrLmMKKysrIGIvbG9hZGVyL3Rhc2suYwpAQCAtMSwzMCArMSwyNiBAQAogLyoKICAqICAgICAgICBUYXNrcyBmdW5jdGlvbnMKLSAqLworICoKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgTWFydGluIEF5b3R0ZSwgMTk5NCI7Ci0KLQorKi8KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgIndpbmRvd3MuaCIKLSNpbmNsdWRlICJ3aW5lLmgiCisjaW5jbHVkZSAiaWYxNjMyLmgiCiAjaW5jbHVkZSAidGFzay5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCi0vKiAjZGVmaW5lIERFQlVHX1RBU0sgKi8KLS8qICN1bmRlZiBERUJVR19UQVNLICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotCiBzdGF0aWMgTFBXSU5FVEFTS0VOVFJZIGxwVGFza0xpc3QgPSBOVUxMOwogc3RhdGljIGludCBuVGFza0NvdW50ID0gMDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCUdldEN1cnJlbnRUYXNrCVtLRVJORUwuMzZdCiAgKi8KLUhUQVNLIEdldEN1cnJlbnRUYXNrKCkKK0hUQVNLIEdldEN1cnJlbnRUYXNrKHZvaWQpCiB7CiAJTFBXSU5FVEFTS0VOVFJZIGxwVGFzayA9IGxwVGFza0xpc3Q7CiAJaW50IHBpZCA9IGdldHBpZCgpOwpAQCAtNDMsNyArMzksNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCUdldE51bVRhc2tzCVtLRVJORUwuMTUyXQogICovCi1XT1JEIEdldE51bVRhc2tzKCkKK1dPUkQgR2V0TnVtVGFza3Modm9pZCkKIHsKIAlkcHJpbnRmX3Rhc2soc3RkZGViLCJHZXROdW1UYXNrcygpIHJldHVybmVkICVkICFcbiIsIG5UYXNrQ291bnQpOwogCXJldHVybiBuVGFza0NvdW50OwpAQCAtODksNyArODUsOCBAQAogCUJPT0wJYlJldDsKIAlpbnQJCWNvdW50ID0gMDsKIAlMUFdJTkVUQVNLRU5UUlkgbHBUYXNrID0gbHBUYXNrTGlzdDsKLQlkcHJpbnRmX3Rhc2soc3RkZGViLCJFbnVtVGFza1dpbmRvd3MoJTA0WCwgJTA4WCwgJTA4WCkgIVxuIiwgaFRhc2ssIGxwRW51bUZ1bmMsIGxQYXJhbSk7CisJZHByaW50Zl90YXNrKHN0ZGRlYiwiRW51bVRhc2tXaW5kb3dzKCUwNFgsICUwOFgsICUwOFgpICFcbiIsIGhUYXNrLCAKKwkJKHVuc2lnbmVkIGludCkgbHBFbnVtRnVuYywgKHVuc2lnbmVkIGludCkgbFBhcmFtKTsKIAl3aGlsZSAoVFJVRSkgewogCQlpZiAobHBUYXNrLT50ZS5oVGFzayA9PSBoVGFzaykgYnJlYWs7CiAJCWlmIChscFRhc2sgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvbWVtb3J5L2dsb2JhbC5jIGIvbWVtb3J5L2dsb2JhbC5jCmluZGV4IDk0NTBjOTUuLmU2YjBmMDAgMTAwNjQ0Ci0tLSBhL21lbW9yeS9nbG9iYWwuYworKysgYi9tZW1vcnkvZ2xvYmFsLmMKQEAgLTEsMTggKzEsMjEgQEAKKy8qCiBzdGF0aWMgY2hhciBSQ1NJZFtdID0gIiRJZDogZ2xvYmFsLmMsdiAxLjIgMTk5My8wNy8wNCAwNDowNDoyMSByb290IEV4cCByb290ICQiOwogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBSb2JlcnQgSi4gQW1zdGFkdCwgMTk5MyI7CisqLwogCiAjZGVmaW5lIEdMT0JBTF9TT1VSQ0UKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAid2luZG93cy5oIgogI2luY2x1ZGUgInByb3RvdHlwZXMuaCIKICNpbmNsdWRlICJ0b29saGVscC5oIgogI2luY2x1ZGUgImhlYXAuaCIKICNpbmNsdWRlICJzZWdtZW0uaCIKKyNpbmNsdWRlICJzZWxlY3RvcnMuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgotLyogI2RlZmluZSBERUJVR19IRUFQIC8qICovCi0vKiAjdW5kZWYgIERFQlVHX0hFQVAgLyogKi8KKy8qICNkZWZpbmUgREVCVUdfSEVBUCAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKIApAQCAtMTgyLDcgKzE4NSw3IEBACiAgICAgR0RFU0MgKmdfcHJldjsKICAgICB2b2lkICptOwogCi0gICAgZHByaW50Zl9oZWFwKHN0ZGRlYiwiR2xvYmFsQWxsb2MgZmxhZ3MgJTRYLCBzaXplICVkXG4iLCBmbGFncywgc2l6ZSk7CisgICAgZHByaW50Zl9oZWFwKHN0ZGRlYiwiR2xvYmFsQWxsb2MgZmxhZ3MgJTRYLCBzaXplICVsZFxuIiwgZmxhZ3MsIHNpemUpOwogCiAgICAgaWYgKHNpemUgPT0gMCkgc2l6ZSA9IDE7CiAKQEAgLTI1OSw3ICsyNjIsNyBAQAogCSAqIFdlIGhhdmUgYSBuZXcgYmxvY2suICBMZXQncyBjcmVhdGUgYSBHREVTQyBlbnRyeSBmb3IgaXQuCiAJICovCiAJZyA9IG1hbGxvYyhzaXplb2YoKmcpKTsKLQlkcHJpbnRmX2hlYXAoc3RkZGViLCJOZXcgR0RFU0MgJTA4eFxuIiwgZyk7CisJZHByaW50Zl9oZWFwKHN0ZGRlYiwiTmV3IEdERVNDICUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIGcpOwogCWlmIChnID09IE5VTEwpCiAJICAgIHJldHVybiAwOwogCkBAIC0zNTYsNyArMzU5LDcgQEAKIAogICAgIGctPmxvY2tfY291bnQrKzsKIAotICAgIGRwcmludGZfaGVhcChzdGRkZWIsIkdsb2JhbExvY2s6IHJldHVybmluZyAlMDh4XG4iLCBnLT5hZGRyKTsKKyAgICBkcHJpbnRmX2hlYXAoc3RkZGViLCJHbG9iYWxMb2NrOiByZXR1cm5pbmcgJTA4eFxuIiwodW5zaWduZWQgaW50KWctPmFkZHIpOwogICAgIHJldHVybiBnLT5hZGRyOwogfQogDApAQCAtNjIxLDcgKzYyNCw3IEBACiAJewogCSAgICBHREVTQyAqZ19uZXc7CiAJICAgIEdERVNDICpnX3N0YXJ0ID0gZzsKLQkgICAgaW50IG9sZF9zZWdtZW50cyA9IGdfc3RhcnQtPmxlbmd0aDsKKy8qCSAgICBpbnQgb2xkX3NlZ21lbnRzID0gZ19zdGFydC0+bGVuZ3RoOyovCiAJICAgIHVuc2lnbmVkIHNob3J0IG5leHRfaGFuZGxlID0gZ19zdGFydC0+aGFuZGxlOwogCSAgICAKIAkgICAgZm9yIChpID0gMTsgaSA8PSBuX3NlZ21lbnRzOyBpKyssIGcgPSBnLT5uZXh0KQpAQCAtODE1LDcgKzgxOCw3IEBACiAJaWYgKGZyZWVfbWFwW2ldID09IDEpCiAJICAgIHRvdGFsX2ZyZWUrKzsKIAotICAgIGRwcmludGZfaGVhcChzdGRkZWIsIkdldEZyZWVTcGFjZSAvLyByZXR1cm4gJWxkICFcbiIsIHRvdGFsX2ZyZWUgPDwgMTYpOworICAgIGRwcmludGZfaGVhcChzdGRkZWIsIkdldEZyZWVTcGFjZSAvLyByZXR1cm4gJWxkICFcbiIsIChsb25nKSAodG90YWxfZnJlZSA8PCAxNikpOwogICAgIHJldHVybiB0b3RhbF9mcmVlIDw8IDE2OwogfQogDApkaWZmIC0tZ2l0IGEvbWVtb3J5L2hlYXAuYyBiL21lbW9yeS9oZWFwLmMKaW5kZXggNzIyZTMyZC4uNTY0NzRlNyAxMDA2NDQKLS0tIGEvbWVtb3J5L2hlYXAuYworKysgYi9tZW1vcnkvaGVhcC5jCkBAIC0xLDUgKzEsNyBAQAorLyoKIHN0YXRpYyBjaGFyIFJDU0lkW10gPSAiJElkOiBoZWFwLmMsdiAxLjMgMTk5My8wNy8wNCAwNDowNDoyMSByb290IEV4cCByb290ICQiOwogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBSb2JlcnQgSi4gQW1zdGFkdCwgMTk5MyI7CisqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTgsOSArMTAsOSBAQAogI2luY2x1ZGUgInNlZ21lbS5oIgogI2luY2x1ZGUgImhlYXAuaCIKICNpbmNsdWRlICJyZWdmdW5jLmgiCisjaW5jbHVkZSAiZGxscy5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCi0vKiAjZGVmaW5lIERFQlVHX0hFQVAgLyogKi8KLS8qICN1bmRlZiAgREVCVUdfSEVBUCAvKiAqLworLyogI2RlZmluZSBERUJVR19IRUFQICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogCkBAIC0yMiw4ICsyNCwxNiBAQAogICAgIE1ERVNDICptOwogCiAgICAgZm9yIChtID0gKmZyZWVfbGlzdDsgbSAhPSBOVUxMOyBtID0gbS0+bmV4dCkKKyAgICB7CiAJaWYgKCgoaW50KSBtICYgMHhmZmZmMDAwMCkgIT0gKChpbnQpICpmcmVlX2xpc3QgJiAweGZmZmYwMDAwKSkKKwl7ICAgZHByaW50Zl9oZWFwKHN0ZGRlYiwiSW52YWxpZCBibG9jayAlMDh4XG4iLG0pOwogCSAgICAqKGNoYXIgKikwID0gMDsKKwl9CisJaWYgKG0tPnByZXYgJiYgKCgoaW50KSBtLT5wcmV2ICYgMHhmZmZmMDAwMCkgIT0gKChpbnQpICpmcmVlX2xpc3QgJiAweGZmZmYwMDAwKSkpCisJeyAgIGRwcmludGZfaGVhcChzdGRkZWIsIkludmFsaWQgcHJldiAlMDh4IGZyb20gJTA4eFxuIiwgbS0+cHJldiwgbSk7CisJICAgICooY2hhciAqKTAgPSAwOworCX0KKyAgICB9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00OSwxMSArNTksOSBAQAogewogICAgIE1ERVNDICptLCAqbV9uZXc7CiAgICAgCi0gICAgZHByaW50Zl9oZWFwKHN0ZGRlYiwiSGVhcEFsbG9jOiBmcmVlX2xpc3QgJTA4eCwgZmxhZ3MgJXgsIGJ5dGVzICVkXG4iLCAKLQkgICBmcmVlX2xpc3QsIGZsYWdzLCBieXRlcyk7Ci0jaWZkZWYgREVCVUdfSEVBUAotICAgIEhFQVBfQ2hlY2tIZWFwKGZyZWVfbGlzdCk7Ci0jZW5kaWYKKyAgICBkcHJpbnRmX2hlYXAoc3RkZGViLCJIZWFwQWxsb2M6IGZyZWVfbGlzdCAlMDh4KCUwOHgpLCBmbGFncyAleCwgYnl0ZXMgJWRcbiIsIAorCSAgICh1bnNpZ25lZCBpbnQpIGZyZWVfbGlzdCwgKHVuc2lnbmVkIGludCkgKmZyZWVfbGlzdCwgZmxhZ3MsIGJ5dGVzKTsKKyAgICBpZihkZWJ1Z2dpbmdfaGVhcClIRUFQX0NoZWNrSGVhcChmcmVlX2xpc3QpOwogCiAgICAgLyoKICAgICAgKiBGaW5kIGZyZWUgYmxvY2sgYmlnIGVub3VnaC4KQEAgLTg2LDEwICs5NCw5IEBACiAJICAgIG0tPmZsYWdzID0gMDsKIAkgICAgaWYgKGZsYWdzICYgR0xPQkFMX0ZMQUdTX1pFUk9JTklUKQogCQltZW1zZXQobSArIDEsIDAsIGJ5dGVzKTsKLQkgICAgZHByaW50Zl9oZWFwKHN0ZGRlYiwiSGVhcEFsbG9jOiByZXR1cm5pbmcgJTA4eFxuIiwgKG0gKyAxKSk7Ci0jaWZkZWYgREVCVUdfSEVBUAotCSAgICBIRUFQX0NoZWNrSGVhcChmcmVlX2xpc3QpOwotI2VuZGlmCisJICAgIGRwcmludGZfaGVhcChzdGRkZWIsIkhlYXBBbGxvYzogcmV0dXJuaW5nICUwOHhcbiIsIAorCSAgICAJKHVuc2lnbmVkIGludCkgKG0gKyAxKSk7CisJICAgIGlmKGRlYnVnZ2luZ19oZWFwKUhFQVBfQ2hlY2tIZWFwKGZyZWVfbGlzdCk7CiAJICAgIHJldHVybiAodm9pZCAqKSAobSArIDEpOwogCX0KICAgICB9CkBAIC0xMTAsMTcgKzExNywxNCBAQAogCW0tPmZsYWdzID0gMDsKIAlpZiAoZmxhZ3MgJiBHTE9CQUxfRkxBR1NfWkVST0lOSVQpCiAJICAgIG1lbXNldChtICsgMSwgMCwgYnl0ZXMpOwotCWRwcmludGZfaGVhcChzdGRkZWIsIkhlYXBBbGxvYzogcmV0dXJuaW5nICUwOHhcbiIsIChtICsgMSkpOwotI2lmZGVmIERFQlVHX0hFQVAKLQlIRUFQX0NoZWNrSGVhcChmcmVlX2xpc3QpOwotI2VuZGlmCisJZHByaW50Zl9oZWFwKHN0ZGRlYiwiSGVhcEFsbG9jOiByZXR1cm5pbmcgJTA4eFxuIiwKKwkgICAgCSh1bnNpZ25lZCBpbnQpICAobSArIDEpKTsKKyAgICAgICAgaWYoZGVidWdnaW5nX2hlYXApSEVBUF9DaGVja0hlYXAoZnJlZV9saXN0KTsKIAlyZXR1cm4gKHZvaWQgKikgKG0gKyAxKTsKICAgICB9CiAKICAgICBkcHJpbnRmX2hlYXAoc3RkZGViLCJIZWFwQWxsb2M6IHJldHVybmluZyAlMDh4XG4iLCAwKTsKLSNpZmRlZiBERUJVR19IRUFQCi0gICAgSEVBUF9DaGVja0hlYXAoZnJlZV9saXN0KTsKLSNlbmRpZgorICAgIGlmKGRlYnVnZ2luZ19oZWFwKUhFQVBfQ2hlY2tIZWFwKGZyZWVfbGlzdCk7CiAgICAgcmV0dXJuIDA7CiB9CiAMCkBAIC0xNDMsMTUgKzE0NywxOSBAQAogICAgICAqLwogICAgIG0gPSAoTURFU0MgKikgb2xkX2Jsb2NrIC0gMTsKIAotICAgIGRwcmludGZfaGVhcChzdGRkZWIsIkhFQVBfUmVBbGxvYyBuZXdfc2l6ZT0lZCAhXG4iLCBuZXdfc2l6ZSk7Ci0gICAgZHByaW50Zl9oZWFwKHN0ZGRlYiwiSEVBUF9SZUFsbG9jIG9sZF9ibG9jaz0lMDhYICFcbiIsIG9sZF9ibG9jayk7Ci0gICAgZHByaW50Zl9oZWFwKHN0ZGRlYiwiSEVBUF9SZUFsbG9jIG09JTA4WCBmcmVlX2xpc3Q9JTA4WCAhXG4iLCBtLGZyZWVfbGlzdCk7Ci0gICAgZHByaW50Zl9oZWFwKHN0ZGRlYiwiSEVBUF9SZUFsbG9jIG0tPnByZXY9JTA4WCAhXG4iLCBtLT5wcmV2KTsKLSAgICBkcHJpbnRmX2hlYXAoc3RkZGViLCJIRUFQX1JlQWxsb2MgbS0+bmV4dD0lMDhYICFcbiIsIG0tPm5leHQpOwotICAgIGRwcmludGZfaGVhcChzdGRkZWIsIkhFQVBfUmVBbGxvYyAqZnJlZV9saXN0PSUwOFggIVxuIiwgKmZyZWVfbGlzdCk7Ci0jaWZkZWYgREVCVUdfSEVBUAotICAgIEhFQVBfQ2hlY2tIZWFwKGZyZWVfbGlzdCk7Ci0jZW5kaWYKKyAgICBkcHJpbnRmX2hlYXAoc3RkZGViLCJIRUFQX1JlQWxsb2MgbmV3X3NpemU9JWQgIVxuIiwgCisJICAgIAkodW5zaWduZWQgaW50KSBuZXdfc2l6ZSk7CisgICAgZHByaW50Zl9oZWFwKHN0ZGRlYiwiSEVBUF9SZUFsbG9jIG9sZF9ibG9jaz0lMDhYICFcbiIsCisJICAgIAkodW5zaWduZWQgaW50KSAgb2xkX2Jsb2NrKTsKKyAgICBkcHJpbnRmX2hlYXAoc3RkZGViLCJIRUFQX1JlQWxsb2MgbT0lMDhYIGZyZWVfbGlzdD0lMDhYICFcbiIsIAorCSAgICAJKHVuc2lnbmVkIGludCkgbSwgKHVuc2lnbmVkIGludCkgZnJlZV9saXN0KTsKKyAgICBkcHJpbnRmX2hlYXAoc3RkZGViLCJIRUFQX1JlQWxsb2MgbS0+cHJldj0lMDhYICFcbiIsCisgICAgCSAodW5zaWduZWQgaW50KSAgbS0+cHJldik7CisgICAgZHByaW50Zl9oZWFwKHN0ZGRlYiwiSEVBUF9SZUFsbG9jIG0tPm5leHQ9JTA4WCAhXG4iLAorICAgIAkgKHVuc2lnbmVkIGludCkgIG0tPm5leHQpOworICAgIGRwcmludGZfaGVhcChzdGRkZWIsIkhFQVBfUmVBbGxvYyAqZnJlZV9saXN0PSUwOFggIVxuIiwKKyAgICAJICh1bnNpZ25lZCBpbnQpICAqZnJlZV9saXN0KTsKKyAgICBpZihkZWJ1Z2dpbmdfaGVhcClIRUFQX0NoZWNrSGVhcChmcmVlX2xpc3QpOwogCiAgICAgaWYgKG0tPnByZXYgIT0gbSB8fCBtLT5uZXh0ICE9IG0gfHwgCiAJKChpbnQpIG0gJiAweGZmZmYwMDAwKSAhPSAoKGludCkgKmZyZWVfbGlzdCAmIDB4ZmZmZjAwMDApKQpAQCAtMTc5LDkgKzE4Nyw3IEBACiAJCXJldHVybiBOVUxMOwogCSAgICBtZW1jcHkobmV3X3AsIG9sZF9ibG9jaywgbS0+bGVuZ3RoKTsKIAkgICAgSEVBUF9GcmVlKGZyZWVfbGlzdCwgb2xkX2Jsb2NrKTsKLSNpZmRlZiBERUJVR19IRUFQCi0JICAgIEhFQVBfQ2hlY2tIZWFwKGZyZWVfbGlzdCk7Ci0jZW5kaWYKKwkgICAgaWYoZGVidWdnaW5nX2hlYXApSEVBUF9DaGVja0hlYXAoZnJlZV9saXN0KTsKIAkgICAgcmV0dXJuIG5ld19wOwogCX0KIApAQCAtMjE0LDkgKzIyMCw3IEBACiAJSEVBUF9GcmVlKGZyZWVfbGlzdCwgbV9mcmVlICsgMSk7CiAgICAgfQogICAgIAotI2lmZGVmIERFQlVHX0hFQVAKLSAgICBIRUFQX0NoZWNrSGVhcChmcmVlX2xpc3QpOwotI2VuZGlmCisgICAgaWYoZGVidWdnaW5nX2hlYXApSEVBUF9DaGVja0hlYXAoZnJlZV9saXN0KTsKICAgICByZXR1cm4gb2xkX2Jsb2NrOwogfQogCkBAIC0yMzMsOSArMjM3LDcgQEAKIAogICAgIGRwcmludGZfaGVhcChzdGRkZWIsIkhlYXBGcmVlOiBmcmVlX2xpc3QgJTA4eCwgYmxvY2sgJTA4eFxuIiwgCiAJICAgZnJlZV9saXN0LCBibG9jayk7Ci0jaWZkZWYgREVCVUdfSEVBUAotICAgIEhFQVBfQ2hlY2tIZWFwKGZyZWVfbGlzdCk7Ci0jZW5kaWYKKyAgICBpZihkZWJ1Z2dpbmdfaGVhcClIRUFQX0NoZWNrSGVhcChmcmVlX2xpc3QpOwogCiAgICAgLyoKICAgICAgKiBWYWxpZGF0ZSBwb2ludGVyLgpAQCAtMzMyLDI4ICszMzQsNDQgQEAKIAltX2ZyZWUtPm5leHQgPSBOVUxMOwogICAgIH0KIAotI2lmZGVmIERFQlVHX0hFQVAKLSAgICBIRUFQX0NoZWNrSGVhcChmcmVlX2xpc3QpOwotI2VuZGlmCisgICAgaWYoZGVidWdnaW5nX2hlYXApSEVBUF9DaGVja0hlYXAoZnJlZV9saXN0KTsKICAgICByZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkJCQlIRUFQX0NoZWNrTG9jYWxIZWFwcworICovCit2b2lkCitIRUFQX0NoZWNrTG9jYWxIZWFwcyhjaGFyICpmaWxlLGludCBsaW5lKQoreworICAgIExIRUFQICpsaDsKKyAgICBkcHJpbnRmX2hlYXAoc3RkZGViLCJDaGVja0xvY2FsSGVhcHMgY2FsbGVkIGZyb20gJXMgJWRcbiIsZmlsZSxsaW5lKTsKKyAgICBmb3IobGg9TG9jYWxIZWFwczsgbGghPU5VTEw7IGxoID0gbGgtPm5leHQpCisgICAgewlkcHJpbnRmX2hlYXAoc3RkZGViLCJDaGVja2luZyBoZWFwICUwOHgsIGZyZWVfbGlzdCAlMDh4XG4iLAorCQlsaCxsaC0+ZnJlZV9saXN0KTsKKwlIRUFQX0NoZWNrSGVhcCgmbGgtPmZyZWVfbGlzdCk7CisgICAgfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJSEVBUF9Mb2NhbEZpbmRIZWFwCiAgKi8KIExIRUFQICoKIEhFQVBfTG9jYWxGaW5kSGVhcCh1bnNpZ25lZCBzaG9ydCBvd25lcikKIHsKICAgICBMSEVBUCAqbGg7CisgICAgZXh0ZXJuIHN0cnVjdCB3X2ZpbGVzICpjdXJyZW50X2V4ZTsKICAgICAKICAgICBkcHJpbnRmX2hlYXAoc3RkZGViLCJIRUFQX0xvY2FsRmluZEhlYXA6IG93bmVyICUwNHhcbiIsIG93bmVyKTsKLSAgICAKKwogICAgIGZvciAobGggPSBMb2NhbEhlYXBzOyBsaCAhPSBOVUxMOyBsaCA9IGxoLT5uZXh0KQogICAgIHsKIAlpZiAobGgtPnNlbGVjdG9yID09IG93bmVyKQogCSAgICByZXR1cm4gbGg7CiAgICAgfQogCisgICAgZHByaW50Zl9oZWFwKHN0ZGRlYiwiV2FybmluZzogTG9jYWwgaGVhcCBub3QgZm91bmRcbiIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0zODAsNiArMzk4LDcgQEAKICAgICBsaC0+bG9jYWxfdGFibGUgPSBOVUxMOwogICAgIGxoLT5kZWx0YSAgICAgICA9IDB4MjA7CiAgICAgSEVBUF9Jbml0KCZsaC0+ZnJlZV9saXN0LCBzdGFydCwgbGVuZ3RoKTsKKyAgICBkcHJpbnRmX2hlYXAoc3RkZGViLCJIRUFQX0xvY2FsSW5pdDogZnJlZV9saXN0ICUwOHgsIGxlbmd0aCAlMDR4LCBwcmV2ICUwOHgsIG5leHQgJTA4eFxuIiwmbGgtPmZyZWVfbGlzdCxsaC0+ZnJlZV9saXN0LT5sZW5ndGgsIGxoLT5mcmVlX2xpc3QtPnByZXYsbGgtPmZyZWVfbGlzdC0+bmV4dCk7CiAgICAgTG9jYWxIZWFwcyA9IGxoOwogfQogCkBAIC00MDgsNyArNDI3LDcgQEAKICAgICB2b2lkICptOwogICAgIAogICAgIGRwcmludGZfaGVhcChzdGRkZWIsIldJTjE2X0xvY2FsQWxsb2M6IGZsYWdzICV4LCBieXRlcyAlZFxuIiwgZmxhZ3MsYnl0ZXMpOwotICAgIGRwcmludGZfaGVhcChzdGRkZWIsIiAgICBjYWxsZWQgZnJvbSBzZWdtZW50ICUwNHhcbiIsIFN0YWNrMTZGcmFtZVsxMV0pOworICAgIGRwcmludGZfaGVhcChzdGRkZWIsIiAgICBjYWxsZWQgZnJvbSBzZWdtZW50ICUwNHgsIGRzPSUwNHhcbiIsIFN0YWNrMTZGcmFtZVsxMV0sU3RhY2sxNkZyYW1lWzZdKTsKIAogICAgIG0gPSBIRUFQX0FsbG9jKExPQ0FMSEVBUCgpLCBmbGFncywgYnl0ZXMpOwogCQpkaWZmIC0tZ2l0IGEvbWVtb3J5L2xpbmVhci5jIGIvbWVtb3J5L2xpbmVhci5jCmluZGV4IDFlYmIxN2IuLmNhYjZmYjkgMTAwNjQ0Ci0tLSBhL21lbW9yeS9saW5lYXIuYworKysgYi9tZW1vcnkvbGluZWFyLmMKQEAgLTEsNiArMSw3IEBACisvKgogc3RhdGljIGNoYXIgUkNTSWRbXSA9ICIkSWQkIjsKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgUm9iZXJ0IEouIEFtc3RhZHQsIDE5OTQiOwotCisqLwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CmRpZmYgLS1naXQgYS9taXNjL2F0b20uYyBiL21pc2MvYXRvbS5jCmluZGV4IDI4MjIzNTAuLmQ2ZmE5ODggMTAwNjQ0Ci0tLSBhL21pc2MvYXRvbS5jCisrKyBiL21pc2MvYXRvbS5jCkBAIC03Myw3ICs3Myw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0JaGFuZGxlID0gTG9jYWxBbGlnbiAoIExNRU1fTU9WRUFCTEUsIHNpemVvZihBVE9NVEFCTEUpICsKKwloYW5kbGUgPSAoSEFORExFKSBMb2NhbEFsaWduICggTE1FTV9NT1ZFQUJMRSwgc2l6ZW9mKEFUT01UQUJMRSkgKwogCQkJICAgICAoZW50cmllcy0xKSAqIHNpemVvZihIQU5ETEUpICk7CiAJaWYgKCFoYW5kbGUpIAogCSAgICByZXR1cm4gRkFMU0U7CmRpZmYgLS1naXQgYS9taXNjL2NsaXBib2FyZC5jIGIvbWlzYy9jbGlwYm9hcmQuYwppbmRleCA1ZTgyZDUyLi5lOGEwY2Y5IDEwMDY0NAotLS0gYS9taXNjL2NsaXBib2FyZC5jCisrKyBiL21pc2MvY2xpcGJvYXJkLmMKQEAgLTIsOSArMiw4IEBACiAgKiAnV2luZScgQ2xpcGJvYXJkIGZ1bmN0aW9uIGhhbmRsaW5nCiAgKgogICogQ29weXJpZ2h0IDE5OTQgTWFydGluIEF5b3R0ZQotICovCi0KIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCBNYXJ0aW4gQXlvdHRlLCAxOTk0IjsKKyovCiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTgsOSArMTcsOCBAQAogI2luY2x1ZGUgInByb3RvdHlwZXMuaCIKICNpbmNsdWRlICJoZWFwLmgiCiAjaW5jbHVkZSAid2luLmgiCisjaW5jbHVkZSAiY2xpcGJvYXJkLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKLS8qICNkZWZpbmUgREVCVUdfQ0xJUEJPQVJEIC8qICovCi0vKiAjdW5kZWYgIERFQlVHX0NMSVBCT0FSRCAvKiAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKIHR5cGVkZWYgc3RydWN0IHRhZ0NMSVBGT1JNQVQgewpAQCAtMzA0LDYgKzMwMiw4IEBACiB7CiAgICAgZHByaW50Zl9jbGlwYm9hcmQoc3RkbmltcCwKIAkJIkNoYW5nZUNsaXBib2FyZENoYWluKCUwNFgsICUwNFgpICFcbiIsIGhXbmQsIGhXbmROZXh0KTsKKworICAgICByZXR1cm4gMDsKIH0KIAogCkBAIC0zNDMsNiArMzQzLDggQEAKIHsKICAgICBkcHJpbnRmX2NsaXBib2FyZChzdGRuaW1wLAogCSJHZXRQcmlvcml0eUNsaXBib2FyZEZvcm1hdCglcCwgJWQpICFcbiIsIGxwUHJpb3JpdHlMaXN0LCBuQ291bnQpOworCisgICAgcmV0dXJuIDA7CiB9CiAKIApkaWZmIC0tZ2l0IGEvbWlzYy9jb21tZGxnLmMgYi9taXNjL2NvbW1kbGcuYwppbmRleCBhYTE2MTRiLi5mOWE2Mjk4IDEwMDY0NAotLS0gYS9taXNjL2NvbW1kbGcuYworKysgYi9taXNjL2NvbW1kbGcuYwpAQCAtMiwxOSArMiwyMiBAQAogICogQ09NTURMRyBmdW5jdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgMTk5NCBNYXJ0aW4gQXlvdHRlCi0gKi8KIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgTWFydGluIEF5b3R0ZSwgMTk5NCI7CisqLwogCiAvKgogI2RlZmluZSBERUJVR19PUEVORExHCiAjZGVmaW5lIERFQlVHX09QRU5ETEdfRFJBVwogKi8KIAotI2luY2x1ZGUgInN0ZGlvLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICJkaWFsb2cuaCIKICNpbmNsdWRlICJ3aW4uaCIKICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSAibWVzc2FnZS5oIgorI2luY2x1ZGUgImxpYnJhcnkuaCIKICNpbmNsdWRlICJoZWFwLmgiCiAjaW5jbHVkZSAiY29tbWRsZy5oIgogI2luY2x1ZGUgImRsZ3MuaCIKQEAgLTIyLDggKzI1LDYgQEAKICNkZWZpbmUgT1BFTkZJTEVETEcyCQkJMTEKICNkZWZpbmUgU0FWRUZJTEVETEcyCQkJMTIKIAotCi1leHRlcm4gCUhJTlNUQU5DRSAJaFN5c1JlczsKIHN0YXRpYwlEV09SRCAJCUNvbW1EbGdMYXN0RXJyb3IgPSAwOwogCiBzdGF0aWMJSEJJVE1BUAkJaEZvbGRlciA9IDA7CmRpZmYgLS1naXQgYS9taXNjL2Rvc19mcy5jIGIvbWlzYy9kb3NfZnMuYwppbmRleCBhZTE5ZWEzLi41NGJmNTY0IDEwMDY0NAotLS0gYS9taXNjL2Rvc19mcy5jCisrKyBiL21pc2MvZG9zX2ZzLmMKQEAgLTI1LDkgKzI1LDEwIEBACiAjaW5jbHVkZSA8c3lzL21vdW50Lmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgIndpbmUuaCIKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAibXNkb3MuaCIKLSNpbmNsdWRlICJwcm90b3R5cGVzLmgiCisvKiAjaW5jbHVkZSAiZG9zX2ZzLmgiICovCiAjaW5jbHVkZSAiYXV0b2NvbmYuaCIKICNpbmNsdWRlICJjb21tLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKQEAgLTE3OCw4ICsxNzksNiBAQAogCWludCBwYXJhbGxlbHBvcnRzID0gMDsKIAlpbnQgc2VyaWFscG9ydHMgPSAwOwogCWludCB4OwotCWV4dGVybiBzdHJ1Y3QgRG9zRGV2aWNlU3RydWN0IENPTVtNQVhfUE9SVFNdOwotCWV4dGVybiBzdHJ1Y3QgRG9zRGV2aWNlU3RydWN0IExQVFtNQVhfUE9SVFNdOwogCiAvKiBib3Jyb3dlZCBmcm9tIFJhbHBoIEJyb3duJ3MgaW50ZXJydXB0IGxpc3RzIAogCkBAIC0yNTUsNyArMjU0LDcgQEAKIAljaGFyICpkaXJuYW1lOwogCXN0cnVjdCBzdGF0IHM7CiAJZHByaW50Zl9kb3NmcyhzdGRkZWIsICJET1NfVmFsaWREaXJlY3Rvcnk6ICclcydcbiIsIG5hbWUpOwotCWlmICgoZGlybmFtZSA9IEdldFVuaXhGaWxlTmFtZShuYW1lKSkgPT0gTlVMTCkKKwlpZiAoKGRpcm5hbWUgPSBET1NfR2V0VW5peEZpbGVOYW1lKG5hbWUpKSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAlpZiAoc3RhdChkaXJuYW1lLCZzKSkKIAkJcmV0dXJuIDA7CkBAIC0zOTIsNyArMzkxLDcgQEAKIAogfQogCi1jaGFyICpHZXRVbml4RmlsZU5hbWUoY2hhciAqZG9zZmlsZW5hbWUpCitjaGFyICpET1NfR2V0VW5peEZpbGVOYW1lKGNoYXIgKmRvc2ZpbGVuYW1lKQogeyAKIAkvKiAgIGE6XHdpbmRvd3Ncc3lzdGVtLmluaSAgPT4gIC9kb3Mvd2luZG93cy9zeXN0ZW0uaW5pICovCiAJCkBAIC00MTgsNyArNDE3LDcgQEAKIAlyZXR1cm4odGVtcCk7CiB9CiAKLWNoYXIgKkdldERvc0ZpbGVOYW1lKGNoYXIgKnVuaXhmaWxlbmFtZSkKK2NoYXIgKkRPU19HZXREb3NGaWxlTmFtZShjaGFyICp1bml4ZmlsZW5hbWUpCiB7IAogCWludCBpOwogCXN0YXRpYyBjaGFyIHRlbXBbMjU2XSwgcm9vdGRpclsyNTZdOwpAQCAtNTU1LDcgKzU1NCw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLWNoYXIgKkZpbmRGaWxlKGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbiwgY2hhciAqZmlsZW5hbWUsIGNoYXIgKipleHRlbnNpb25zLCAKK2NoYXIgKkRPU19GaW5kRmlsZShjaGFyICpidWZmZXIsIGludCBidWZsZW4sIGNoYXIgKmZpbGVuYW1lLCBjaGFyICoqZXh0ZW5zaW9ucywgCiAJCWNoYXIgKnBhdGgpCiB7CiAgICAgY2hhciAqd29ya2luZ3BhdGgsICpkaXJuYW1lLCAqcm9vdG5hbWUsICoqZTsKQEAgLTU2Niw3ICs1NjUsNyBAQAogCiAgICAgaWYgKHN0cmNocihmaWxlbmFtZSwgJ1xcJykgIT0gTlVMTCkKICAgICB7Ci0Jc3RybmNweShidWZmZXIsIEdldFVuaXhGaWxlTmFtZShmaWxlbmFtZSksIGJ1Zmxlbik7CisJc3RybmNweShidWZmZXIsIERPU19HZXRVbml4RmlsZU5hbWUoZmlsZW5hbWUpLCBidWZsZW4pOwogCXN0YXQoIGJ1ZmZlciwgJmZpbGVzdGF0KTsKIAlpZiAoU19JU1JFRyhmaWxlc3RhdC5zdF9tb2RlKSkKIAkgICAgcmV0dXJuIGJ1ZmZlcjsKQEAgLTU4MCw3ICs1NzksNyBAQAogCXJldHVybiBidWZmZXI7CiAgICAgfQogCi0gICAgZHByaW50Zl9kb3NmcyhzdGRkZWIsIkZpbmRGaWxlOiBsb29raW5nIGZvciAlc1xuIiwgZmlsZW5hbWUpOworICAgIGRwcmludGZfZG9zZnMoc3RkZGViLCJET1NfRmluZEZpbGU6IGxvb2tpbmcgZm9yICVzXG4iLCBmaWxlbmFtZSk7CiAgICAgcm9vdG5hbWVsZW4gPSBzdHJsZW4oZmlsZW5hbWUpOwogICAgIHJvb3RuYW1lID0gc3RyZHVwKGZpbGVuYW1lKTsKICAgICBUb1VuaXgocm9vdG5hbWUpOwpAQCAtNTkxLDcgKzU5MCw3IEBACiAJZGlybmFtZSA9IHN0cnRvayhOVUxMLCAiOyIpKQogICAgIHsKIAlpZiAoc3RyY2hyKGRpcm5hbWUsICdcXCcpICE9IE5VTEwpCi0JCWQgPSBvcGVuZGlyKCBHZXRVbml4RmlsZU5hbWUoZGlybmFtZSkgKTsKKwkJZCA9IG9wZW5kaXIoIERPU19HZXRVbml4RmlsZU5hbWUoZGlybmFtZSkgKTsKIAllbHNlCiAJCWQgPSBvcGVuZGlyKCBkaXJuYW1lICk7CiAKQEAgLTYxOCw3ICs2MTcsNyBAQAogCQkgICAgaWYgKGZvdW5kKQogCQkgICAgewogCQkJaWYgKHN0cmNocihkaXJuYW1lLCAnXFwnKSAhPSBOVUxMKQotCQkJCXN0cm5jcHkoYnVmZmVyLCBHZXRVbml4RmlsZU5hbWUoZGlybmFtZSksIGJ1Zmxlbik7CisJCQkJc3RybmNweShidWZmZXIsIERPU19HZXRVbml4RmlsZU5hbWUoZGlybmFtZSksIGJ1Zmxlbik7CiAJCQllbHNlCiAJCQkJc3RybmNweShidWZmZXIsIGRpcm5hbWUsIGJ1Zmxlbik7CiAKQEAgLTY3OSw3ICs2NzgsNyBAQAogCQkKIAluYW1lID0gbWFsbG9jKDEwMjQpOwogCi0Jc3RyY3B5KG5hbWUsIEdldFVuaXhGaWxlTmFtZShXaW5kb3dzRGlyZWN0b3J5KSk7CisJc3RyY3B5KG5hbWUsIERPU19HZXRVbml4RmlsZU5hbWUoV2luZG93c0RpcmVjdG9yeSkpOwogCXN0cmNhdChuYW1lLCAiLyIpOwogCXN0cmNhdChuYW1lLCAid2luLmluaSIpOwogCkBAIC03MzIsNyArNzMxLDcgQEAKIAlpZiAoeCA9PSBNQVhfT1BFTl9ESVJTKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmICgodW5peGRpcm5hbWUgPSBHZXRVbml4RmlsZU5hbWUoZG9zZGlybmFtZSkpID09IE5VTEwpCisJaWYgKCh1bml4ZGlybmFtZSA9IERPU19HZXRVbml4RmlsZU5hbWUoZG9zZGlybmFtZSkpID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCiAJc3RyY3B5KHRlbXAsIHVuaXhkaXJuYW1lKTsKZGlmZiAtLWdpdCBhL21pc2MvZHJpdmVyLmMgYi9taXNjL2RyaXZlci5jCmluZGV4IDQyNTYzOGYuLmMzOWMzZTcgMTAwNjQ0Ci0tLSBhL21pc2MvZHJpdmVyLmMKKysrIGIvbWlzYy9kcml2ZXIuYwpAQCAtMiw5ICsyLDggQEAKICAqIFdpbmUgRHJpdmVycyBmdW5jdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgMTk5NCBNYXJ0aW4gQXlvdHRlCi0gKi8KLQogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBNYXJ0aW4gQXlvdHRlLCAxOTk0IjsKKyovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgIndpbmRvd3MuaCIKQEAgLTEzLDEzICsxMiwxMSBAQAogI2luY2x1ZGUgImRsbHMuaCIKICNpbmNsdWRlICJkcml2ZXIuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgotLyogI2RlZmluZSBERUJVR19EUklWRVIgLyogKi8KLS8qICN1bmRlZiAgREVCVUdfRFJJVkVSIC8qICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogTFBEUklWRVJJVEVNIGxwRHJ2SXRlbUxpc3QgPSBOVUxMOwogCi12b2lkIExvYWRTdGFydHVwRHJpdmVycygpCit2b2lkIExvYWRTdGFydHVwRHJpdmVycyh2b2lkKQogewogCUhEUlZSCWhEcnY7CiAJY2hhcglzdHJbMjU2XTsKZGlmZiAtLWdpdCBhL21pc2MvZXNjYXBlLmMgYi9taXNjL2VzY2FwZS5jCmluZGV4IGE0ZjZhNmYuLmI4NDhmM2EgMTAwNjQ0Ci0tLSBhL21pc2MvZXNjYXBlLmMKKysrIGIvbWlzYy9lc2NhcGUuYwpAQCAtMiw5ICsyLDkgQEAKICAqIEVzY2FwZSgpIGZ1bmN0aW9uLgogICoKICAqIENvcHlyaWdodCAxOTk0ICBCb2IgQW1zdGFkdAotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEJvYiBBbXN0YWR0LCAxOTk0IjsKKyovCiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpkaWZmIC0tZ2l0IGEvbWlzYy9leGVjLmMgYi9taXNjL2V4ZWMuYwppbmRleCBjMWI5NjA1Li5kZjBiZWU2IDEwMDY0NAotLS0gYS9taXNjL2V4ZWMuYworKysgYi9taXNjL2V4ZWMuYwpAQCAtMTEsMTEgKzExLDEyIEBACiAjaW5jbHVkZSAic2VnbWVtLmgiCiAjaW5jbHVkZSAicHJvdG90eXBlcy5oIgogI2luY2x1ZGUgImRsbHMuaCIKLSNpbmNsdWRlICJ3aW5lLmgiCiAjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgImlmMTYzMi5oIgorI2luY2x1ZGUgImNhbGxiYWNrLmgiCisjaW5jbHVkZSAibGlicmFyeS5oIgorI2luY2x1ZGUgIm5lX2ltYWdlLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKLS8qICNkZWZpbmUgREVCVUdfRVhFQyAvKiAqLwotLyogI3VuZGVmICBERUJVR19FWEVDIC8qICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogI2RlZmluZSBIRUxQX0NPTlRFWFQgICAgICAweDAwMDEKQEAgLTMzLDggKzM0LDYgQEAKICNkZWZpbmUgSEVMUF9NVUxUSUtFWSAgICAgMHgwMjAxCiAjZGVmaW5lIEhFTFBfU0VUV0lOUE9TICAgIDB4MDIwMwogCi1leHRlcm4gc3RydWN0ICB3X2ZpbGVzICogd2luZV9maWxlczsKLQogdHlwZWRlZiBzdHJ1Y3QgewogCVdPUkQJd0VudlNlZzsKIAlMUFNUUglscENtZExpbmU7CkBAIC00NCw5ICs0Myw2IEBACiAKIHR5cGVkZWYgQk9PTCAoQ0FMTEJBQ0sgKiBMUEZOV0lOTUFJTikoSEFORExFLCBIQU5ETEUsIExQU1RSLCBpbnQpOwogCi0KLWV4dGVybiBpbnQgQ2FsbFRvSW5pdDE2KHVuc2lnbmVkIGxvbmcgY3NpcCwgdW5zaWduZWQgbG9uZyBzc3NwLCAKLQkJCXVuc2lnbmVkIHNob3J0IGRzKTsKIEhBTkRMRSBDcmVhdGVOZXdUYXNrKEhJTlNUQU5DRSBoSW5zdCk7CiAKICNpZm5kZWYgV0lORUxJQgpAQCAtMTEzLDcgKzEwOSw3IEBACiAgICAgCWRwcmludGZfZXhlYyhzdGRkZWIsIlN0YXJ0TmV3VGFzaygpIC8vIGJlZm9yZSBGaXh1cFNlZ21lbnQgIVxuIik7CiAJZm9yKHcgPSB3cG50OyB3OyB3ID0gdy0+bmV4dCkJewogCQlmb3IgKHNlZ21lbnQgPSAwOyBzZWdtZW50IDwgdy0+bmUtPm5lX2hlYWRlci0+bl9zZWdtZW50X3RhYjsgc2VnbWVudCsrKSB7Ci0JCQlpZiAoRml4dXBTZWdtZW50KHcsIHNlZ21lbnQpIDwgMCkgeworCQkJaWYgKE5FX0ZpeHVwU2VnbWVudCh3LCBzZWdtZW50KSA8IDApIHsKIAkJCQlteWVycm9yKCJmaXh1cCBmYWlsZWQuIik7CiAJCQkJfQogCQkJfQpAQCAtMjI3LDYgKzIyMyw4IEBACiB7CiAgICAgZHByaW50Zl9leGVjKHN0ZG5pbXAsIkVNUFRZIFNUVUIgISEhIEV4aXRXaW5kb3dzKCUwOGxYLCAlMDRYKSAhXG4iLCAKIAkJZHdSZXNlcnZlZCwgd1JldENvZGUpOworCisgICBleGl0KHdSZXRDb2RlKTsKIH0KIAogCmRpZmYgLS1naXQgYS9taXNjL2ZpbGUuYyBiL21pc2MvZmlsZS5jCmluZGV4IDVhOWVjZWUuLmY5N2UyOGYgMTAwNjQ0Ci0tLSBhL21pc2MvZmlsZS5jCisrKyBiL21pc2MvZmlsZS5jCkBAIC04LDcgKzgsNyBAQAogICogTk9WIDkzIEVyaWsgQm9zIChlcmlrQHhzNGFsbC5ubCkKICAqCQktIHJlbW92ZWQgUGFyc2VEb3NGaWxlTmFtZSwgYW5kIERvc0RyaXZlIHN0cnVjdHVyZXMuCiAgKgkJLSBzdHJ1Y3R1cmVzIGR5bmFtaWNhbGx5IGNvbmZpZ3VyZWQgYXQgcnVudGltZS4KLSAqCQktIF9sb3BlbiBtb2RpZmllZCB0byB1c2UgR2V0VW5peEZpbGVOYW1lLgorICoJCS0gX2xvcGVuIG1vZGlmaWVkIHRvIHVzZSBET1NfR2V0VW5peEZpbGVOYW1lLgogICoJCS0gRXhpc3RpbmcgZnVuY3Rpb25zIG1vZGlmaWVkIHRvIHVzZSBkb3NmcyBmdW5jdGlvbnMuCiAgKgkJLSBBZGRlZCBfbGxzZWVrLCBfbGNyZWF0LCBHZXREcml2ZVR5cGUsIEdldFRlbXBEcml2ZSwgCiAgKgkJICBHZXRXaW5kb3dzRGlyZWN0b3J5LCBHZXRTeXN0ZW1EaXJlY3RvcnksIEdldFRlbXBGaWxlTmFtZS4KQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJwcm90b3R5cGVzLmgiCisjaW5jbHVkZSAiZG9zX2ZzLmgiCiAjaW5jbHVkZSAicmVnZnVuYy5oIgogI2luY2x1ZGUgIndpbmRvd3MuaCIKICNpbmNsdWRlICJ3aW5lLmgiCkBAIC0zMCwyMCArMzAsMTEgQEAKICNpbmNsdWRlICJyZWdpc3RlcnMuaCIKICNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKLS8qICNkZWZpbmUgREVCVUdfRklMRSAvKiAqLwotLyogI3VuZGVmICBERUJVR19GSUxFIC8qICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogI2RlZmluZSBNQVhfUEFUSCAyNTUKIAogY2hhciBXaW5kb3dzRGlyZWN0b3J5WzI1Nl0sIFN5c3RlbURpcmVjdG9yeVsyNTZdLCBUZW1wRGlyZWN0b3J5WzI1Nl07Ci1leHRlcm4gY2hhciBXaW5kb3dzUGF0aFsyNTZdOwotCi1leHRlcm4gY2hhciBXaW5kb3dzUGF0aFtdOwotZXh0ZXJuIFdPUkQgRXh0ZW5kZWRFcnJvcjsKLQotCi1jaGFyICpHZXREb3NGaWxlTmFtZShjaGFyICp1bml4ZmlsZW5hbWUpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgX2xvcGVuIApAQCAtNTYsNyArNDcsNyBAQAogICBjaGFyICpVbml4RmlsZU5hbWU7CiAKICAgZHByaW50Zl9maWxlKHN0ZGRlYiwgIl9sb3Blbjogb3BlbignJXMnLCAlWCk7XG4iLCBscFBhdGhOYW1lLCBpUmVhZFdyaXRlKTsKLSAgaWYgKChVbml4RmlsZU5hbWUgPSBHZXRVbml4RmlsZU5hbWUobHBQYXRoTmFtZSkpID09IE5VTEwpCisgIGlmICgoVW5peEZpbGVOYW1lID0gRE9TX0dldFVuaXhGaWxlTmFtZShscFBhdGhOYW1lKSkgPT0gTlVMTCkKICAgCXJldHVybiBIRklMRV9FUlJPUjsKICAgaVJlYWRXcml0ZSAmPSAweDAwMEY7CiAgIGhhbmRsZSA9ICBvcGVuIChVbml4RmlsZU5hbWUsIGlSZWFkV3JpdGUpOwpAQCAtMTIyLDcgKzExMyw2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBJTlQgT3BlbkZpbGUgKExQU1RSIGxwRmlsZU5hbWUsIExQT0ZTVFJVQ1Qgb2ZzLCBXT1JEIHdTdHlsZSkKIHsKLSAgICBpbnQJCSAgICAgICAgICAgICAgaGFuZGxlOwogI2lmbmRlZiBQUk9DRU1VCiAgICAgc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICBjY29udGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvIG1ha2UgbWFjcm9zIGxpa2UgRUFYIGhhcHB5ICovCkBAIC0xNTUsNyArMTQ1LDcgQEAKICAgICAgIG9mcy0+bkVyckNvZGUgPSAwOwogICAgICAgKigoaW50KilvZnMtPnJlc2VydmVkKSA9IDA7CiAKLSAgICAgIGlmICgodW5peGZpbGVuYW1lID0gR2V0VW5peEZpbGVOYW1lIChvZnMtPnN6UGF0aE5hbWUpKSA9PSBOVUxMKQorICAgICAgaWYgKCh1bml4ZmlsZW5hbWUgPSBET1NfR2V0VW5peEZpbGVOYW1lIChvZnMtPnN6UGF0aE5hbWUpKSA9PSBOVUxMKQogICAgICAgewogICAgICAgICBlcnJub190b19kb3NlcnIoKTsKIAlvZnMtPm5FcnJDb2RlID0gRXh0ZW5kZWRFcnJvcjsKQEAgLTE4MSwyMyArMTcxLDIzIEBACiAJewogCSAgY2hhciB0ZW1wW01BWF9QQVRIKzFdOwogCSAgc3RyY3B5IChmaWxlbmFtZSwgbHBGaWxlTmFtZSk7Ci0JICBpZiAoICghc3RhdChHZXRVbml4RmlsZU5hbWUoZmlsZW5hbWUpLCAmcykpICYmIChTX0lTUkVHKHMuc3RfbW9kZSkpICkKKwkgIGlmICggKCFzdGF0KERPU19HZXRVbml4RmlsZU5hbWUoZmlsZW5hbWUpLCAmcykpICYmIChTX0lTUkVHKHMuc3RfbW9kZSkpICkKIAkgICAgYnJlYWs7CiAJICBHZXRXaW5kb3dzRGlyZWN0b3J5IChmaWxlbmFtZSxNQVhfUEFUSCk7CiAJICBpZiAoKCFmaWxlbmFtZVswXSl8fChmaWxlbmFtZVtzdHJsZW4oZmlsZW5hbWUpLTFdIT0nXFwnKSkKICAgICAgICAgICAgIHN0cmNhdChmaWxlbmFtZSwgIlxcIik7CiAJICBzdHJjYXQgKGZpbGVuYW1lLCBscEZpbGVOYW1lKTsKLQkgIGlmICggKCFzdGF0KEdldFVuaXhGaWxlTmFtZShmaWxlbmFtZSksICZzKSkgJiYgKFNfSVNSRUcocy5zdF9tb2RlKSkgKQorCSAgaWYgKCAoIXN0YXQoRE9TX0dldFVuaXhGaWxlTmFtZShmaWxlbmFtZSksICZzKSkgJiYgKFNfSVNSRUcocy5zdF9tb2RlKSkgKQogCSAgICBicmVhazsKIAkgIEdldFN5c3RlbURpcmVjdG9yeSAoZmlsZW5hbWUsTUFYX1BBVEgpOwogCSAgaWYgKCghZmlsZW5hbWVbMF0pfHwoZmlsZW5hbWVbc3RybGVuKGZpbGVuYW1lKS0xXSE9J1xcJykpCiAgCSAgICBzdHJjYXQoZmlsZW5hbWUsICJcXCIpOwogCSAgc3RyY2F0IChmaWxlbmFtZSwgbHBGaWxlTmFtZSk7Ci0JICBpZiAoICghc3RhdChHZXRVbml4RmlsZU5hbWUoZmlsZW5hbWUpLCAmcykpICYmIChTX0lTUkVHKHMuc3RfbW9kZSkpICkKKwkgIGlmICggKCFzdGF0KERPU19HZXRVbml4RmlsZU5hbWUoZmlsZW5hbWUpLCAmcykpICYmIChTX0lTUkVHKHMuc3RfbW9kZSkpICkKIAkgICAgYnJlYWs7Ci0JICBpZiAoIUZpbmRGaWxlKHRlbXAsTUFYX1BBVEgsbHBGaWxlTmFtZSxOVUxMLFdpbmRvd3NQYXRoKSkKKwkgIGlmICghRE9TX0ZpbmRGaWxlKHRlbXAsTUFYX1BBVEgsbHBGaWxlTmFtZSxOVUxMLFdpbmRvd3NQYXRoKSkKIAkgICAgewotCSAgICAgIHN0cmNweShmaWxlbmFtZSwgR2V0RG9zRmlsZU5hbWUodGVtcCkpOworCSAgICAgIHN0cmNweShmaWxlbmFtZSwgRE9TX0dldERvc0ZpbGVOYW1lKHRlbXApKTsKIAkgICAgICBicmVhazsKIAkgICAgfQogCSAgc3RyY3B5IChmaWxlbmFtZSwgbHBGaWxlTmFtZSk7CkBAIC0yMjQsNyArMjE0LDcgQEAKIAogICAgIC8qIE5vdyBvbiB0byBnZXR0aW5nIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhhdCBmaWxlICovCiAKLSAgICBpZiAocmVzID0gc3RhdChHZXRVbml4RmlsZU5hbWUob2ZzLT5zelBhdGhOYW1lKSwgJnMpKQorICAgIGlmICgocmVzID0gc3RhdChET1NfR2V0VW5peEZpbGVOYW1lKG9mcy0+c3pQYXRoTmFtZSksICZzKSkpCiAgICAgICB7CiAgICAgICBlcnJub190b19kb3NlcnIoKTsKICAgICAgIG9mcy0+bkVyckNvZGUgPSBFeHRlbmRlZEVycm9yOwpAQCAtMjMyLDIxICsyMjIsMjEgQEAKICAgICB9CiAgICAgCiAgICAgbm93ID0gbG9jYWx0aW1lICgmcy5zdF9tdGltZSk7Ci0gIAorCiAgICAgaWYgKGFjdGlvbiAmIE9GX1ZFUklGWSkKICAgICAgIHZlcmlmeV90aW1lID0gKigoaW50KilvZnMtPnJlc2VydmVkKTsKLSAgCisgICAgCiAgICAgKigoV09SRCopKCZvZnMtPnJlc2VydmVkWzJdKSk9CiAgICAgICAgICAoKG5vdy0+dG1faG91ciAqIDB4MjAwMCkgKyAobm93LT50bV9taW4gKiAweDIwKSArIChub3ctPnRtX3NlYyAvIDIpKTsKICAgICAqKChXT1JEKikoJm9mcy0+cmVzZXJ2ZWRbMF0pKT0KICAgICAgICAgICgobm93LT50bV95ZWFyICogMHgyMDApICsgKG5vdy0+dG1fbW9uICogMHgyMCkgKyBub3ctPnRtX21kYXkpOwotICAgIAotICAgIGlmIChhY3Rpb24gJiBPRl9FWElTVCkKLSAgICAgIHJldHVybiAwOworCiAKICAgICBpZiAoYWN0aW9uICYgT0ZfVkVSSUZZKQogICAgICAgcmV0dXJuICh2ZXJpZnlfdGltZSAhPSAqKChpbnQqKW9mcy0+cmVzZXJ2ZWQpKTsKLSAgICAKKworICAgIGlmIChhY3Rpb24gJiBPRl9FWElTVCkKKyAgICAgIHJldHVybiAwOwogICAgIAogICAgLyogTm93IHdlIGFyZSBhY3R1YWxseSBnb2luZyB0byBvcGVuIHRoZSBmaWxlLiBBY2NvcmRpbmcgdG8gTWljcm9zb2Z0J3MKICAgICAgICBLbm93bGVkZ2UgQmFzaXMsIHRoaXMgaXMgZG9uZSBieSBjYWxsaW5nIGludCAyMWgsIGF4PTNkaC4gKi8gICAgCkBAIC0zMTcsNyArMzA3LDcgQEAKIAogICAgIAlkcHJpbnRmX2ZpbGUoc3RkZGViLCAiX2xjcmVhdDogZmlsZW5hbWUgJXMsIGF0dHJpYnV0ZXMgJWRcbiIsCiAJCWxwc3pGaWxlbmFtZSwgZm5BdHRyaWJ1dGUpOwotCWlmICgoVW5peEZpbGVOYW1lID0gR2V0VW5peEZpbGVOYW1lKGxwc3pGaWxlbmFtZSkpID09IE5VTEwpCisJaWYgKChVbml4RmlsZU5hbWUgPSBET1NfR2V0VW5peEZpbGVOYW1lKGxwc3pGaWxlbmFtZSkpID09IE5VTEwpCiAgIAkJcmV0dXJuIEhGSUxFX0VSUk9SOwogCWhhbmRsZSA9ICBvcGVuIChVbml4RmlsZU5hbWUsIE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19XUk9OTFksIDQyNik7CiAKQEAgLTQyMiw2ICs0MTIsOCBAQAogV09SRCBTZXRFcnJvck1vZGUoV09SRCB4KQogewogICAgIGRwcmludGZfZmlsZShzdGRuaW1wLCJ3aW5lOiBTZXRFcnJvck1vZGUgJTR4IChpZ25vcmVkKVxuIix4KTsKKworICAgIHJldHVybiAxOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9taXNjL2tleWJvYXJkLmMgYi9taXNjL2tleWJvYXJkLmMKaW5kZXggNzc4ZGVhMS4uOWEwNzE5OCAxMDA2NDQKLS0tIGEvbWlzYy9rZXlib2FyZC5jCisrKyBiL21pc2Mva2V5Ym9hcmQuYwpAQCAtMSw1ICsxLDcgQEAKKy8qCiBzdGF0aWMgY2hhciBSQ1NJZFtdID0gIiRJZDoga2V5Ym9hcmQuYyx2IDEuMiAxOTkzLzA5LzEzIDE4OjUyOjAyIHNjb3R0IEV4cCAkIjsKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgU2NvdHQgQS4gTGFpcmQsIEVyaWsgQm9zICAxOTkzLCAxOTk0IjsKKyovCiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtOCw4ICsxMCw3IEBACiAjaW5jbHVkZSAid2luZG93cy5oIgogI2luY2x1ZGUgImtleWJvYXJkLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKLS8qICNkZWZpbmUgREVCVUdfS0VZQk9BUkQgLyogKi8KLS8qICN1bmRlZiAgREVCVUdfS0VZQk9BUkQgLyogKi8KKy8qICNkZWZpbmUgREVCVUdfS0VZQk9BUkQgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiBpbnQgVG9Bc2NpaShXT1JEIHdWaXJ0S2V5LCBXT1JEIHdTY2FuQ29kZSwgTFBTVFIgbHBLZXlTdGF0ZSwgCmRpZmYgLS1naXQgYS9taXNjL2xzdHIuYyBiL21pc2MvbHN0ci5jCmluZGV4IDQxMTc0ZjMuLmFhZjQ3ZjMgMTAwNjQ0Ci0tLSBhL21pc2MvbHN0ci5jCisrKyBiL21pc2MvbHN0ci5jCkBAIC0xLDUgKzEsNiBAQAorLyoKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgWW5ndmkgU2lndXJqb25zc29uICh5bmd2aUBoYWZyby5pcyksIDE5OTMiOwotCisqLwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0xNjQsMTUgKzE2NSwxNCBAQAogICByZXR1cm4gKGN1cnJlbnQ9PXN0YXJ0KT9zdGFydDpjdXJyZW50LTE7CiB9CiAKLXN0YXRpYyBjaGFyIE9lbTJBbnNpWzI1Nl07Ci1zdGF0aWMgY2hhciBBbnNpMk9lbVsyNTZdOworQllURSBPZW0yQW5zaVsyNTZdLCBBbnNpMk9lbVsyNTZdOwogCiB2b2lkIEluaXRPZW1BbnNpVHJhbnNsYXRpb25zKHZvaWQpCiB7CiAgIHN0YXRpYyBpbnQgaW5pdGVkPTA7IC8qIHNob3VsZCBjYWxsZWQgY2FsbGVkIGluIHNvbWUgaW5pdCBmdW5jdGlvbiovCiAgIGludCB0cmFuc2ZpbGUsaTsKICAgaWYoaW5pdGVkKSByZXR1cm47Ci0gIGlmKHRyYW5zZmlsZT1vcGVuKCJvZW0yYW5zaS50cmwiLE9fUkRPTkxZKSl7CisgIGlmKCh0cmFuc2ZpbGU9b3Blbigib2VtMmFuc2kudHJsIixPX1JET05MWSkpKXsKICAgICByZWFkKHRyYW5zZmlsZSxPZW0yQW5zaSwyNTYpOwogICAgIGNsb3NlKHRyYW5zZmlsZSk7CiAgIH0KQEAgLTE4MCw3ICsxODAsNyBAQAogICAgIGZvcihpPTA7aTwyNTY7aSsrKSAgLyogTmVlZHMgc29tZSBmaXhpbmcgKi8KICAgICAgIE9lbTJBbnNpW2ldPWk7ICAKICAgfQotICBpZih0cmFuc2ZpbGU9b3BlbigiYW5zaTJvZW0udHJsIixPX1JET05MWSkpeworICBpZigodHJhbnNmaWxlPW9wZW4oImFuc2kyb2VtLnRybCIsT19SRE9OTFkpKSl7CiAgICAgcmVhZCh0cmFuc2ZpbGUsQW5zaTJPZW0sMjU2KTsKICAgICBjbG9zZSh0cmFuc2ZpbGUpOwogICB9CmRpZmYgLS1naXQgYS9taXNjL21haW4uYyBiL21pc2MvbWFpbi5jCmluZGV4IDNiOTI1MGUuLjc0YTg3NzggMTAwNjQ0Ci0tLSBhL21pc2MvbWFpbi5jCisrKyBiL21pc2MvbWFpbi5jCkBAIC0yLDEwICsyLDkgQEAKICAqIE1haW4gZnVuY3Rpb24uCiAgKgogICogQ29weXJpZ2h0IDE5OTQgQWxleGFuZHJlIEp1bGxpYXJkCi0gKi8KLQorICoKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgQWxleGFuZHJlIEp1bGxpYXJkLCAxOTk0IjsKLQorKi8KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMTUsMTUgKzE0LDMwIEBACiAjaW5jbHVkZSA8WDExL1hyZXNvdXJjZS5oPgogI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgogI2luY2x1ZGUgPFgxMS9jdXJzb3Jmb250Lmg+CisjaW5jbHVkZSAid2luZS5oIgogI2luY2x1ZGUgIm1zZG9zLmgiCiAjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgImNvbW0uaCIKKyNpbmNsdWRlICJtaXNjZW11LmgiCisjaW5jbHVkZSAid2luc29jay5oIgogI2luY2x1ZGUgIm9wdGlvbnMuaCIKKyNpbmNsdWRlICJkb3NfZnMuaCIKKyNpbmNsdWRlICJkZXNrdG9wLmgiCiAjaW5jbHVkZSAicHJvdG90eXBlcy5oIgogI2luY2x1ZGUgInRleHRzLmgiCiAjZGVmaW5lIERFQlVHX0RFRklORV9WQVJJQUJMRVMKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKK2V4dGVybiBCdXR0b25UZXh0cyBCdXR0b25UZXh0OworCitzdGF0aWMgY2hhciBwZW9wbGVbXSA9ICJQZW9wbGUgd2hvIGhhdmUgZ2VuZXJvdXNseSBkb25hdGVkIHRpbWUgdG8gdGhlIFdpbmUgIiBcCisicHJvamVjdCBpbmNsdWRlIEJvYiBBbXN0YWR0LCBNYXJ0aW4gQXlvdHRlLCBFcmlrIEJvcywgSm9obiBCcmV6YWssICJcCisiQW5kcmV3IEJ1bGhhaywgSm9obiBCdXJ0b24sIFBldGVyIEdhbGJhdnksIEplZmZlcnkgSHN1LCBNaWd1ZWwgZGUgSWNhemEsICIgXAorIkFsZXhhbmRyZSBKdWxsaWFyZCwgU2NvdHQgQS4gTGFpcmQsIFBldGVyIE1hY0RvbmFsZCwgRGF2aWQgTWV0Y2FsZmUsICIgXAorIkpvaG4gUmljaGFyZHNvbiwgSm9oYW5uZXMgUnVzY2hlaW5za2ksIFluZ3ZpIFNpZ3Vyam9uc3NvbiwgTGludXMgVG9ydmFsZHMsICIgXAorIkNhcmwgV2lsbGlhbXMsIEthcmwgR3VlbnRlciBXdWVuc2NoLCBhbmQgRXJpYyBZb3VuZ2RhbGUuICI7CisKICNkZWZpbmUgV0lORV9DTEFTUyAgICAiV2luZSIgICAgLyogQ2xhc3MgbmFtZSBmb3IgcmVzb3VyY2VzICovCiAKIHR5cGVkZWYgc3RydWN0IHRhZ0VOVkVOVFJZIHsKQEAgLTQ0LDggKzU4LDYgQEAKIGludCBzY3JlZW5EZXB0aCA9IDA7ICAvKiBTY3JlZW4gZGVwdGggdG8gdXNlICovCiBpbnQgZGVza3RvcFggPSAwLCBkZXNrdG9wWSA9IDA7ICAvKiBEZXNrdG9wIHdpbmRvdyBwb3NpdGlvbiAoaWYgYW55KSAqLwogCi1leHRlcm4gQnV0dG9uVGV4dHMgQnV0dG9uVGV4dDsKLQogc3RydWN0IG9wdGlvbnMgT3B0aW9ucyA9CiB7ICAvKiBkZWZhdWx0IG9wdGlvbnMgKi8KICAgICBOVUxMLCAgICAgICAgICAgLyogc3B5RmlsZW5hbWUgKi8KQEAgLTcxLDcgKzgzLDYgQEAKICAgICB7ICItc3luY2hyb25vdXMiLCAgICIuc3luY2hyb25vdXMiLCAgICAgWHJtb3B0aW9uTm9BcmcsICAoY2FkZHJfdCkib24iIH0sCiAgICAgeyAiLXNweSIsICAgICAgICAgICAiLnNweSIsICAgICAgICAgICAgIFhybW9wdGlvblNlcEFyZywgKGNhZGRyX3QpTlVMTCB9LAogICAgIHsgIi1kZWJ1ZyIsICAgICAgICAgIi5kZWJ1ZyIsICAgICAgICAgICBYcm1vcHRpb25Ob0FyZywgIChjYWRkcl90KSJvbiIgfSwKLSAgICB7ICItcmVsYXlkYmciLCAgICAgICIucmVsYXlkYmciLCAgICAgICAgWHJtb3B0aW9uTm9BcmcsICAoY2FkZHJfdCkib24iIH0sCiAgICAgeyAiLWRlYnVnbXNnIiwgICAgICAiLmRlYnVnbXNnIiwgICAgICAgIFhybW9wdGlvblNlcEFyZywgKGNhZGRyX3QpTlVMTCB9CiB9OwogCkBAIC05MSw3ICsxMDIsNyBAQAogICAiICAgIC1zeW5jaHJvbm91cyAgICBUdXJuIG9uIHN5bmNocm9ub3VzIGRpc3BsYXkgbW9kZVxuIiBcCiAgICIgICAgLWJhY2tpbmdzdG9yZSAgIFR1cm4gb24gYmFja2luZyBzdG9yZVxuIiBcCiAgICIgICAgLXNweSBmaWxlICAgICAgIFR1cm4gb24gbWVzc2FnZSBzcHlpbmcgdG8gdGhlIHNwZWNpZmllZCBmaWxlXG4iIFwKLSAgIiAgICAtcmVsYXlkYmcgICAgICAgRGlzcGxheSBjYWxsIHJlbGF5IGluZm9ybWF0aW9uXG4iIFwKKyAgIiAgICAtcmVsYXlkYmcgICAgICAgT2Jzb2xldGUuIFVzZSAtZGVidWdtc2cgK3JlbGF5IGluc3RlYWRcbiIgXAogICAiICAgIC1kZWJ1Z21zZyBuYW1lICBUdXJuIGRlYnVnZ2luZy1tZXNzYWdlcyBvbiBvciBvZmZcbiIKIAogCkBAIC0xNjUsNyArMTc2LDYgQEAKIHN0YXRpYyB2b2lkIE1BSU5fR2V0QnV0dG9uVGV4dCggWHJtRGF0YWJhc2UgZGIsIGNoYXIgKm5hbWUsIEJ1dHRvbkRlc2MgKkJ1dHRvbikKIHsKICAgICBYcm1WYWx1ZSB2YWx1ZTsKLSAgICBjaGFyIEhvdGtleTsKICAgICBjaGFyICppOwogCiAgICAgaWYgKE1BSU5fR2V0UmVzb3VyY2UoIGRiLCBuYW1lLCAmdmFsdWUpKQpAQCAtMjk0LDggKzMwNCw2IEBACiAJT3B0aW9ucy5zeW5jaHJvbm91cyA9IFRSVUU7CiAgICAgaWYgKE1BSU5fR2V0UmVzb3VyY2UoIGRiLCAiLmJhY2tpbmdzdG9yZSIsICZ2YWx1ZSApKQogCU9wdGlvbnMuYmFja2luZ3N0b3JlID0gVFJVRTsJCi0gICAgaWYgKE1BSU5fR2V0UmVzb3VyY2UoIGRiLCAiLnJlbGF5ZGJnIiwgJnZhbHVlICkpCi0JT3B0aW9ucy5yZWxheV9kZWJ1ZyA9IFRSVUU7CiAgICAgaWYgKE1BSU5fR2V0UmVzb3VyY2UoIGRiLCAiLmRlYnVnIiwgJnZhbHVlICkpCiAJT3B0aW9ucy5kZWJ1ZyA9IFRSVUU7CiAgICAgaWYgKE1BSU5fR2V0UmVzb3VyY2UoIGRiLCAiLnNweSIsICZ2YWx1ZSkpCkBAIC0zNDYsOSArMzU0LDkgQEAKICAgICBpbnQgZmxhZ3M7CiAgICAgdW5zaWduZWQgaW50IHdpZHRoID0gNjQwLCBoZWlnaHQgPSA0ODA7ICAvKiBEZWZhdWx0IHNpemUgPSA2NDB4NDgwICovCiAgICAgY2hhciAqbmFtZSA9ICJXaW5lIGRlc2t0b3AiOwotICAgIFhTaXplSGludHMgc2l6ZV9oaW50czsKLSAgICBYV01IaW50cyB3bV9oaW50czsKLSAgICBYQ2xhc3NIaW50IGNsYXNzX2hpbnRzOworICAgIFhTaXplSGludHMgKnNpemVfaGludHM7CisgICAgWFdNSGludHMgICAqd21faGludHM7CisgICAgWENsYXNzSGludCAqY2xhc3NfaGludHM7CiAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgd2luX2F0dHI7CiAgICAgWFRleHRQcm9wZXJ0eSB3aW5kb3dfbmFtZTsKIApAQCAtMzcyLDIyICszODAsMzMgQEAKIAogICAgICAgLyogU2V0IHdpbmRvdyBtYW5hZ2VyIHByb3BlcnRpZXMgKi8KIAotICAgIHNpemVfaGludHMubWluX3dpZHRoID0gc2l6ZV9oaW50cy5tYXhfd2lkdGggPSB3aWR0aDsKLSAgICBzaXplX2hpbnRzLm1pbl9oZWlnaHQgPSBzaXplX2hpbnRzLm1heF9oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgc2l6ZV9oaW50cy5mbGFncyA9IFBNaW5TaXplIHwgUE1heFNpemU7Ci0gICAgaWYgKGZsYWdzICYgKFhWYWx1ZSB8IFlWYWx1ZSkpIHNpemVfaGludHMuZmxhZ3MgfD0gVVNQb3NpdGlvbjsKLSAgICBpZiAoZmxhZ3MgJiAoV2lkdGhWYWx1ZSB8IEhlaWdodFZhbHVlKSkgc2l6ZV9oaW50cy5mbGFncyB8PSBVU1NpemU7Ci0gICAgZWxzZSBzaXplX2hpbnRzLmZsYWdzIHw9IFBTaXplOworICAgIHNpemVfaGludHMgID0gWEFsbG9jU2l6ZUhpbnRzKCk7CisgICAgd21faGludHMgICAgPSBYQWxsb2NXTUhpbnRzKCk7CisgICAgY2xhc3NfaGludHMgPSBYQWxsb2NDbGFzc0hpbnQoKTsKKyAgICBpZiAoIXNpemVfaGludHMgfHwgIXdtX2hpbnRzIHx8ICFjbGFzc19oaW50cykKKyAgICB7CisgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciB3aW5kb3cgbWFuYWdlciBoaW50cy5cbiIgKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgc2l6ZV9oaW50cy0+bWluX3dpZHRoID0gc2l6ZV9oaW50cy0+bWF4X3dpZHRoID0gd2lkdGg7CisgICAgc2l6ZV9oaW50cy0+bWluX2hlaWdodCA9IHNpemVfaGludHMtPm1heF9oZWlnaHQgPSBoZWlnaHQ7CisgICAgc2l6ZV9oaW50cy0+ZmxhZ3MgPSBQTWluU2l6ZSB8IFBNYXhTaXplOworICAgIGlmIChmbGFncyAmIChYVmFsdWUgfCBZVmFsdWUpKSBzaXplX2hpbnRzLT5mbGFncyB8PSBVU1Bvc2l0aW9uOworICAgIGlmIChmbGFncyAmIChXaWR0aFZhbHVlIHwgSGVpZ2h0VmFsdWUpKSBzaXplX2hpbnRzLT5mbGFncyB8PSBVU1NpemU7CisgICAgZWxzZSBzaXplX2hpbnRzLT5mbGFncyB8PSBQU2l6ZTsKIAotICAgIHdtX2hpbnRzLmZsYWdzID0gSW5wdXRIaW50IHwgU3RhdGVIaW50OwotICAgIHdtX2hpbnRzLmlucHV0ID0gVHJ1ZTsKLSAgICB3bV9oaW50cy5pbml0aWFsX3N0YXRlID0gTm9ybWFsU3RhdGU7Ci0gICAgY2xhc3NfaGludHMucmVzX25hbWUgPSBhcmd2WzBdOwotICAgIGNsYXNzX2hpbnRzLnJlc19jbGFzcyA9ICJXaW5lIjsKKyAgICB3bV9oaW50cy0+ZmxhZ3MgPSBJbnB1dEhpbnQgfCBTdGF0ZUhpbnQ7CisgICAgd21faGludHMtPmlucHV0ID0gVHJ1ZTsKKyAgICB3bV9oaW50cy0+aW5pdGlhbF9zdGF0ZSA9IE5vcm1hbFN0YXRlOworICAgIGNsYXNzX2hpbnRzLT5yZXNfbmFtZSA9IGFyZ3ZbMF07CisgICAgY2xhc3NfaGludHMtPnJlc19jbGFzcyA9ICJXaW5lIjsKIAogICAgIFhTdHJpbmdMaXN0VG9UZXh0UHJvcGVydHkoICZuYW1lLCAxLCAmd2luZG93X25hbWUgKTsKICAgICBYU2V0V01Qcm9wZXJ0aWVzKCBkaXNwbGF5LCByb290V2luZG93LCAmd2luZG93X25hbWUsICZ3aW5kb3dfbmFtZSwKLQkJICAgICAgYXJndiwgYXJnYywgJnNpemVfaGludHMsICZ3bV9oaW50cywgJmNsYXNzX2hpbnRzICk7CisgICAgICAgICAgICAgICAgICAgICAgYXJndiwgYXJnYywgc2l6ZV9oaW50cywgd21faGludHMsIGNsYXNzX2hpbnRzICk7CisgICAgWEZyZWUoIHNpemVfaGludHMgKTsKKyAgICBYRnJlZSggd21faGludHMgKTsKKyAgICBYRnJlZSggY2xhc3NfaGludHMgKTsKIAogICAgICAgLyogTWFwIHdpbmRvdyAqLwogCmRpZmYgLS1naXQgYS9taXNjL21lc3NhZ2UuYyBiL21pc2MvbWVzc2FnZS5jCmluZGV4IDk3NmM4NmIuLjIxMzQ0NjQgMTAwNjQ0Ci0tLSBhL21pc2MvbWVzc2FnZS5jCisrKyBiL21pc2MvbWVzc2FnZS5jCkBAIC0yLDEwICsyLDkgQEAKICAqICdXaW5lJyBNZXNzYWdlQm94IGZ1bmN0aW9uIGhhbmRsaW5nCiAgKgogICogQ29weXJpZ2h0IDE5OTMgTWFydGluIEF5b3R0ZQotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgTWFydGluIEF5b3R0ZSwgMTk5MyI7Ci0KKyovCiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTgsMTEgKzE3LDExIEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSAicHJvdG90eXBlcy5oIgogI2luY2x1ZGUgImhlYXAuaCIKKyNpbmNsdWRlICJsaWJyYXJ5LmgiCiAjaW5jbHVkZSAid2luLmgiCiAjaW5jbHVkZSAidGV4dHMuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogLyogI2RlZmluZSBERUJVR19NU0dCT1ggKi8KLS8qICN1bmRlZiAgREVCVUdfTVNHQk9YICovIAogI2luY2x1ZGUgImRlYnVnLmgiCiAKIApAQCAtNDAsNyArMzksNiBAQAogICAiJklnbm9yZSIsICdJJwogfTsKIAotZXh0ZXJuIEhJTlNUQU5DRSBoU3lzUmVzOwogZXh0ZXJuIEhCSVRNQVAgaFVwQXJyb3c7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ01TR0JPWCB7CkBAIC04MCwxMyArNzgsMTMgQEAKIAl3bmRQdHIgPSBXSU5fRmluZFduZFB0cihoV25kKTsKIAlpZiAod25kUHRyID09IE5VTEwpIHsKIAkJaEluc3QgPSBoU3lzUmVzOwotCQlkcHJpbnRmX21zZ2JveChzdGRkZWIsIk1lc3NhZ2VCb3goTlVMTCwgJTA4WD0nJXMnLCAlMDhYPSclcycsICUwNFgpXG4iLCAKLQkJCQkJCQkJCXN0ciwgc3RyLCB0aXRsZSwgdGl0bGUsIHR5cGUpOworCQlkcHJpbnRmX21zZ2JveChzdGRkZWIsIk1lc3NhZ2VCb3goTlVMTCwgc3RyPSclcycsIHRpdGxlPSclcycsICUwNFgpXG4iLCAKKwkJCXN0ciwgdGl0bGUsIHR5cGUpOwogCQl9CiAJZWxzZSB7CiAJCWhJbnN0ID0gd25kUHRyLT5oSW5zdGFuY2U7Ci0JCWRwcmludGZfbXNnYm94KHN0ZGRlYiwiTWVzc2FnZUJveCglMDRYLCAlMDhYPSclcycsICUwOFg9JyVzJywgJTA0WClcbiIsIAotCQkJCQkJCWhXbmQsIHN0ciwgc3RyLCB0aXRsZSwgdGl0bGUsIHR5cGUpOworCQlkcHJpbnRmX21zZ2JveChzdGRkZWIsIk1lc3NhZ2VCb3goJTA0WCwgc3RyPSclcycsIHRpdGxlPSclcycsICUwNFgpXG4iLCAKKwkJCWhXbmQsIHN0ciwgdGl0bGUsIHR5cGUpOwogCQl9CiAgICAgbHBtYiA9IChMUE1TR0JPWCkgbWFsbG9jKHNpemVvZihNU0dCT1gpKTsKIAltZW1zZXQobHBtYiwgMCwgc2l6ZW9mKE1TR0JPWCkpOwpkaWZmIC0tZ2l0IGEvbWlzYy9wcm9maWxlLmMgYi9taXNjL3Byb2ZpbGUuYwppbmRleCBkNGY1YWYxLi5kMzA3NzRmIDEwMDY0NAotLS0gYS9taXNjL3Byb2ZpbGUuYworKysgYi9taXNjL3Byb2ZpbGUuYwpAQCAtMTQsMjMgKzE0LDIxIEBACiAgKiAgICAgICAgIGhhcyBhIE5VTEwgS2V5VmFsdWUgcmV0dXJuaW5nIGEgbGlzdCBvZiBLZXlOYW1lcywgYW5kIGEgTlVMTAogICogICAgICAgICBBcHBOYW1lIHVuZGVmaW5lZC4gIEkgY2hhbmdlZCBHZXRTZXRQcm9maWxlIHRvIG1hdGNoLiAgVGhpcyBtYWtlcwogICogICAgICAgICBQUk9HTUFOLkVYRSBkbyB0aGUgcmlnaHQgdGhpbmcuCi0gKi8KLQorICoKIHN0YXRpYyBjaGFyIENvcHlyaWdodCBbXSA9ICJDb3B5cmlnaHQgKEMpIDE5OTMgTWlndWVsIGRlIEljYXphIjsKLQorKi8KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaW5jbHVkZSAid2luZS5oIgogI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNpbmNsdWRlICJkb3NfZnMuaCIKICNpbmNsdWRlICJwcm90b3R5cGVzLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKIC8qICNkZWZpbmUgREVCVUdfUFJPRklMRSAqLwotLyogI3VuZGVmICBERUJVR19QUk9GSUxFICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotCiAjZGVmaW5lIFNUUlNJWkUgMjU1CiAjZGVmaW5lIHhtYWxsb2MoeCkgbWFsbG9jKHgpCiAjZGVmaW5lIG92ZXJmbG93IChuZXh0ID09ICZDaGFyQnVmZmVyIFtTVFJTSVpFLTFdKQpAQCAtNTMsNiArNTEsNyBAQAogICAgIGNoYXIgKkZpbGVOYW1lOwogICAgIFRTZWNIZWFkZXIgKlNlY3Rpb247CiAgICAgc3RydWN0IFRQcm9maWxlICpsaW5rOworICAgIGludCBjaGFuZ2VkOwogfSBUUHJvZmlsZTsKIAogVFByb2ZpbGUgKkN1cnJlbnQgPSAwOwpAQCAtODAsMTMgKzc5LDEzIEBACiAJCXJldHVybiBuYW1lOwogCiAJaWYgKHN0cmNocihuYW1lLCAnXFwnKSkKLQkJcmV0dXJuIEdldFVuaXhGaWxlTmFtZShuYW1lKTsKKwkJcmV0dXJuIERPU19HZXRVbml4RmlsZU5hbWUobmFtZSk7CiAJCQogCUdldFdpbmRvd3NEaXJlY3RvcnkodGVtcCwgc2l6ZW9mKHRlbXApICk7CiAJc3RyY2F0KHRlbXAsICJcXCIpOwogCXN0cmNhdCh0ZW1wLCBuYW1lKTsKIAkKLQlyZXR1cm4gR2V0VW5peEZpbGVOYW1lKHRlbXApOworCXJldHVybiBET1NfR2V0VW5peEZpbGVOYW1lKHRlbXApOwogfQogCiBzdGF0aWMgVFNlY0hlYWRlciAqbG9hZCAoY2hhciAqZmlsZW5hbWUpCkBAIC0yMjMsNiArMjIyLDcgQEAKIAlOZXctPmxpbmsgPSBCYXNlOwogCU5ldy0+RmlsZU5hbWUgPSBzdHJkdXAgKEZpbGVOYW1lKTsKIAlOZXctPlNlY3Rpb24gPSBsb2FkIChGaWxlTmFtZSk7CisJTmV3LT5jaGFuZ2VkID0gRkFMU0U7CiAJQmFzZSA9IE5ldzsKIAlzZWN0aW9uID0gTmV3LT5TZWN0aW9uOwogCUN1cnJlbnQgPSBOZXc7CkBAIC0yNTMsOSArMjUzLDcgQEAKIAkJcCArPSBzbGVuOwogCSAgICB9CiAJCSpwID0gJ1wwJzsKLSNpZmRlZiBERUJVR19QUk9GSUxFCi0JCXByaW50ZigiR2V0U2V0UHJvZmlsZSAvLyBub3JtYWwgZW5kIG9mIGVudW0gIVxuIik7Ci0jZW5kaWYKKwkJZHByaW50Zl9wcm9maWxlKHN0ZGRlYiwiR2V0U2V0UHJvZmlsZSAvLyBub3JtYWwgZW5kIG9mIGVudW0gIVxuIik7CiAJICAgIHJldHVybiAoU2l6ZSAtIDIgLSBsZWZ0KTsKIAl9CiAJZm9yIChrZXkgPSBzZWN0aW9uLT5LZXlzOyBrZXk7IGtleSA9IGtleS0+bGluayl7CkBAIC0yNjQsNiArMjYyLDcgQEAKIAkgICAgaWYgKHNldCl7CiAJCWZyZWUgKGtleS0+VmFsdWUpOwogCQlrZXktPlZhbHVlID0gc3RyZHVwIChEZWZhdWx0ID8gRGVmYXVsdCA6ICIiKTsKKwkJQ3VycmVudC0+Y2hhbmdlZD1UUlVFOwogCQlyZXR1cm4gMTsKIAkgICAgfQogCSAgICBSZXR1cm5lZFN0cmluZyBbU2l6ZS0xXSA9IDA7CkBAIC0yODksNiArMjg4LDcgQEAKIAluZXdfa2V5IChzZWN0aW9uLCBLZXlOYW1lLCBEZWZhdWx0KTsKIAlzZWN0aW9uLT5saW5rID0gQ3VycmVudC0+U2VjdGlvbjsKIAlDdXJyZW50LT5TZWN0aW9uID0gc2VjdGlvbjsKKwlDdXJyZW50LT5jaGFuZ2VkID0gVFJVRTsKICAgICB9IGVsc2UgewogCVJldHVybmVkU3RyaW5nIFtTaXplLTFdID0gMDsKIAlzdHJuY3B5IChSZXR1cm5lZFN0cmluZywgRGVmYXVsdCwgU2l6ZS0xKTsKQEAgLTM3NSw2ICszNzUsOCBAQAogICAgIGlmICghcCkKIAlyZXR1cm47CiAgICAgZHVtcF9wcm9maWxlIChwLT5saW5rKTsKKyAgICBpZighcC0+Y2hhbmdlZCkKKwlyZXR1cm47CiAgICAgaWYgKChwcm9maWxlID0gZm9wZW4gKEdldEluaUZpbGVOYW1lKHAtPkZpbGVOYW1lKSwgInciKSkgIT0gTlVMTCl7CiAJZHVtcF9zZWN0aW9ucyAocHJvZmlsZSwgcC0+U2VjdGlvbik7CiAJZmNsb3NlIChwcm9maWxlKTsKZGlmZiAtLWdpdCBhL21pc2MvcHJvcGVydHkuYyBiL21pc2MvcHJvcGVydHkuYwppbmRleCA5NzMzYWUxLi40YTkzNzE2IDEwMDY0NAotLS0gYS9taXNjL3Byb3BlcnR5LmMKKysrIGIvbWlzYy9wcm9wZXJ0eS5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIAkJCQlXaW5kb3dzIFByb3BlcnRpZXMgRnVuY3Rpb25zCi0gKi8KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgTWFydGluIEF5b3R0ZSwgMTk5NCI7Ci0KKyovCiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTU4LDcgKzE1OCw4IEBACiAJCUdsb2JhbFVubG9jayh3bmRQdHItPmhQcm9wKTsKICAgICAJcmV0dXJuIEZBTFNFOwogCQl9Ci0gICAgZHByaW50Zl9wcm9wKHN0ZGRlYiwgIlNldFByb3AgLy8gZW50cnkgYWxsb2NhdGVkICUwOFhcbiIsIGxwTmV3UHJvcCk7CisJZHByaW50Zl9wcm9wKHN0ZGRlYiwgIlNldFByb3AgLy8gZW50cnkgYWxsb2NhdGVkICUwOFhcbiIsIAorICAgIAkJKHVuc2lnbmVkIGludCkgbHBOZXdQcm9wKTsKIAlpZiAobHBQcm9wID09IE5VTEwpIHsKIAkJd25kUHRyLT5oUHJvcCA9IGhOZXdQcm9wOwogCQlscE5ld1Byb3AtPmxwUHJldlByb3AgPSBOVUxMOwpAQCAtMTk5LDcgKzIwMCw3IEBACiAJTFBQUk9QRU5UUlkgbHBQcm9wOwogCUxQU1RSCQlzdHI7CiAJaW50CQkJblJldDsKLQlwcmludGYoIkVudW1Qcm9wcyglMDRYLCAlMDhYKVxuIiwgaFduZCwgbHBFbnVtRnVuYyk7CisJcHJpbnRmKCJFbnVtUHJvcHMoJTA0WCwgJTA4WClcbiIsIGhXbmQsICh1bnNpZ25lZCBpbnQpIGxwRW51bUZ1bmMpOwogCXduZFB0ciA9IFdJTl9GaW5kV25kUHRyKGhXbmQpOwogICAgIGlmICh3bmRQdHIgPT0gTlVMTCkgewogICAgIAlwcmludGYoIkVudW1Qcm9wcyAvLyBCYWQgV2luZG93IGhhbmRsZSAhXG4iKTsKZGlmZiAtLWdpdCBhL21pc2MvcmVjdC5jIGIvbWlzYy9yZWN0LmMKaW5kZXggYjVjMGZjNS4uMGI1MTMzYiAxMDA2NDQKLS0tIGEvbWlzYy9yZWN0LmMKKysrIGIvbWlzYy9yZWN0LmMKQEAgLTIsOSArMiw5IEBACiAgKiBSZWN0YW5nbGUtcmVsYXRlZCBmdW5jdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgMTk5MyBBbGV4YW5kcmUgSnVsbGlhcmQKLSAqLwotCisgKgogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBBbGV4YW5kcmUgSnVsbGlhcmQsIDE5OTMiOworKi8KIAogI2luY2x1ZGUgIndpbmRvd3MuaCIKIApkaWZmIC0tZ2l0IGEvbWlzYy9zaGVsbC5jIGIvbWlzYy9zaGVsbC5jCmluZGV4IDcxYWY4NjMuLjBjNjA5MWUgMTAwNjQ0Ci0tLSBhL21pc2Mvc2hlbGwuYworKysgYi9taXNjL3NoZWxsLmMKQEAgLTcsMTkgKzcsMTUgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlICJwcm90b3R5cGVzLmgiCiAjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgImxpYnJhcnkuaCIKICNpbmNsdWRlICJzaGVsbC5oIgorI2luY2x1ZGUgIi4uL3JjL3N5c3Jlcy5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX1JFRyAqLwotLyogI3VuZGVmICBERUJVR19SRUcgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCi0KIExQS0VZU1RSVUNUCWxwaFJvb3RLZXkgPSBOVUxMOwogCi1ERUNMQVJFX0hBTkRMRShIRFJPUCk7Ci0KLWV4dGVybiBISU5TVEFOQ0UgaFN5c1JlczsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCVJlZ09wZW5LZXkJCVtTSEVMTC4xXQogICovCkBAIC0zNDQsNyArMzQwLDcgQEAKIAllbHNlCiAJCSpBcHBNaXNjID0gMDsKIAotCXJldHVybiBEaWFsb2dCb3goaFN5c1JlcywgIlNIRUxMX0FCT1VUX01TR0JPWCIsIGhXbmQsIChXTkRQUk9DKUFib3V0RGxnUHJvYyk7CisJcmV0dXJuIERpYWxvZ0JveEluZGlyZWN0UHRyKGhTeXNSZXMsIHN5c3Jlc19ESUFMT0dfU0hFTExfQUJPVVRfTVNHQk9YLCBoV25kLCAoV05EUFJPQylBYm91dERsZ1Byb2MpOwogfQogCiAKZGlmZiAtLWdpdCBhL21pc2Mvc291bmQuYyBiL21pc2Mvc291bmQuYwppbmRleCAwNzI4OTUzLi42ZDFiMzIxIDEwMDY0NAotLS0gYS9taXNjL3NvdW5kLmMKKysrIGIvbWlzYy9zb3VuZC5jCkBAIC0xLDUgKzEsNyBAQAorLyoKIHN0YXRpYyBjaGFyIFJDU0lkW10gPSAiJElkOiBoZWFwLmMsdiAxLjMgMTk5My8wNy8wNCAwNDowNDoyMSByb290IEV4cCByb290ICQiOwogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBSb2JlcnQgSi4gQW1zdGFkdCwgMTk5MyI7CisqLwogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTY4LDcgKzcwLDcgQEAKIAlmcHJpbnRmKHN0ZGVyciwgIldhaXRTb3VuZFN0YXRlKCVkKVxuIiwgeCk7CiB9CiAKLVN5bmNBbGxWb2ljZXModm9pZCkKK2ludCBTeW5jQWxsVm9pY2VzKHZvaWQpCiB7CiAJZnByaW50ZihzdGRlcnIsICJTeW5jQWxsVm9pY2VzKClcbiIpOwogfQpAQCAtODMsNyArODUsNyBAQAogCWZwcmludGYoc3RkZXJyLCAiR2V0VGhyZXNob2xkRXZlbnQoKVxuIik7CiB9CiAKLUdldFRocmVzaG9sZFN0YXR1cyh2b2lkKQoraW50IEdldFRocmVzaG9sZFN0YXR1cyh2b2lkKQogewogCWZwcmludGYoc3RkZXJyLCAiR2V0VGhyZXNob2xkU3RhdHVzKClcbiIpOwogfQpkaWZmIC0tZ2l0IGEvbWlzYy91c2VyLmMgYi9taXNjL3VzZXIuYwppbmRleCA2MDllNWVjLi5iMzJiNTdjIDEwMDY0NAotLS0gYS9taXNjL3VzZXIuYworKysgYi9taXNjL3VzZXIuYwpAQCAtMSwzMCArMSwzMSBAQAorLyoKIHN0YXRpYyBjaGFyIFJDU0lkW10gPSAiJElkOiB1c2VyLmMsdiAxLjIgMTk5My8wNy8wNCAwNDowNDoyMSByb290IEV4cCByb290ICQiOwogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBSb2JlcnQgSi4gQW1zdGFkdCwgMTk5MyI7Ci0KKyovCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJwcm90b3R5cGVzLmgiCisjaW5jbHVkZSAiYXRvbS5oIgorI2luY2x1ZGUgImdkaS5oIgorI2luY2x1ZGUgImRsbHMuaCIKKyNpbmNsdWRlICJzZWxlY3RvcnMuaCIKKyNpbmNsdWRlICJzeXNtZXRyaWNzLmgiCisjaW5jbHVkZSAibWVudS5oIgorI2luY2x1ZGUgImRpYWxvZy5oIgorI2luY2x1ZGUgInN5c2NvbG9yLmgiCisjaW5jbHVkZSAid2luLmgiCiAjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgInByb3RvdHlwZXMuaCIKICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSAibWVzc2FnZS5oIgogCiAjZGVmaW5lIFVTRVJfSEVBUF9TSVpFICAgICAgICAgIDB4MTAwMDAKLQotCiBNREVTQyAqVVNFUl9IZWFwID0gTlVMTDsKIAotCi1leHRlcm4gQk9PTCBBVE9NX0luaXQoKTsKLWV4dGVybiBCT09MIEdESV9Jbml0KCk7Ci1leHRlcm4gdm9pZCBTWVNNRVRSSUNTX0luaXQoKTsKLWV4dGVybiBCT09MIE1FTlVfSW5pdCgpOwotZXh0ZXJuIEJPT0wgV0lOX0NyZWF0ZURlc2t0b3BXaW5kb3coKTsKLQogI2lmbmRlZiBXSU5FTElCCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBVU0VSX0hlYXBJbml0CiAgKi8KLXN0YXRpYyBCT09MIFVTRVJfSGVhcEluaXQoKQorc3RhdGljIEJPT0wgVVNFUl9IZWFwSW5pdCh2b2lkKQogewogICAgIHN0cnVjdCBzZWdtZW50X2Rlc2NyaXB0b3JfcyAqIHM7CiAgICAgcyA9IEdldE5leHRTZWdtZW50KCAwLCAweDEwMDAwICk7CmRpZmYgLS1naXQgYS9taXNjL3dpbnNvY2tldC5jIGIvbWlzYy93aW5zb2NrZXQuYwppbmRleCBmOWUyYjFkLi42YWVhOGE3IDEwMDY0NAotLS0gYS9taXNjL3dpbnNvY2tldC5jCisrKyBiL21pc2Mvd2luc29ja2V0LmMKQEAgLTEwLDYgKzEwLDggQEAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvaXBjLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL21zZy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CkBAIC0yMCwxMSArMjIsOCBAQAogI2luY2x1ZGUgImhlYXAuaCIKICNpbmNsdWRlICJ3aW5zb2NrLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKLS8qICNkZWZpbmUgREVCVUdfV0lOU09DSyAqLwotLyogI3VuZGVmICBERUJVR19XSU5TT0NLICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotCiBzdGF0aWMgV09SRCB3c2FfZXJybm87CiBzdGF0aWMgaW50IHdzYV9pbml0dGVkOwogc3RhdGljIGtleV90IHdpbmVfa2V5ID0gMDsKQEAgLTM5LDI1ICszOCw0OCBAQAogCUxPTkcJbFBhcmFtOwogfTsKICNkZWZpbmUgSVBDX1BBQ0tFVF9TSVpFIChzaXplb2Yoc3RydWN0IGlwY19wYWNrZXQpIC0gc2l6ZW9mKGxvbmcpKQotCiAjZGVmaW5lIE1UWVBFIDB4YjBiMGViMDUKKyNkZWZpbmUgV0lORV9QQUNLRUQgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisKK3N0cnVjdCBXSU5faG9zdGVudCAgeworCWNoYXIJKmhfbmFtZSBXSU5FX1BBQ0tFRDsJCS8qIG9mZmljaWFsIG5hbWUgb2YgaG9zdCAqLworCWNoYXIJKipoX2FsaWFzZXMgV0lORV9QQUNLRUQ7CS8qIGFsaWFzIGxpc3QgKi8KKwlpbnQJaF9hZGRydHlwZSBXSU5FX1BBQ0tFRDsJCS8qIGhvc3QgYWRkcmVzcyB0eXBlICovCisJaW50CWhfbGVuZ3RoIFdJTkVfUEFDS0VEOwkJLyogbGVuZ3RoIG9mIGFkZHJlc3MgKi8KKwljaGFyCSoqaF9hZGRyX2xpc3QgV0lORV9QQUNLRUQ7CS8qIGxpc3Qgb2YgYWRkcmVzc2VzIGZyb20gbmFtZSBzZXJ2ZXIgKi8KKwljaGFyCSpuYW1lc1syXTsKKwljaGFyICAgIGhvc3RuYW1lWzIwMF07Cit9OworCitzdHJ1Y3QJV0lOX3Byb3RvZW50IHsKKwljaGFyCSpwX25hbWUgV0lORV9QQUNLRUQ7CQkvKiBvZmZpY2lhbCBwcm90b2NvbCBuYW1lICovCisJY2hhcgkqKnBfYWxpYXNlcyBXSU5FX1BBQ0tFRDsJLyogYWxpYXMgbGlzdCAqLworCWludAlwX3Byb3RvIFdJTkVfUEFDS0VEOwkJLyogcHJvdG9jb2wgIyAqLworfTsKKworc3RydWN0CVdJTl9zZXJ2ZW50IHsKKwljaGFyCSpzX25hbWUgV0lORV9QQUNLRUQ7CQkvKiBvZmZpY2lhbCBzZXJ2aWNlIG5hbWUgKi8KKwljaGFyCSoqc19hbGlhc2VzIFdJTkVfUEFDS0VEOwkvKiBhbGlhcyBsaXN0ICovCisJaW50CXNfcG9ydCBXSU5FX1BBQ0tFRDsJCS8qIHBvcnQgIyAqLworCWNoYXIJKnNfcHJvdG8gV0lORV9QQUNLRUQ7CQkvKiBwcm90b2NvbCB0byB1c2UgKi8KK307CiAKIHN0cnVjdCBXaW5Tb2NrSGVhcCB7CiAJY2hhcgludG9hX2J1ZmZlclszMl07CiAKLQlzdHJ1Y3QJaG9zdGVudCBob3N0ZW50X2FkZHI7Ci0Jc3RydWN0CWhvc3RlbnQgaG9zdGVudF9uYW1lOwotCXN0cnVjdAlwcm90b2VudCBwcm90b2VudF9uYW1lOwotCXN0cnVjdAlwcm90b2VudCBwcm90b2VudF9udW1iZXI7Ci0Jc3RydWN0CXNlcnZlbnQgc2VydmVudF9uYW1lOwotCXN0cnVjdAlzZXJ2ZW50IHNlcnZlbnRfcG9ydDsKKwlzdHJ1Y3QJV0lOX2hvc3RlbnQgaG9zdGVudF9hZGRyOworCXN0cnVjdAlXSU5faG9zdGVudCBob3N0ZW50X25hbWU7CisJc3RydWN0CVdJTl9wcm90b2VudCBwcm90b2VudF9uYW1lOworCXN0cnVjdAlXSU5fcHJvdG9lbnQgcHJvdG9lbnRfbnVtYmVyOworCXN0cnVjdAlXSU5fc2VydmVudCBzZXJ2ZW50X25hbWU7CisJc3RydWN0CVdJTl9zZXJ2ZW50IHNlcnZlbnRfcG9ydDsKIAotCXN0cnVjdAlob3N0ZW50IFdTQWhvc3RlbnRfYWRkcjsKLQlzdHJ1Y3QJaG9zdGVudCBXU0Fob3N0ZW50X25hbWU7Ci0Jc3RydWN0CXByb3RvZW50IFdTQXByb3RvZW50X25hbWU7Ci0Jc3RydWN0CXByb3RvZW50IFdTQXByb3RvZW50X251bWJlcjsJCi0Jc3RydWN0CXNlcnZlbnQgV1NBc2VydmVudF9uYW1lOwotCXN0cnVjdAlzZXJ2ZW50IFdTQXNlcnZlbnRfcG9ydDsKKwlzdHJ1Y3QJV0lOX2hvc3RlbnQgV1NBaG9zdGVudF9hZGRyOworCXN0cnVjdAlXSU5faG9zdGVudCBXU0Fob3N0ZW50X25hbWU7CisJc3RydWN0CVdJTl9wcm90b2VudCBXU0Fwcm90b2VudF9uYW1lOworCXN0cnVjdAlXSU5fcHJvdG9lbnQgV1NBcHJvdG9lbnRfbnVtYmVyOwkKKwlzdHJ1Y3QJV0lOX3NlcnZlbnQgV1NBc2VydmVudF9uYW1lOworCXN0cnVjdAlXSU5fc2VydmVudCBXU0FzZXJ2ZW50X3BvcnQ7CiB9Owogc3RhdGljIHN0cnVjdCBXaW5Tb2NrSGVhcCAqaGVhcDsKIApAQCAtMTIzLDcgKzE0NSw5IEBACiAJY2FzZSBFSE9TVERPV046CQlyZXR1cm4gV1NBRUhPU1RET1dOOwogCWNhc2UgRUhPU1RVTlJFQUNIOglyZXR1cm4gV1NBRUhPU1RVTlJFQUNIOwogCWNhc2UgRU5PVEVNUFRZOgkJcmV0dXJuIFdTQUVOT1RFTVBUWTsKLS8qCWNhc2UgRVBST0NMSU06CQlyZXR1cm4gV1NBRVBST0NMSU07ICovCisjaWZkZWYgRVBST0NMSU0KKwljYXNlIEVQUk9DTElNOgkJcmV0dXJuIFdTQUVQUk9DTElNOworI2VuZGlmCiAJY2FzZSBFVVNFUlM6CQlyZXR1cm4gV1NBRVVTRVJTOwogCWNhc2UgRURRVU9UOgkJcmV0dXJuIFdTQUVEUVVPVDsKIAljYXNlIEVTVEFMRToJCXJldHVybiBXU0FFU1RBTEU7CkBAIC0xMzUsNyArMTU5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBXT1JEIGVycm5vX3RvX3dzYWVycm5vKHZvaWQpCitzdGF0aWMgdm9pZCBlcnJub190b193c2FlcnJubyh2b2lkKQogewogCXdzYV9lcnJubyA9IHdzYWVycm5vKCk7CiB9CkBAIC0xNzAsOCArMTk0LDggQEAKIAkJCQkJYnJlYWs7CiAJCQljYXNlIDB4MTAwODoJKm9wdG5hbWUgPSBTT19UWVBFOwogCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OiAKLQkJCQkJZnByaW50ZihzdGRlcnIsICJjb252ZXJ0X3NvY2tvcHQoKSB1bmtub3duIG9wdG5hbWUgJWRcbiIsIG9wdG5hbWUpOworCQkJZGVmYXVsdDogCisJCQkJCWZwcmludGYoc3RkZXJyLCAiY29udmVydF9zb2Nrb3B0KCkgdW5rbm93biBvcHRuYW1lICVkXG4iLCAqb3B0bmFtZSk7CiAJCQkJCWJyZWFrOwogCQkJfQogCQkJYnJlYWs7CkBAIC0xNzksMTEgKzIwMywzMiBAQAogCX0KIH0KIAotU09DS0VUIFdpbnNvY2tfYWNjZXB0KFNPQ0tFVCBzLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIElOVCAqYWRkcmxlbikKKyNpZm5kZWYgV0lORUxJQgorc3RhdGljIHZvaWQgQ09OVkVSVF9IT1NURU5UKHN0cnVjdCBXSU5faG9zdGVudCAqaGVhcCwgc3RydWN0IGhvc3RlbnQgKmhvc3QpCit7CisKK30KKworc3RhdGljIHZvaWQgQ09OVkVSVF9QUk9UT0VOVChzdHJ1Y3QgV0lOX3Byb3RvZW50ICpoZWFwLCBzdHJ1Y3QgcHJvdG9lbnQgKnByb3RvKQoreworCit9CisKK3N0YXRpYyB2b2lkIENPTlZFUlRfU0VSVkVOVChzdHJ1Y3QgV0lOX3NlcnZlbnQgKmhlYXAsIHN0cnVjdCBzZXJ2ZW50ICpzZXJ2KQoreworCit9CisjZWxzZQorI2RlZmluZSBDT05WRVJUX0hPU1RFTlQoYSxiKQltZW1jcHkoJmEsICZiLCBzaXplb2YoYSkpCisjZGVmaW5lIENPTlZFUlRfUFJPVE9FTlQoYSxiKQltZW1jcHkoJmEsICZiLCBzaXplb2YoYSkpCisjZGVmaW5lIENPTlZFUlRfU0VSVkVOVChhLGIpCW1lbWNweSgmYSwgJmIsIHNpemVvZihhKSkKKyNlbmRpZgorCitTT0NLRVQgV0lOU09DS19hY2NlcHQoU09DS0VUIHMsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgSU5UICphZGRybGVuKQogewogCWludCBzb2NrOwogCi0JZHByaW50Zl93aW5zb2NrKHN0ZGRlYiwgIldTQV9hY2NlcHQ6IHNvY2tldCAlZCwgcHRyICU4eCwgbGVuZ3RoICVkXG4iLCBzLCAoaW50KSBhZGRyLCBhZGRybGVuKTsKKwlkcHJpbnRmX3dpbnNvY2soc3RkZGViLCAiV1NBX2FjY2VwdDogc29ja2V0ICVkLCBwdHIgJTh4LCBsZW5ndGggJWRcbiIsIHMsIChpbnQpIGFkZHIsICphZGRybGVuKTsKIAogCWlmICgoc29jayA9IGFjY2VwdChzLCBhZGRyLCAoaW50ICopIGFkZHJsZW4pKSA8IDApIHsKICAgICAgICAgCWVycm5vX3RvX3dzYWVycm5vKCk7CkBAIC0xOTIsNyArMjM3LDcgQEAKIAlyZXR1cm4gc29jazsKIH0KIAotSU5UIFdpbnNvY2tfYmluZChTT0NLRVQgcywgc3RydWN0IHNvY2thZGRyICpuYW1lLCBJTlQgbmFtZWxlbikKK0lOVCBXSU5TT0NLX2JpbmQoU09DS0VUIHMsIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwgSU5UIG5hbWVsZW4pCiB7CiAJZHByaW50Zl93aW5zb2NrKHN0ZGRlYiwgIldTQV9iaW5kOiBzb2NrZXQgJWQsIHB0ciAlOHgsIGxlbmd0aCAlZFxuIiwgcywgKGludCkgbmFtZSwgbmFtZWxlbik7CiAJZHVtcF9zb2NrYWRkcihuYW1lKTsKQEAgLTIwNCw3ICsyNDksNyBAQAogCXJldHVybiAwOwogfQogCi1JTlQgV2luc29ja19jbG9zZXNvY2tldChTT0NLRVQgcykKK0lOVCBXSU5TT0NLX2Nsb3Nlc29ja2V0KFNPQ0tFVCBzKQogewogCWRwcmludGZfd2luc29jayhzdGRkZWIsICJXU0FfY2xvc2Vzb2NrZXQ6IHNvY2tldCAlZFxuIiwgcyk7CiAKQEAgLTIxNyw3ICsyNjIsNyBAQAogCXJldHVybiAwOwogfQogCi1JTlQgV2luc29ja19jb25uZWN0KFNPQ0tFVCBzLCBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsIElOVCBuYW1lbGVuKQorSU5UIFdJTlNPQ0tfY29ubmVjdChTT0NLRVQgcywgc3RydWN0IHNvY2thZGRyICpuYW1lLCBJTlQgbmFtZWxlbikKIHsKIAlkcHJpbnRmX3dpbnNvY2soc3RkZGViLCAiV1NBX2Nvbm5lY3Q6IHNvY2tldCAlZCwgcHRyICU4eCwgbGVuZ3RoICVkXG4iLCBzLCAoaW50KSBuYW1lLCBuYW1lbGVuKTsKIAlkdW1wX3NvY2thZGRyKG5hbWUpOwpAQCAtMjI5LDcgKzI3NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLUlOVCBXaW5zb2NrX2dldHBlZXJuYW1lKFNPQ0tFVCBzLCBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsIElOVCAqbmFtZWxlbikKK0lOVCBXSU5TT0NLX2dldHBlZXJuYW1lKFNPQ0tFVCBzLCBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsIElOVCAqbmFtZWxlbikKIHsKIAlkcHJpbnRmX3dpbnNvY2soc3RkZGViLCAiV1NBX2dldHBlZXJuYW1lOiBzb2NrZXQ6ICVkLCBwdHIgJTh4LCBwdHIgJTh4XG4iLCBzLCAoaW50KSBuYW1lLCAqbmFtZWxlbik7CiAJZHVtcF9zb2NrYWRkcihuYW1lKTsKQEAgLTI0MSw3ICsyODYsNyBAQAogCXJldHVybiAwOwogfQogCi1JTlQgV2luc29ja19nZXRzb2NrbmFtZShTT0NLRVQgcywgc3RydWN0IHNvY2thZGRyICpuYW1lLCBJTlQgKm5hbWVsZW4pCitJTlQgV0lOU09DS19nZXRzb2NrbmFtZShTT0NLRVQgcywgc3RydWN0IHNvY2thZGRyICpuYW1lLCBJTlQgKm5hbWVsZW4pCiB7CiAJZHByaW50Zl93aW5zb2NrKHN0ZGRlYiwgIldTQV9nZXRzb2NrbmFtZTogc29ja2V0OiAlZCwgcHRyICU4eCwgcHRyICU4eFxuIiwgcywgKGludCkgbmFtZSwgKGludCkgKm5hbWVsZW4pOwogCWlmIChnZXRzb2NrbmFtZShzLCBuYW1lLCAoaW50ICopIG5hbWVsZW4pIDwgMCkgewpAQCAtMjUyLDcgKzI5Nyw3IEBACiB9CiAKIElOVAotV2luc29ja19nZXRzb2Nrb3B0KFNPQ0tFVCBzLCBJTlQgbGV2ZWwsIElOVCBvcHRuYW1lLCBjaGFyICpvcHR2YWwsIElOVCAqb3B0bGVuKQorV0lOU09DS19nZXRzb2Nrb3B0KFNPQ0tFVCBzLCBJTlQgbGV2ZWwsIElOVCBvcHRuYW1lLCBjaGFyICpvcHR2YWwsIElOVCAqb3B0bGVuKQogewogCWRwcmludGZfd2luc29jayhzdGRkZWIsICJXU0FfZ2V0c29ja29wdDogc29ja2V0OiAlZCwgb3B0ICVkLCBwdHIgJTh4LCBwdHIgJTh4XG4iLCBzLCBsZXZlbCwgKGludCkgb3B0dmFsLCAoaW50KSAqb3B0bGVuKTsKIAljb252ZXJ0X3NvY2tvcHQoJmxldmVsLCAmb3B0bmFtZSk7CkBAIC0yNjQsMjYgKzMwOSwyNiBAQAogCXJldHVybiAwOwogfQogCi11X2xvbmcgV2luc29ja19odG9ubCh1X2xvbmcgaG9zdGxvbmcpCit1X2xvbmcgV0lOU09DS19odG9ubCh1X2xvbmcgaG9zdGxvbmcpCiB7CiAJcmV0dXJuKCBodG9ubChob3N0bG9uZykgKTsKIH0gICAgICAgICAKIAotdV9zaG9ydCBXaW5zb2NrX2h0b25zKHVfc2hvcnQgaG9zdHNob3J0KQordV9zaG9ydCBXSU5TT0NLX2h0b25zKHVfc2hvcnQgaG9zdHNob3J0KQogewogCXJldHVybiggaHRvbnMoaG9zdHNob3J0KSApOwogfQogCi11X2xvbmcgV2luc29ja19pbmV0X2FkZHIoY2hhciAqY3ApCit1X2xvbmcgV0lOU09DS19pbmV0X2FkZHIoY2hhciAqY3ApCiB7CiAJcmV0dXJuKCBpbmV0X2FkZHIoY3ApICk7CiB9CiAKLWNoYXIgKldpbnNvY2tfaW5ldF9udG9hKHN0cnVjdCBpbl9hZGRyIGluKQorY2hhciAqV0lOU09DS19pbmV0X250b2Eoc3RydWN0IGluX2FkZHIgaW4pCiB7CiAJY2hhciAqczsKIAotCWRwcmludGZfd2luc29jayhzdGRkZWIsICJXU0FfaW5ldF9udG9hOiAlOHhcbiIsIGluKTsKKy8qCWRwcmludGZfd2luc29jayhzdGRkZWIsICJXU0FfaW5ldF9udG9hOiAlOGx4XG4iLCAoaW50KSBpbik7Ki8KIAogCWlmICgocyA9IGluZXRfbnRvYShpbikpID09IE5VTEwpIHsKICAgICAgICAgCWVycm5vX3RvX3dzYWVycm5vKCk7CkBAIC0yOTUsOSArMzQwLDkgQEAKIAlyZXR1cm4gKGNoYXIgKikgJmhlYXAtPm50b2FfYnVmZmVyOwogfQogCi1JTlQgV2luc29ja19pb2N0bHNvY2tldChTT0NLRVQgcywgbG9uZyBjbWQsIHVfbG9uZyAqYXJncCkKK0lOVCBXSU5TT0NLX2lvY3Rsc29ja2V0KFNPQ0tFVCBzLCBsb25nIGNtZCwgdV9sb25nICphcmdwKQogewotCWRwcmludGZfd2luc29jayhzdGRkZWIsICJXU0FfaW9jdGw6IHNvY2tldCAlZCwgY21kICVkLCBwdHIgJTh4XG4iLCBzLCBjbWQsIChpbnQpIGFyZ3ApOworCWRwcmludGZfd2luc29jayhzdGRkZWIsICJXU0FfaW9jdGw6IHNvY2tldCAlZCwgY21kICVsZCwgcHRyICU4eFxuIiwgcywgY21kLCAoaW50KSBhcmdwKTsKIAogCWlmIChpb2N0bChzLCBjbWQsIGFyZ3ApIDwgMCkgewogICAgICAgICAJZXJybm9fdG9fd3NhZXJybm8oKTsKQEAgLTMwNiw3ICszNTEsNyBAQAogCXJldHVybiAwOwogfQogCi1JTlQgV2luc29ja19saXN0ZW4oU09DS0VUIHMsIElOVCBiYWNrbG9nKQorSU5UIFdJTlNPQ0tfbGlzdGVuKFNPQ0tFVCBzLCBJTlQgYmFja2xvZykKIHsKIAlkcHJpbnRmX3dpbnNvY2soc3RkZGViLCAiV1NBX2xpc3Rlbjogc29ja2V0ICVkLCBiYWNrbG9nICVkXG4iLCBzLCBiYWNrbG9nKTsKIApAQCAtMzE3LDE3ICszNjIsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdV9sb25nIFdpbnNvY2tfbnRvaGwodV9sb25nIG5ldGxvbmcpCit1X2xvbmcgV0lOU09DS19udG9obCh1X2xvbmcgbmV0bG9uZykKIHsKIAlyZXR1cm4oIG50b2hsKG5ldGxvbmcpICk7CiB9CiAKLXVfc2hvcnQgV2luc29ja19udG9ocyh1X3Nob3J0IG5ldHNob3J0KQordV9zaG9ydCBXSU5TT0NLX250b2hzKHVfc2hvcnQgbmV0c2hvcnQpCiB7CiAJcmV0dXJuKCBudG9ocyhuZXRzaG9ydCkgKTsKIH0KIAotSU5UIFdpbnNvY2tfcmVjdihTT0NLRVQgcywgY2hhciAqYnVmLCBJTlQgbGVuLCBJTlQgZmxhZ3MpCitJTlQgV0lOU09DS19yZWN2KFNPQ0tFVCBzLCBjaGFyICpidWYsIElOVCBsZW4sIElOVCBmbGFncykKIHsKIAlpbnQgbGVuZ3RoOwogCkBAIC0zNDAsMTIgKzM4NSwxMiBAQAogCXJldHVybiBsZW5ndGg7CiB9CiAKLUlOVCBXaW5zb2NrX3JlY3Zmcm9tKFNPQ0tFVCBzLCBjaGFyICpidWYsIElOVCBsZW4sIElOVCBmbGFncywgCitJTlQgV0lOU09DS19yZWN2ZnJvbShTT0NLRVQgcywgY2hhciAqYnVmLCBJTlQgbGVuLCBJTlQgZmxhZ3MsIAogCQlzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sIGludCAqZnJvbWxlbikKIHsKIAlpbnQgbGVuZ3RoOwogCi0JZHByaW50Zl93aW5zb2NrKHN0ZGRlYiwgIldTQV9yZWN2ZnJvbTogc29ja2V0ICVkLCBwdHIgJTh4LCBsZW5ndGggJWQsIGZsYWdzICVkXG4iLCBzLCBidWYsIGxlbiwgZmxhZ3MpOworCWRwcmludGZfd2luc29jayhzdGRkZWIsICJXU0FfcmVjdmZyb206IHNvY2tldCAlZCwgcHRyICU4bHgsIGxlbmd0aCAlZCwgZmxhZ3MgJWRcbiIsIHMsICh1bnNpZ25lZCBsb25nKWJ1ZiwgbGVuLCBmbGFncyk7CiAKIAlpZiAoKGxlbmd0aCA9IHJlY3Zmcm9tKHMsIGJ1ZiwgbGVuLCBmbGFncywgZnJvbSwgZnJvbWxlbikpIDwgMCkgewogICAgICAgICAJZXJybm9fdG9fd3NhZXJybm8oKTsKQEAgLTM1NCwxOSArMzk5LDE5IEBACiAJcmV0dXJuIGxlbmd0aDsKIH0KIAotSU5UIFdpbnNvY2tfc2VsZWN0KElOVCBuZmRzLCBmZF9zZXQgKnJlYWRmZHMsIGZkX3NldCAqd3JpdGVmZHMsCitJTlQgV0lOU09DS19zZWxlY3QoSU5UIG5mZHMsIGZkX3NldCAqcmVhZGZkcywgZmRfc2V0ICp3cml0ZWZkcywKIAlmZF9zZXQgKmV4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQpCiB7Ci0JZHByaW50Zl93aW5zb2NrKHN0ZGRlYiwgIldTQV9zZWxlY3Q6IGZkICMgJWQsIHB0ciAlOHgsIHB0ciAlOHgsIHB0ciAlKlhcbiIsIG5mZHMsIHJlYWRmZHMsIHdyaXRlZmRzLCBleGNlcHRmZHMpOworCWRwcmludGZfd2luc29jayhzdGRkZWIsICJXU0Ffc2VsZWN0OiBmZCAjICVkLCBwdHIgJThseCwgcHRyICU4bHgsIHB0ciAlOGxYXG4iLCBuZmRzLCAodW5zaWduZWQgbG9uZykgcmVhZGZkcywgKHVuc2lnbmVkIGxvbmcpIHdyaXRlZmRzLCAodW5zaWduZWQgbG9uZykgZXhjZXB0ZmRzKTsKIAogCXJldHVybihzZWxlY3QobmZkcywgcmVhZGZkcywgd3JpdGVmZHMsIGV4Y2VwdGZkcywgdGltZW91dCkpOwogfQogCi1JTlQgV2luc29ja19zZW5kKFNPQ0tFVCBzLCBjaGFyICpidWYsIElOVCBsZW4sIElOVCBmbGFncykKK0lOVCBXSU5TT0NLX3NlbmQoU09DS0VUIHMsIGNoYXIgKmJ1ZiwgSU5UIGxlbiwgSU5UIGZsYWdzKQogewogCWludCBsZW5ndGg7CiAKLQlkcHJpbnRmX3dpbnNvY2soc3RkZGViLCAiV1NBX3NlbmQ6IHNvY2tldCAlZCwgcHRyICU4eCwgbGVuZ3RoICVkLCBmbGFncyAlZFxuIiwgcywgYnVmLCBsZW4sIGZsYWdzKTsKKwlkcHJpbnRmX3dpbnNvY2soc3RkZGViLCAiV1NBX3NlbmQ6IHNvY2tldCAlZCwgcHRyICU4bHgsIGxlbmd0aCAlZCwgZmxhZ3MgJWRcbiIsIHMsICh1bnNpZ25lZCBsb25nKSBidWYsIGxlbiwgZmxhZ3MpOwogCiAJaWYgKChsZW5ndGggPSBzZW5kKHMsIGJ1ZiwgbGVuLCBmbGFncykpIDwgMCkgewogICAgICAgICAJZXJybm9fdG9fd3NhZXJybm8oKTsKQEAgLTM3NSwxMiArNDIwLDEyIEBACiAJcmV0dXJuIGxlbmd0aDsKIH0KIAotSU5UIFdpbnNvY2tfc2VuZHRvKFNPQ0tFVCBzLCBjaGFyICpidWYsIElOVCBsZW4sIElOVCBmbGFncywKK0lOVCBXSU5TT0NLX3NlbmR0byhTT0NLRVQgcywgY2hhciAqYnVmLCBJTlQgbGVuLCBJTlQgZmxhZ3MsCiAJCXN0cnVjdCBzb2NrYWRkciAqdG8sIElOVCB0b2xlbikKIHsKIAlpbnQgbGVuZ3RoOwogCi0JZHByaW50Zl93aW5zb2NrKHN0ZGRlYiwgIldTQV9zZW5kdG86IHNvY2tldCAlZCwgcHRyICU4eCwgbGVuZ3RoICVkLCBmbGFncyAlZFxuIiwgcywgYnVmLCBsZW4sIGZsYWdzKTsKKwlkcHJpbnRmX3dpbnNvY2soc3RkZGViLCAiV1NBX3NlbmR0bzogc29ja2V0ICVkLCBwdHIgJThseCwgbGVuZ3RoICVkLCBmbGFncyAlZFxuIiwgcywgKHVuc2lnbmVkIGxvbmcpIGJ1ZiwgbGVuLCBmbGFncyk7CiAKIAlpZiAoKGxlbmd0aCA9IHNlbmR0byhzLCBidWYsIGxlbiwgZmxhZ3MsIHRvLCB0b2xlbikpIDwgMCkgewogICAgICAgICAJZXJybm9fdG9fd3NhZXJybm8oKTsKQEAgLTM4OSw3ICs0MzQsNyBAQAogCXJldHVybiBsZW5ndGg7CiB9CiAKLUlOVCBXaW5zb2NrX3NldHNvY2tvcHQoU09DS0VUIHMsIElOVCBsZXZlbCwgSU5UIG9wdG5hbWUsIGNvbnN0IGNoYXIgKm9wdHZhbCwgCitJTlQgV0lOU09DS19zZXRzb2Nrb3B0KFNPQ0tFVCBzLCBJTlQgbGV2ZWwsIElOVCBvcHRuYW1lLCBjb25zdCBjaGFyICpvcHR2YWwsIAogCQkJSU5UIG9wdGxlbikKIHsKIAlkcHJpbnRmX3dpbnNvY2soc3RkZGViLCAiV1NBX3NldHNvY2tvcHQ6IHNvY2tldCAlZCwgbGV2ZWwgJWQsIG9wdCAlZCwgcHRyICU4eCwgbGVuICVkXG4iLCBzLCBsZXZlbCwgb3B0bmFtZSwgKGludCkgb3B0dmFsLCBvcHRsZW4pOwpAQCAtNDAyLDcgKzQ0Nyw3IEBACiAJcmV0dXJuIDA7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIAotSU5UIFdpbnNvY2tfc2h1dGRvd24oU09DS0VUIHMsIElOVCBob3cpCitJTlQgV0lOU09DS19zaHV0ZG93bihTT0NLRVQgcywgSU5UIGhvdykKIHsKIAlkcHJpbnRmX3dpbnNvY2soc3RkZGViLCAiV1NBX3NodXRkb3duOiBzb2NrZXQgcyAlZCwgaG93ICVkXG4iLCBzLCBob3cpOwogCkBAIC00MTMsNyArNDU4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotU09DS0VUIFdpbnNvY2tfc29ja2V0KElOVCBhZiwgSU5UIHR5cGUsIElOVCBwcm90b2NvbCkKK1NPQ0tFVCBXSU5TT0NLX3NvY2tldChJTlQgYWYsIElOVCB0eXBlLCBJTlQgcHJvdG9jb2wpCiB7CiAgICAgaW50IHNvY2s7CiAKQEAgLTQyMSw3ICs0NjYsNyBAQAogCiAgICAgaWYgKChzb2NrID0gc29ja2V0KGFmLCB0eXBlLCBwcm90b2NvbCkpIDwgMCkgewogICAgICAgICAgICAgZXJybm9fdG9fd3NhZXJybm8oKTsKLSAgICBkcHJpbnRmX3dpbnNvY2soc3RkZGViLCAiV1NBX3NvY2tldDogZmFpbGVkICFcbiIpOworICAgICAgICAgICAgZHByaW50Zl93aW5zb2NrKHN0ZGRlYiwgIldTQV9zb2NrZXQ6IGZhaWxlZCAhXG4iKTsKICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX1NPQ0tFVDsKICAgICB9CiAgICAgCkBAIC00MzYsNyArNDgxLDcgQEAKICAgICByZXR1cm4gc29jazsKIH0KIAotc3RydWN0IGhvc3RlbnQgKldpbnNvY2tfZ2V0aG9zdGJ5YWRkcihjb25zdCBjaGFyICphZGRyLCBJTlQgbGVuLCBJTlQgdHlwZSkKK3N0cnVjdCBXSU5faG9zdGVudCAqV0lOU09DS19nZXRob3N0YnlhZGRyKGNvbnN0IGNoYXIgKmFkZHIsIElOVCBsZW4sIElOVCB0eXBlKQogewogCXN0cnVjdCBob3N0ZW50ICpob3N0OwogCkBAIC00NDYsMzAgKzQ5MSwyOSBAQAogICAgICAgICAJZXJybm9fdG9fd3NhZXJybm8oKTsKICAgICAgICAgCXJldHVybiBOVUxMOwogCX0KLQltZW1jcHkoJmhlYXAtPmhvc3RlbnRfYWRkciwgaG9zdCwgc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSk7CisJQ09OVkVSVF9IT1NURU5UKCZoZWFwLT5ob3N0ZW50X2FkZHIsIGhvc3QpOwogCi0JcmV0dXJuIChzdHJ1Y3QgaG9zdGVudCAqKSAmaGVhcC0+aG9zdGVudF9hZGRyOworCXJldHVybiAmaGVhcC0+aG9zdGVudF9hZGRyOwogfQogCi1zdHJ1Y3QgaG9zdGVudCAqV2luc29ja19nZXRob3N0YnluYW1lKGNvbnN0IGNoYXIgKm5hbWUpCitzdHJ1Y3QgV0lOX2hvc3RlbnQgKldJTlNPQ0tfZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBob3N0ZW50ICpob3N0OwogCi0JZHByaW50Zl93aW5zb2NrKHN0ZGRlYiwgIldTQV9nZXRob3N0YnluYW1lOiBuYW1lICVzXG4iLCBuYW1lKTsKKwlkcHJpbnRmX3dpbnNvY2soc3RkZGViLCAiV1NBX2dldGhvc3RieW5hbWU6ICVzXG4iLCBuYW1lKTsKIAogCWlmICgoaG9zdCA9IGdldGhvc3RieW5hbWUobmFtZSkpID09IE5VTEwpIHsKICAgICAgICAgCWVycm5vX3RvX3dzYWVycm5vKCk7CiAgICAgICAgIAlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtY3B5KCZoZWFwLT5ob3N0ZW50X25hbWUsIGhvc3QsIHNpemVvZihzdHJ1Y3QgaG9zdGVudCkpOworCUNPTlZFUlRfSE9TVEVOVCgmaGVhcC0+aG9zdGVudF9uYW1lLCBob3N0KTsKIAotCXJldHVybiAoc3RydWN0IGhvc3RlbnQgKikgJmhlYXAtPmhvc3RlbnRfbmFtZTsKKwlyZXR1cm4gJmhlYXAtPmhvc3RlbnRfbmFtZTsKIH0KIAotaW50IFdpbnNvY2tfZ2V0aG9zdG5hbWUoY2hhciAqbmFtZSwgSU5UIG5hbWVsZW4pCitJTlQgV0lOU09DS19nZXRob3N0bmFtZShjaGFyICpuYW1lLCBJTlQgbmFtZWxlbikKIHsKLQotCWRwcmludGZfd2luc29jayhzdGRkZWIsICJXU0FfZ2V0aG9zdG5hbWU6IG5hbWUgJWQsIGxlbiAlZFxuIiwgbmFtZSwgbmFtZWxlbik7CisJZHByaW50Zl93aW5zb2NrKHN0ZGRlYiwgIldTQV9nZXRob3N0bmFtZTogbmFtZSAlcywgbGVuICVkXG4iLCBuYW1lLCBuYW1lbGVuKTsKIAogCWlmIChnZXRob3N0bmFtZShuYW1lLCBuYW1lbGVuKSA8IDApIHsKICAgICAgICAgCWVycm5vX3RvX3dzYWVycm5vKCk7CkBAIC00NzgsNyArNTIyLDcgQEAKIAlyZXR1cm4gMDsKIH0gICAgICAgICAgCiAKLXN0cnVjdCBwcm90b2VudCAqV2luc29ja19nZXRwcm90b2J5bmFtZShjaGFyICpuYW1lKQorc3RydWN0IFdJTl9wcm90b2VudCAqV0lOU09DS19nZXRwcm90b2J5bmFtZShjaGFyICpuYW1lKQogewogCXN0cnVjdCBwcm90b2VudCAqcHJvdG87CiAKQEAgLTQ4OCwxMiArNTMyLDEyIEBACiAgICAgICAgIAllcnJub190b193c2FlcnJubygpOwogICAgICAgICAJcmV0dXJuIE5VTEw7CiAJfQotCW1lbWNweSgmaGVhcC0+cHJvdG9lbnRfbmFtZSwgcHJvdG8sIHNpemVvZihzdHJ1Y3QgcHJvdG9lbnQpKTsKKwlDT05WRVJUX1BST1RPRU5UKCZoZWFwLT5wcm90b2VudF9uYW1lLCBwcm90byk7CiAKLQlyZXR1cm4gKHN0cnVjdCBwcm90b2VudCAqKSAmaGVhcC0+cHJvdG9lbnRfbmFtZTsKKwlyZXR1cm4gJmhlYXAtPnByb3RvZW50X25hbWU7CiB9CiAKLXN0cnVjdCBwcm90b2VudCAqV2luc29ja19nZXRwcm90b2J5bnVtYmVyKElOVCBudW1iZXIpCitzdHJ1Y3QgV0lOX3Byb3RvZW50ICpXSU5TT0NLX2dldHByb3RvYnludW1iZXIoSU5UIG51bWJlcikKIHsKIAlzdHJ1Y3QgcHJvdG9lbnQgKnByb3RvOwogCkBAIC01MDMsMjcgKzU0NywzMCBAQAogICAgICAgICAJZXJybm9fdG9fd3NhZXJybm8oKTsKICAgICAgICAgCXJldHVybiBOVUxMOwogCX0KLQltZW1jcHkoJmhlYXAtPnByb3RvZW50X251bWJlciwgcHJvdG8sIHNpemVvZihzdHJ1Y3QgcHJvdG9lbnQpKTsKKwlDT05WRVJUX1BST1RPRU5UKCZoZWFwLT5wcm90b2VudF9udW1iZXIsIHByb3RvKTsKIAotCXJldHVybiAoc3RydWN0IHByb3RvZW50ICopICZoZWFwLT5wcm90b2VudF9udW1iZXI7CisJcmV0dXJuICZoZWFwLT5wcm90b2VudF9udW1iZXI7CiB9CiAKLXN0cnVjdCBzZXJ2ZW50ICpXaW5zb2NrX2dldHNlcnZieW5hbWUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcHJvdG8pCitzdHJ1Y3QgV0lOX3NlcnZlbnQgKldJTlNPQ0tfZ2V0c2VydmJ5bmFtZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcm90bykKIHsKIAlzdHJ1Y3Qgc2VydmVudCAqc2VydmljZTsKIAorCWlmIChwcm90byA9PSBOVUxMKQorCQlwcm90byA9ICJ0Y3AiOworCiAJZHByaW50Zl93aW5zb2NrKHN0ZGRlYiwgIldTQV9nZXRzZXJ2YnluYW1lOiBuYW1lICVzLCBwcm90byAlc1xuIiwgbmFtZSwgcHJvdG8pOwogCiAJaWYgKChzZXJ2aWNlID0gZ2V0c2VydmJ5bmFtZShuYW1lLCBwcm90bykpID09IE5VTEwpIHsKICAgICAgICAgCWVycm5vX3RvX3dzYWVycm5vKCk7CiAgICAgICAgIAlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtY3B5KCZoZWFwLT5zZXJ2ZW50X25hbWUsIHNlcnZpY2UsIHNpemVvZihzdHJ1Y3Qgc2VydmVudCkpOworCUNPTlZFUlRfU0VSVkVOVCgmaGVhcC0+c2VydmVudF9uYW1lLCBzZXJ2aWNlKTsKIAotCXJldHVybiAoc3RydWN0IHNlcnZlbnQgKikgJmhlYXAtPnNlcnZlbnRfbmFtZTsKKwlyZXR1cm4gJmhlYXAtPnNlcnZlbnRfbmFtZTsKIH0KIAotc3RydWN0IHNlcnZlbnQgKldpbnNvY2tfZ2V0c2VydmJ5cG9ydChJTlQgcG9ydCwgY29uc3QgY2hhciAqcHJvdG8pCitzdHJ1Y3QgV0lOX3NlcnZlbnQgKldJTlNPQ0tfZ2V0c2VydmJ5cG9ydChJTlQgcG9ydCwgY29uc3QgY2hhciAqcHJvdG8pCiB7CiAJc3RydWN0IHNlcnZlbnQgKnNlcnZpY2U7CiAKQEAgLTUzMyw5ICs1ODAsOSBAQAogICAgICAgICAJZXJybm9fdG9fd3NhZXJybm8oKTsKICAgICAgICAgCXJldHVybiBOVUxMOwogCX0KLQltZW1jcHkoJmhlYXAtPnNlcnZlbnRfcG9ydCwgc2VydmljZSwgc2l6ZW9mKHN0cnVjdCBzZXJ2ZW50KSk7CisJQ09OVkVSVF9TRVJWRU5UKCZoZWFwLT5zZXJ2ZW50X3BvcnQsIHNlcnZpY2UpOwogCi0JcmV0dXJuIChzdHJ1Y3Qgc2VydmVudCAqKSAmaGVhcC0+c2VydmVudF9wb3J0OworCXJldHVybiAmaGVhcC0+c2VydmVudF9wb3J0OwogfQogCiAvKioqKioqKioqKioqKioqKioqKiogd2luc29jayBzcGVjaWZpYyBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01NDMsNyArNTkwLDcgQEAKICAqLwogc3RhdGljIEhBTkRMRSBuZXdfaGFuZGxlID0gMDsKIAotSEFORExFIEFsbG9jV1NBSGFuZGxlKHZvaWQpCitzdGF0aWMgSEFORExFIEFsbG9jV1NBSGFuZGxlKHZvaWQpCiB7CiAJcmV0dXJuIG5ld19oYW5kbGUrKzsKIH0KQEAgLTU1Niw3ICs2MDMsNyBAQAogCQlwZXJyb3IoIndpbmU6IG1zZ3JjdiIpOwogCiAJZnByaW50ZihzdGRlcnIsIAotCQkiV1NBOiBQb3N0TWVzc2FnZSAoaHduZCAlZCwgd01zZyAlZCwgd1BhcmFtICVkLCBsUGFyYW0gJWQpXG4iLAorCQkiV1NBOiBQb3N0TWVzc2FnZSAoaHduZCAlZCwgd01zZyAlZCwgd1BhcmFtICVkLCBsUGFyYW0gJWxkKVxuIiwKIAkJbWVzc2FnZS5oV25kLAogCQltZXNzYWdlLndNc2csCiAJCW1lc3NhZ2UuaGFuZGxlLApAQCAtNTc5LDcgKzYyNiw3IEBACiAJbWVzc2FnZS5sUGFyYW0gPSBsUGFyYW07CiAKIAlmcHJpbnRmKHN0ZGVyciwgCi0JCSJXU0E6IHNlbmQgKGh3bmQgJWQsIHdNc2cgJWQsIGhhbmRsZSAlZCwgbFBhcmFtICVkKVxuIiwKKwkJIldTQTogc2VuZCAoaHduZCAlZCwgd01zZyAlZCwgaGFuZGxlICVkLCBsUGFyYW0gJWxkKVxuIiwKIAkJaFduZCwgd01zZywgaGFuZGxlLCBsUGFyYW0pOwogCQogCWlmIChtc2dzbmQod2luZV9rZXksICZtZXNzYWdlLCAgSVBDX1BBQ0tFVF9TSVpFLCBJUENfTk9XQUlUKSA9PSAtMSkKQEAgLTcyNSw3ICs3NzIsNyBAQAogCWxvbmcgZXZlbnQ7CiAJZmRfc2V0IHJlYWRfZmRzLCB3cml0ZV9mZHMsIGV4Y2VwdF9mZHM7CiAKLQlkcHJpbnRmX3dpbnNvY2soc3RkZGViLCAiV1NBX0FzeW5jU2VsZWN0OiBzb2NrZXQgJWQsIEhXTkQgJWQsIHdNc2cgJWQsIGV2ZW50ICVkXG4iLCBzLCBoV25kLCB3TXNnLCBsRXZlbnQpOworCWRwcmludGZfd2luc29jayhzdGRkZWIsICJXU0FfQXN5bmNTZWxlY3Q6IHNvY2tldCAlZCwgSFdORCAlZCwgd01zZyAlZCwgZXZlbnQgJWxkXG4iLCBzLCBoV25kLCB3TXNnLCBsRXZlbnQpOwogCiAJLyogcmVtb3ZlIG91dHN0YW5kaW5nIGFzeW5jc2VsZWN0KCkgcHJvY2Vzc2VzICovCiAJLyoga2lsbCAqLwpAQCAtNzk1LDE0ICs4NDIsMTYgQEAKIEJPT0wgV1NBSXNCbG9ja2luZyh2b2lkKQogewogCWRwcmludGZfd2luc29jayhzdGRkZWIsICJXU0FfSXNCbG9ja2luZ1xuIik7CisKKwlyZXR1cm4gMDsKIH0KIAogRkFSUFJPQyBXU0FTZXRCbG9ja2luZ0hvb2soRkFSUFJPQyBscEJsb2NrRnVuYykKIHsKLQlkcHJpbnRmX3dpbnNvY2soc3RkZGViLCAiV1NBX1NldEJsb2NrSG9vayAlOHgsIFNUVUIhXG4iLCBscEJsb2NrRnVuYyk7CisJZHByaW50Zl93aW5zb2NrKHN0ZGRlYiwgIldTQV9TZXRCbG9ja0hvb2sgJThseCwgU1RVQiFcbiIsICh1bnNpZ25lZCBsb25nKSBscEJsb2NrRnVuYyk7CiAJQmxvY2tGdW5jdGlvbiA9IGxwQmxvY2tGdW5jOwogCi0JcmV0dXJuIGxwQmxvY2tGdW5jOworCXJldHVybiAoRkFSUFJPQykgbHBCbG9ja0Z1bmM7CiB9CiAKIElOVCBXU0FVbmhvb2tCbG9ja2luZ0hvb2sodm9pZCkKQEAgLTgxMyw3ICs4NjIsNyBAQAogCXJldHVybiAwOwogfQogCi1XU0FEQVRBIFdpbnNvY2tfZGF0YSA9IHsKK1dTQURBVEEgV0lOU09DS19kYXRhID0gewogICAgICAgICAweDAxMDEsCiAgICAgICAgIDB4MDEwMSwKICAgICAgICAgIldJTkUgU29ja2V0cyIsCkBAIC04NTUsNyArOTA0LDcgQEAKICNpZm5kZWYgV0lORUxJQgogICAgIEhFQVBfSW5pdCgmTXlIZWFwLCBoZWFwLCBzaXplb2Yoc3RydWN0IFdpblNvY2tIZWFwKSk7CiAjZW5kaWYKLSAgICBiY29weSgmV2luc29ja19kYXRhLCBscFdTQURhdGEsIHNpemVvZihXaW5zb2NrX2RhdGEpKTsKKyAgICBiY29weSgmV0lOU09DS19kYXRhLCBscFdTQURhdGEsIHNpemVvZihXSU5TT0NLX2RhdGEpKTsKIAogICAgIC8qIGlwYyBzdHVmZiAqLwogCmRpZmYgLS1naXQgYS9taXNjZW11L2VtdWxhdGUuYyBiL21pc2NlbXUvZW11bGF0ZS5jCmluZGV4IGJmMmM4NjguLmMwMTQ4ODcgMTAwNjQ0Ci0tLSBhL21pc2NlbXUvZW11bGF0ZS5jCisrKyBiL21pc2NlbXUvZW11bGF0ZS5jCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgInJlZ2Z1bmMuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogLyogI2RlZmluZSBERUJVR19JTlQgKi8KLS8qICN1bmRlZiAgREVCVUdfSU5UICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogc3RydWN0IFdpbjg3RW1JbmZvU3RydWN0IHsKQEAgLTE5LDcgKzE4LDcgQEAKIGludAogV0lOODdfZnBtYXRoKCkKIHsKLSAgZHByaW50Zl9pbnQoc3RkZGViLCAiX2ZwbWF0aDogKCV4OiV4ICV4ICV4KVxuIixfQ09OVEVYVC0+c2NfY3MsIAorICBkcHJpbnRmX2ludChzdGRkZWIsICJfZnBtYXRoOiAoJXg6JWx4ICVseCAleClcbiIsX0NPTlRFWFQtPnNjX2NzLCAKIAkgX0NPTlRFWFQtPnNjX2VpcCwgX0NPTlRFWFQtPnNjX2VzLCBfQlggJiAweGZmZmYpOwogCiAgIHN3aXRjaChfQlggJiAweGZmZmYpCmRpZmYgLS1naXQgYS9taXNjZW11L2ludDEwLmMgYi9taXNjZW11L2ludDEwLmMKaW5kZXggMTIzZGRiYi4uOGJkOTU0NSAxMDA2NDQKLS0tIGEvbWlzY2VtdS9pbnQxMC5jCisrKyBiL21pc2NlbXUvaW50MTAuYwpAQCAtMiw5ICsyLDkgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlICJyZWdpc3RlcnMuaCIKICNpbmNsdWRlICJ3aW5lLmgiCisjaW5jbHVkZSAibWlzY2VtdS5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX0lOVCAqLwotLyogI3VuZGVmICBERUJVR19JTlQgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiB2b2lkIEludEJhcmYoaW50IGksIHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqY29udGV4dCkKZGlmZiAtLWdpdCBhL21pc2NlbXUvaW50MTMuYyBiL21pc2NlbXUvaW50MTMuYwppbmRleCAxYzA4MjMzLi4yOTRmNDhkIDEwMDY0NAotLS0gYS9taXNjZW11L2ludDEzLmMKKysrIGIvbWlzY2VtdS9pbnQxMy5jCkBAIC0yLDEzICsyLDExIEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCiAjaW5jbHVkZSAid2luZS5oIgorI2luY2x1ZGUgIm1pc2NlbXUuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogLyogI2RlZmluZSBERUJVR19JTlQgKi8KLS8qICN1bmRlZiAgREVCVUdfSU5UICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotdm9pZCBJbnRCYXJmKGludCBpLCBzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpOwotCiBpbnQgZG9faW50MTMoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICpjb250ZXh0KQogewogCXN3aXRjaChBSCkgewpkaWZmIC0tZ2l0IGEvbWlzY2VtdS9pbnQxNS5jIGIvbWlzY2VtdS9pbnQxNS5jCmluZGV4IDM4NThlOGYuLjllZmM0N2MgMTAwNjQ0Ci0tLSBhL21pc2NlbXUvaW50MTUuYworKysgYi9taXNjZW11L2ludDE1LmMKQEAgLTIsMTMgKzIsMTEgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlICJyZWdpc3RlcnMuaCIKICNpbmNsdWRlICJ3aW5lLmgiCisjaW5jbHVkZSAibWlzY2VtdS5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX0lOVCAqLwotLyogI3VuZGVmICBERUJVR19JTlQgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCi12b2lkIEludEJhcmYoaW50IGksIHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqY29udGV4dCk7Ci0KIGludCBkb19pbnQxNShzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpCiB7CiAJc3dpdGNoKEFIKSB7CmRpZmYgLS1naXQgYS9taXNjZW11L2ludDE2LmMgYi9taXNjZW11L2ludDE2LmMKaW5kZXggYzEyOTRmOC4uYjNjYzA2ZSAxMDA2NDQKLS0tIGEvbWlzY2VtdS9pbnQxNi5jCisrKyBiL21pc2NlbXUvaW50MTYuYwpAQCAtMiwxMyArMiwxMSBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgInJlZ2lzdGVycy5oIgogI2luY2x1ZGUgIndpbmUuaCIKKyNpbmNsdWRlICJtaXNjZW11LmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKIC8qICNkZWZpbmUgREVCVUdfSU5UICovCi0vKiAjdW5kZWYgIERFQlVHX0lOVCAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKLXZvaWQgSW50QmFyZihpbnQgaSwgc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICpjb250ZXh0KTsKLQogaW50IGRvX2ludDE2KHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqY29udGV4dCkKIHsKIAlzd2l0Y2goQUgpIHsKZGlmZiAtLWdpdCBhL21pc2NlbXUvaW50MWEuYyBiL21pc2NlbXUvaW50MWEuYwppbmRleCAwZTBhOWZhLi5hODczOWYwIDEwMDY0NAotLS0gYS9taXNjZW11L2ludDFhLmMKKysrIGIvbWlzY2VtdS9pbnQxYS5jCkBAIC00LDkgKzQsOSBAQAogI2luY2x1ZGUgInJlZ2lzdGVycy5oIgogI2luY2x1ZGUgIndpbmUuaCIKICNpbmNsdWRlICJvcHRpb25zLmgiCisjaW5jbHVkZSAibWlzY2VtdS5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX0lOVCAqLwotLyogI3VuZGVmICBERUJVR19JTlQgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAjaWZkZWYgbGludXgKQEAgLTE4LDE0ICsxOCwxMSBAQAogI2RlZmluZQlCQ0RfVE9fQklOKHgpICgoeCYxNSkgKyAoeD4+NCkqMTApCiAjZGVmaW5lIEJJTl9UT19CQ0QoeCkgKCh4JTEwKSArICgoeC8xMCk8PDQpKQogCi12b2lkIEludEJhcmYoaW50IGksIHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqY29udGV4dCk7Ci0KLWludCBkb19pbnQxQShzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKiBjb250ZXh0KXsKLQl0aW1lX3QgbHRpbWU7CitpbnQgZG9faW50MWEoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICogY29udGV4dCl7CisJdGltZV90IGx0aW1lLCB0aWNrczsKIAlzdHJ1Y3QgdG0gKmJkdGltZTsKLQlpbnQgdGlja3M7CiAKLSAgICBpZiAoT3B0aW9ucy5yZWxheV9kZWJ1ZykgeworICAgIGlmIChkZWJ1Z2dpbmdfcmVsYXkpIHsKIAlmcHJpbnRmKHN0ZGRlYiwiaW50MUE6IEFYICUwNHgsIEJYICUwNHgsIENYICUwNHgsIERYICUwNHgsICIKIAkgICAgICAgIlNJICUwNHgsIERJICUwNHgsIERTICUwNHgsIEVTICUwNHhcbiIsCiAJICAgICAgIEFYLCBCWCwgQ1gsIERYLCBTSSwgREksIERTLCBFUyk7CmRpZmYgLS1naXQgYS9taXNjZW11L2ludDIxLmMgYi9taXNjZW11L2ludDIxLmMKaW5kZXggNTc1NmQ4YS4uNWFiNWMxMSAxMDA2NDQKLS0tIGEvbWlzY2VtdS9pbnQyMS5jCisrKyBiL21pc2NlbXUvaW50MjEuYwpAQCAtMTUsMTYgKzE1LDE3IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8dXRpbWUuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgInByb3RvdHlwZXMuaCIKKyNpbmNsdWRlICJkb3NfZnMuaCIKICNpbmNsdWRlICJyZWdmdW5jLmgiCiAjaW5jbHVkZSAid2luZG93cy5oIgotI2luY2x1ZGUgIndpbmUuaCIKKyNpbmNsdWRlICJoZWFwLmgiCiAjaW5jbHVkZSAibXNkb3MuaCIKICNpbmNsdWRlICJyZWdpc3RlcnMuaCIKICNpbmNsdWRlICJvcHRpb25zLmgiCisjaW5jbHVkZSAicHJvdG90eXBlcy5oIgorI2luY2x1ZGUgIm1pc2NlbXUuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogLyogI2RlZmluZSBERUJVR19JTlQgKi8KLS8qICN1bmRlZiAgREVCVUdfSU5UICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogV09SRCBFeHRlbmRlZEVycm9yLCBDb2RlUGFnZSA9IDQzNzsKQEAgLTQyLDcgKzQzLDYgQEAKIFdPUkQgc2hhcmluZ19wYXVzZSA9IDE7ICAgICAgICAvKiBwYXVzZSBiZXR3ZWVuIHJldHJpZXMgKi8KIAogZXh0ZXJuIGNoYXIgVGVtcERpcmVjdG9yeVtdOwotdm9pZCBJbnRCYXJmKGludCBpLCBzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpOwogCiBzdGF0aWMgaW50IEVycm9yKGludCBlLCBpbnQgY2xhc3MsIGludCBlbCkKIHsKQEAgLTE4MCw3ICsxODAsNiBAQAogCiBzdGF0aWMgdm9pZCBHZXREcml2ZUFsbG9jSW5mbyhzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpCiB7Ci0JaW50IGRyaXZlOwogCWxvbmcgc2l6ZSwgYXZhaWxhYmxlOwogCUJZVEUgbWVkaWFJRDsKIAkKQEAgLTQzNiw3ICs0MzUsNyBAQAogewogCWludCBoYW5kbGU7CiAKLQlpZiAoKGhhbmRsZSA9IG9wZW4oR2V0VW5peEZpbGVOYW1lKCBTQUZFTUFLRVBUUihEUyxEWCkpLCAKKwlpZiAoKGhhbmRsZSA9IG9wZW4oRE9TX0dldFVuaXhGaWxlTmFtZSggU0FGRU1BS0VQVFIoRFMsRFgpKSwgCiAgICAgICAgICAgIE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19SRFdSICkpID09IC0xKSB7CiAJCWVycm5vX3RvX2Rvc2VycigpOwogCQlBTCA9IEV4dGVuZGVkRXJyb3I7CkBAIC00NjksNyArNDY4LDcgQEAKIAkgICAgYnJlYWs7CiAJfQogCi0JaWYgKChoYW5kbGUgPSBvcGVuKEdldFVuaXhGaWxlTmFtZShTQUZFTUFLRVBUUihEUyxEWCkpLCBtb2RlKSkgPT0gLTEpIHsKKwlpZiAoKGhhbmRsZSA9IG9wZW4oRE9TX0dldFVuaXhGaWxlTmFtZShTQUZFTUFLRVBUUihEUyxEWCkpLCBtb2RlKSkgPT0gLTEpIHsKIAkJZXJybm9fdG9fZG9zZXJyKCk7CiAJCUFMID0gRXh0ZW5kZWRFcnJvcjsKIAkJU2V0Q2ZsYWc7CkBAIC01NTIsOCArNTUxLDggQEAKIAlkcHJpbnRmX2ludChzdGRkZWIsImludDIxOiByZW5hbWluZyAlcyB0byAlc1xuIiwKIAkJCVNBRkVNQUtFUFRSKERTLERYKSwgU0FGRU1BS0VQVFIoRVMsREkpICk7CiAJCi0Jb2xkbmFtZSA9IEdldFVuaXhGaWxlTmFtZSggU0FGRU1BS0VQVFIoRFMsRFgpICk7Ci0JbmV3bmFtZSA9IEdldFVuaXhGaWxlTmFtZSggU0FGRU1BS0VQVFIoRVMsREkpICk7CisJb2xkbmFtZSA9IERPU19HZXRVbml4RmlsZU5hbWUoIFNBRkVNQUtFUFRSKERTLERYKSApOworCW5ld25hbWUgPSBET1NfR2V0VW5peEZpbGVOYW1lKCBTQUZFTUFLRVBUUihFUyxESSkgKTsKIAogCXJlbmFtZSggb2xkbmFtZSwgbmV3bmFtZSk7CiAJUmVzZXRDZmxhZzsKQEAgLTU2Niw3ICs1NjUsNyBAQAogCiAJZHByaW50Zl9pbnQoc3RkZGViLCJpbnQyMTogbWFrZWRpciAlc1xuIiwgU0FGRU1BS0VQVFIoRFMsRFgpICk7CiAJCi0JaWYgKChkaXJuYW1lID0gR2V0VW5peEZpbGVOYW1lKCBTQUZFTUFLRVBUUihEUyxEWCkgKSk9PSBOVUxMKSB7CisJaWYgKChkaXJuYW1lID0gRE9TX0dldFVuaXhGaWxlTmFtZSggU0FGRU1BS0VQVFIoRFMsRFgpICkpPT0gTlVMTCkgewogCQlBTCA9IENhbk5vdE1ha2VEaXI7CiAJCVNldENmbGFnOwogCQlyZXR1cm47CkBAIC02MDMsNyArNjAyLDcgQEAKIAogCWRwcmludGZfaW50KHN0ZGRlYiwiaW50MjE6IHJlbW92ZWRpciAlc1xuIiwgU0FGRU1BS0VQVFIoRFMsRFgpICk7CiAKLQlpZiAoKGRpcm5hbWUgPSBHZXRVbml4RmlsZU5hbWUoIFNBRkVNQUtFUFRSKERTLERYKSApKT09IE5VTEwpIHsKKwlpZiAoKGRpcm5hbWUgPSBET1NfR2V0VW5peEZpbGVOYW1lKCBTQUZFTUFLRVBUUihEUyxEWCkgKSk9PSBOVUxMKSB7CiAJCUFMID0gQ2FuTm90TWFrZURpcjsKIAkJU2V0Q2ZsYWc7CiAJCXJldHVybjsKQEAgLTYyNCw3ICs2MjMsNyBAQAogCiBzdGF0aWMgdm9pZCBFeGVjUHJvZ3JhbShzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpCiB7Ci0JZXhlY2woIndpbmUiLCBHZXRVbml4RmlsZU5hbWUoIFNBRkVNQUtFUFRSKERTLERYKSkgKTsKKwlleGVjbCgid2luZSIsIERPU19HZXRVbml4RmlsZU5hbWUoIFNBRkVNQUtFUFRSKERTLERYKSkgKTsKIH0KIAogc3RhdGljIHZvaWQgRmluZE5leHQoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICpjb250ZXh0KQpAQCAtNzA0LDcgKzcwMyw3IEBACiAJc3RydWN0IHN0YXQgZmlsZXN0YXQ7CiAJc3RydWN0IHRtICpub3c7CiAKLQlpZiAoKGZpbGVuYW1lID0gR2V0VW5peEZpbGVOYW1lKCBTQUZFTUFLRVBUUihEUyxEWCkgKSk9PSBOVUxMKSB7CisJaWYgKChmaWxlbmFtZSA9IERPU19HZXRVbml4RmlsZU5hbWUoIFNBRkVNQUtFUFRSKERTLERYKSApKT09IE5VTEwpIHsKIAkJQUwgPSBGaWxlTm90Rm91bmQ7CiAJCVNldENmbGFnOwogCQlyZXR1cm47CkBAIC03MjQsNyArNzIzLDcgQEAKIAljaGFyICpmaWxlbmFtZTsKIAlzdHJ1Y3QgdXRpbWJ1ZiBmaWxldGltZTsKIAkKLQlmaWxlbmFtZSA9IEdldFVuaXhGaWxlTmFtZSggU0FGRU1BS0VQVFIoRFMsRFgpICk7CisJZmlsZW5hbWUgPSBET1NfR2V0VW5peEZpbGVOYW1lKCBTQUZFTUFLRVBUUihEUyxEWCkgKTsKIAogCWZpbGV0aW1lLmFjdGltZSA9IDBMOwogCWZpbGV0aW1lLm1vZHRpbWUgPSBmaWxldGltZS5hY3RpbWU7CkBAIC03NDIsNyArNzQxLDcgQEAKIAogCWRwcmludGZfaW50KHN0ZGRlYiwiQ3JlYXRlVGVtcEZpbGUgJXNcbiIsdGVtcCk7CiAKLQloYW5kbGUgPSBvcGVuKEdldFVuaXhGaWxlTmFtZSh0ZW1wKSwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX1JEV1IpOworCWhhbmRsZSA9IG9wZW4oRE9TX0dldFVuaXhGaWxlTmFtZSh0ZW1wKSwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX1JEV1IpOwogCiAJaWYgKGhhbmRsZSA9PSAtMSkgewogCQlBTCA9IFdyaXRlUHJvdGVjdGVkOwpAQCAtNzYwLDcgKzc1OSw3IEBACiB7CiAJaW50IGhhbmRsZTsKIAkKLQlpZiAoKGhhbmRsZSA9IG9wZW4oR2V0VW5peEZpbGVOYW1lKCBTQUZFTUFLRVBUUihEUyxEWCkgKSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUikpID09IC0xKSB7CisJaWYgKChoYW5kbGUgPSBvcGVuKERPU19HZXRVbml4RmlsZU5hbWUoIFNBRkVNQUtFUFRSKERTLERYKSApLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSKSkgPT0gLTEpIHsKIAkJQUwgPSBXcml0ZVByb3RlY3RlZDsKIAkJU2V0Q2ZsYWc7CiAJCXJldHVybjsKQEAgLTk2MSw3ICs5NjAsNyBAQAogCXsKIAkJc3RyY3B5KHB0ciwgZHAtPmZpbGVuYW1lKTsKIAkJZHByaW50Zl9pbnQoc3RkZGViLCAiaW50MjE6IGRlbGV0ZSBmaWxlICVzXG4iLCB0ZW1wKTsKLQkJLyogdW5saW5rKEdldFVuaXhGaWxlTmFtZSh0ZW1wKSk7ICovCisJCS8qIHVubGluayhET1NfR2V0VW5peEZpbGVOYW1lKHRlbXApKTsgKi8KIAl9CiAJRE9TX2Nsb3NlZGlyKGRwKTsKIAlBTCA9IDA7CkBAIC0xMDczLDcgKzEwNzIsNyBAQAogICBzdHJ1Y3Qgc3RhdCBzOwogICBpbnQgcmVzLGN4OyAKIAotICByZXMgPSBzdGF0KEdldFVuaXhGaWxlTmFtZShmaWxlbmFtZSksICZzKTsKKyAgcmVzID0gc3RhdChET1NfR2V0VW5peEZpbGVOYW1lKGZpbGVuYW1lKSwgJnMpOwogICBpZiAocmVzPT0tMSkKICAgewogICAgIGVycm5vX3RvX2Rvc2VycigpOwpAQCAtMTA5OSw3ICsxMDk4LDcgQEAKIAogaW50IGRvX2ludDIxKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqIGNvbnRleHQpCiB7Ci0gICAgaWYgKE9wdGlvbnMucmVsYXlfZGVidWcpCisgICAgaWYgKGRlYnVnZ2luZ19yZWxheSkKICAgICB7CiAJZnByaW50ZihzdGRkZWIsImludDIxOiBBWCAlMDR4LCBCWCAlMDR4LCBDWCAlMDR4LCBEWCAlMDR4LCAiCiAJICAgICAgICJTSSAlMDR4LCBESSAlMDR4LCBEUyAlMDR4LCBFUyAlMDR4XG4iLApAQCAtMTMzNiw3ICsxMzM1LDcgQEAKIAkgICAgYnJlYWs7CiAJCiAJICBjYXNlIDB4NDE6IC8qICJVTkxJTksiIC0gREVMRVRFIEZJTEUgKi8KLQkJaWYgKHVubGluayggR2V0VW5peEZpbGVOYW1lKCBTQUZFTUFLRVBUUihEUyxEWCkpICkgPT0gLTEpIHsKKwkJaWYgKHVubGluayggRE9TX0dldFVuaXhGaWxlTmFtZSggU0FGRU1BS0VQVFIoRFMsRFgpKSApID09IC0xKSB7CiAJCQllcnJub190b19kb3NlcnIoKTsKIAkJCUFMID0gRXh0ZW5kZWRFcnJvcjsKIAkJCVNldENmbGFnOwpAQCAtMTU5MCw3ICsxNTg5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCURPUzNDYWxsCiAgKi8KLXZvaWQgRE9TM0NhbGwoKQordm9pZCBET1MzQ2FsbCh2b2lkKQogewogICAgIGRvX2ludDIxKChzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKikgX0NPTlRFWFQpOwogICAgIFJldHVybkZyb21SZWdpc3RlckZ1bmMoKTsKZGlmZiAtLWdpdCBhL21pc2NlbXUvaW50MjUuYyBiL21pc2NlbXUvaW50MjUuYwppbmRleCA2N2MyZWM2Li41NGNkYmM2IDEwMDY0NAotLS0gYS9taXNjZW11L2ludDI1LmMKKysrIGIvbWlzY2VtdS9pbnQyNS5jCkBAIC0xLDEyICsxLDEzIEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICJyZWdpc3RlcnMuaCIKICNpbmNsdWRlICJtc2Rvcy5oIgogI2luY2x1ZGUgInNlZ21lbS5oIgogI2luY2x1ZGUgIndpbmUuaCIKKyNpbmNsdWRlICJtaXNjZW11LmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKIC8qICNkZWZpbmUgREVCVUdfSU5UICovCi0vKiAjdW5kZWYgIERFQlVHX0lOVCAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKIGludCBkb19pbnQyNShzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpCkBAIC0yMyw4ICsyNCw4IEBACiAJCWJlZ2luID0gRFg7CiAJCWxlbmd0aCA9IENYOwogCX0KLQlkcHJpbnRmX2ludChzdGRuaW1wLCAiaW50MjU6IGFicyBkaXNrcmVhZCwgZHJpdmUgJWQsIHNlY3RvciAlZCwgIgotCSJjb3VudCAlZCwgYnVmZmVyICVkXG4iLCBFQVggJiAweGZmLCBiZWdpbiwgbGVuZ3RoLCAoaW50KSBkYXRhcHRyKTsKKwlkcHJpbnRmX2ludChzdGRuaW1wLCAiaW50MjU6IGFicyBkaXNrcmVhZCwgZHJpdmUgJWQsIHNlY3RvciAlbGQsICIKKwkiY291bnQgJWxkLCBidWZmZXIgJWRcbiIsIEVBWCAmIDB4ZmYsIGJlZ2luLCBsZW5ndGgsIChpbnQpIGRhdGFwdHIpOwogCiAJbWVtc2V0KGRhdGFwdHIsIDAsIGxlbmd0aCAqIDUxMik7CiAKZGlmZiAtLWdpdCBhL21pc2NlbXUvaW50MjYuYyBiL21pc2NlbXUvaW50MjYuYwppbmRleCAyYjI2MmVkLi5lNmE3ZGE4IDEwMDY0NAotLS0gYS9taXNjZW11L2ludDI2LmMKKysrIGIvbWlzY2VtdS9pbnQyNi5jCkBAIC00LDEzICs0LDExIEBACiAjaW5jbHVkZSAibXNkb3MuaCIKICNpbmNsdWRlICJzZWdtZW0uaCIKICNpbmNsdWRlICJ3aW5lLmgiCisjaW5jbHVkZSAibWlzY2VtdS5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX0lOVCAqLwotLyogI3VuZGVmICBERUJVR19JTlQgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCi12b2lkIEludEJhcmYoaW50IGksIHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqY29udGV4dCk7Ci0KIGludCBkb19pbnQyNihzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpCiB7CiAJQllURSAqZGF0YXB0ciA9IFNBRkVNQUtFUFRSKERTLCBCWCk7CkBAIC0yNiw4ICsyNCw4IEBACiAJCWxlbmd0aCA9IENYOwogCX0KIAkJCi0JZHByaW50Zl9pbnQoc3RkbmltcCwiaW50MjY6IGFicyBkaXNrd3JpdGUsIGRyaXZlICVkLCBzZWN0b3IgJWQsIGNvdW50ICVkLCIKLQkJIiBidWZmZXIgJWRcbiIsIEVBWCAmIDB4ZmYsIGJlZ2luLCBsZW5ndGgsIChpbnQpIGRhdGFwdHIpOworCWRwcmludGZfaW50KHN0ZG5pbXAsImludDI2OiBhYnMgZGlza3dyaXRlLCBkcml2ZSAlZCwgc2VjdG9yICVsZCwgIgorCSJjb3VudCAlbGQsIGJ1ZmZlciAlZFxuIiwgRUFYICYgMHhmZiwgYmVnaW4sIGxlbmd0aCwgKGludCkgZGF0YXB0cik7CiAKIAlSZXNldENmbGFnOwogCmRpZmYgLS1naXQgYS9taXNjZW11L2ludDJhLmMgYi9taXNjZW11L2ludDJhLmMKaW5kZXggNzRlZDYwZi4uNjNlZDExZCAxMDA2NDQKLS0tIGEvbWlzY2VtdS9pbnQyYS5jCisrKyBiL21pc2NlbXUvaW50MmEuYwpAQCAtMiwxMyArMiwxMSBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgIm1zZG9zLmgiCiAjaW5jbHVkZSAid2luZS5oIgorI2luY2x1ZGUgIm1pc2NlbXUuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogLyogI2RlZmluZSBERUJVR19JTlQgKi8KLS8qICN1bmRlZiAgREVCVUdfSU5UICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotdm9pZCBJbnRCYXJmKGludCBpLCBzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpOwotCiBpbnQgZG9faW50MmEoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICpjb250ZXh0KQogewogCXN3aXRjaCgoY29udGV4dC0+c2NfZWF4ID4+IDgpICYgMHhmZikKZGlmZiAtLWdpdCBhL21pc2NlbXUvaW50MmYuYyBiL21pc2NlbXUvaW50MmYuYwppbmRleCBlNDFmZDViLi4yNWQ5YWNkIDEwMDY0NAotLS0gYS9taXNjZW11L2ludDJmLmMKKysrIGIvbWlzY2VtdS9pbnQyZi5jCkBAIC0yLDEyICsyLDExIEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCiAjaW5jbHVkZSAid2luZS5oIgorI2luY2x1ZGUgIm1pc2NlbXUuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogLyogI2RlZmluZSBERUJVR19JTlQgKi8KLS8qICN1bmRlZiAgREVCVUdfSU5UICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotdm9pZCBJbnRCYXJmKGludCBpLCBzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpOwogaW50IGRvX2ludDJmXzE2KHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqY29udGV4dCk7CiAKIGludCBkb19pbnQyZihzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpCmRpZmYgLS1naXQgYS9taXNjZW11L2ludDMxLmMgYi9taXNjZW11L2ludDMxLmMKaW5kZXggZjM4YjM2Mi4uN2FhN2RmZCAxMDA2NDQKLS0tIGEvbWlzY2VtdS9pbnQzMS5jCisrKyBiL21pc2NlbXUvaW50MzEuYwpAQCAtMiw5ICsyLDkgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlICJyZWdpc3RlcnMuaCIKICNpbmNsdWRlICJ3aW5lLmgiCisjaW5jbHVkZSAibWlzY2VtdS5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX0lOVCAqLwotLyogI3VuZGVmICBERUJVR19JTlQgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC00OCw3ICs0OCw4IEBACiAJCWNvbnRleHQtPnNjX2VheCA9IERQTUlfRnJlZVNlbGVjdG9yKGNvbnRleHQtPnNjX2VieCk7CiAJCWJyZWFrOwogCWNhc2UgMHgwMDBDOgotCQlscERlc2MgPSBNQUtFTE9ORyhjb250ZXh0LT5zY19lZGksIGNvbnRleHQtPnNjX2VzKTsKKwkJbHBEZXNjID0gKExQREVTQ1JJUFRPUikgTUFLRUxPTkcoY29udGV4dC0+c2NfZWRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNjX2VzKTsKIAkJY29udGV4dC0+c2NfZWF4ID0gRFBNSV9TZXREZXNjcmlwdG9yKGNvbnRleHQtPnNjX2VieCwgbHBEZXNjKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL21pc2NlbXUvaW9wb3J0cy5jIGIvbWlzY2VtdS9pb3BvcnRzLmMKaW5kZXggZDhiMDlmMy4uZmU4NmZjMSAxMDA2NDQKLS0tIGEvbWlzY2VtdS9pb3BvcnRzLmMKKysrIGIvbWlzY2VtdS9pb3BvcnRzLmMKQEAgLTUsNyArNSw2IEBACiAjaW5jbHVkZSAid2luZS5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX0lOVCAqLwotLyogI3VuZGVmICBERUJVR19JTlQgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiBzdGF0aWMgQllURSBjbW9zYWRkcmVzczsKQEAgLTQyLDYgKzQxLDE4IEBACiAJQVggPSAweGZmZmY7CiB9CiAKK3ZvaWQgaW5wb3J0Yl9hYnMoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICpjb250ZXh0KQoreworCWRwcmludGZfaW50KHN0ZG5pbXAsICJJTzogaW4gKCV4KVxuIiwgKihCWVRFICopKEVJUCsxKSk7CisJQUwgPSAweGZmOworfQorCit2b2lkIGlucG9ydF9hYnMoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICpjb250ZXh0KQoreworCWRwcmludGZfaW50KHN0ZG5pbXAsICJJTzogaW4gKCV4KVxuIiwgKihCWVRFICopKEVJUCsxKSk7CisJQVggPSAweGZmZmY7Cit9CisKIHZvaWQgb3V0cG9ydGIoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICpjb250ZXh0KQogewogCWRwcmludGZfaW50KHN0ZG5pbXAsICJJTzogb3V0YiAoJXgpLCAleFxuIiwgRFgsIEFYKTsKQEAgLTYyLDMgKzczLDEzIEBACiB7CiAJZHByaW50Zl9pbnQoc3RkbmltcCwgIklPOiBvdXQgKCV4KSwgJXhcbiIsIERYLCBBWCk7CiB9CisKK3ZvaWQgb3V0cG9ydGJfYWJzKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqY29udGV4dCkKK3sKKyAgICBkcHJpbnRmX2ludChzdGRuaW1wLCAiSU86IG91dCAoJXgpLCAleFxuIiwgKihCWVRFICopKEVJUCsxKSwgQUwpOworfQorCit2b2lkIG91dHBvcnRfYWJzKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqY29udGV4dCkKK3sKKyAgICBkcHJpbnRmX2ludChzdGRuaW1wLCAiSU86IG91dCAoJXgpLCAleFxuIiwgKihCWVRFICopKEVJUCsxKSwgQVgpOworfQpkaWZmIC0tZ2l0IGEvbWlzY2VtdS9rZXJuZWwuYyBiL21pc2NlbXUva2VybmVsLmMKaW5kZXggYTJhNTU5Zi4uMjdiMDhiNSAxMDA2NDQKLS0tIGEvbWlzY2VtdS9rZXJuZWwuYworKysgYi9taXNjZW11L2tlcm5lbC5jCkBAIC0xLDUgKzEsNyBAQAorLyoKIHN0YXRpYyBjaGFyIFJDU0lkW10gPSAiJElkOiBrZXJuZWwuYyx2IDEuMiAxOTkzLzA3LzA0IDA0OjA0OjIxIHJvb3QgRXhwIHJvb3QgJCI7CiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIFJvYmVydCBKLiBBbXN0YWR0LCAxOTkzIjsKKyovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMjAsNyArMjIsNyBAQAogICAgIGlmIChzZWdtZW50ID09IC0xKQogCXNlZ21lbnQgPSAqKFN0YWNrMTZGcmFtZSArIDYpOwogCi0gICAgaWYgKE9wdGlvbnMucmVsYXlfZGVidWcpCisgICAgaWYgKGRlYnVnZ2luZ19yZWxheSkKIAlmcHJpbnRmKHN0ZGRlYiwiTG9ja1NlZ21lbnQ6IHNlZ21lbnQgJXhcbiIsIHNlZ21lbnQpOwogCiAgICAgcmV0dXJuIHNlZ21lbnQ7CkBAIC0zNSw3ICszNyw3IEBACiAgICAgaWYgKHNlZ21lbnQgPT0gLTEpCiAJc2VnbWVudCA9ICooU3RhY2sxNkZyYW1lICsgNik7CiAKLSAgICBpZiAoT3B0aW9ucy5yZWxheV9kZWJ1ZykKKyAgICBpZiAoZGVidWdnaW5nX3JlbGF5KQogICAgIAlmcHJpbnRmKHN0ZGRlYiwiVW5sb2NrU2VnbWVudDogc2VnbWVudCAleFxuIiwgc2VnbWVudCk7CiAKICAgICByZXR1cm4gc2VnbWVudDsKQEAgLTQ0LDcgKzQ2LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJS0VSTkVMX0luaXRUYXNrCiAgKi8KLUtFUk5FTF9Jbml0VGFzaygpCit2b2lkIEtFUk5FTF9Jbml0VGFzayh2b2lkKQogewogICAgIF9CWCA9IDB4ODE7CiAgICAgX0FYID0gMTsKQEAgLTY2LDcgKzY4LDcgQEAKIGludAogS0VSTkVMX1dhaXRFdmVudChpbnQgdGFzaykKIHsKLSAgICBpZiAoT3B0aW9ucy5yZWxheV9kZWJ1ZykKKyAgICBpZiAoZGVidWdnaW5nX3JlbGF5KQogICAgIAlmcHJpbnRmKHN0ZGRlYiwiV2FpdEV2ZW50OiB0YXNrICVkXG4iLCB0YXNrKTsKICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL211bHRpbWVkaWEvYXVkaW8uYyBiL211bHRpbWVkaWEvYXVkaW8uYwppbmRleCAzZjdjZDRlLi5lMDA1Yjg2IDEwMDY0NAotLS0gYS9tdWx0aW1lZGlhL2F1ZGlvLmMKKysrIGIvbXVsdGltZWRpYS9hdWRpby5jCkBAIC0yLDkgKzIsOSBAQAogICogU2FtcGxlIFdpbmUgRHJpdmVyIGZvciBMaW51eAogICoKICAqIENvcHlyaWdodCAxOTk0IE1hcnRpbiBBeW90dGUKLSAqLworICoKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgTWFydGluIEF5b3R0ZSwgMTk5NCI7Ci0KKyovCiAjaWZuZGVmIFdJTkVMSUIKICNkZWZpbmUgQlVJTFRJTl9NTVNZU1RFTQogI2VuZGlmIApAQCAtMjgsOCArMjgsNiBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgotLyogI2RlZmluZSBERUJVR19NQ0lXQVZFIC8qICovCi0vKiAjdW5kZWYgIERFQlVHX01DSVdBVkUgLyogKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAjaWZkZWYgbGludXgKQEAgLTc5LDcgKzc3LDcgQEAKIAl9IExJTlVYX01DSVdBVkU7CiAKIHN0YXRpYyBMSU5VWF9XQVZFT1VUCVdPdXREZXZbTUFYX1dBVk9VVERSVl07Ci1zdGF0aWMgTElOVVhfV0FWRUlOCQlXSW5EZXZbTUFYX1dBVk9VVERSVl07CitzdGF0aWMgTElOVVhfV0FWRUlOCVdJbkRldltNQVhfV0FWT1VURFJWXTsKIHN0YXRpYyBMSU5VWF9NQ0lXQVZFCU1DSVdhdkRldltNQVhfTUNJV0FWRFJWXTsKICNlbmRpZgogCkBAIC0xOTAsMTQgKzE4OCwxMiBAQAogRFdPUkQgV0FWRV9tY2lPcGVuKERXT1JEIGR3RmxhZ3MsIExQTUNJX1dBVkVfT1BFTl9QQVJNUyBscFBhcm1zKQogewogI2lmZGVmIGxpbnV4Ci0JaW50CQkJaEZpbGU7CiAJVUlOVCAJCXdEZXZJRDsKLQlPRlNUUlVDVAlPRnN0cnVjdDsKIAlMUFBDTVdBVkVGT1JNQVQJbHBXYXZlRm9ybWF0OwogCVdBVkVPUEVOREVTQyAJV2F2ZURlc2M7CiAJRFdPUkQJCWR3UmV0OwogCWNoYXIJCXN0clsxMjhdOwotCUxQU1RSCQlwdHI7CisKIAlkcHJpbnRmX21jaXdhdmUoc3RkZGViLCJXQVZFX21jaU9wZW4oJTA4WCwgJTA4WClcbiIsIGR3RmxhZ3MsIGxwUGFybXMpOwogCWlmIChscFBhcm1zID09IE5VTEwpIHJldHVybiBNQ0lFUlJfSU5URVJOQUw7CiAJd0RldklEID0gbHBQYXJtcy0+d0RldmljZUlEOwpAQCAtNDA2LDcgKzQwMiw4IEBACiAJaW50CQkJY291bnQ7CiAJaW50CQkJc3RhcnQsIGVuZDsKIAlMUFdBVkVIRFIJCWxwV2F2ZUhkcjsKLQlEV09SRAkJZHdSZXQ7CisJRFdPUkQJCQlkd1JldDsKKwogCWRwcmludGZfbWNpd2F2ZShzdGRkZWIsCiAJCSJXQVZFX21jaVJlY29yZCgldSwgJTA4WCwgJTA4WCk7XG4iLCB3RGV2SUQsIGR3RmxhZ3MsIGxwUGFybXMpOwogCWlmIChNQ0lXYXZEZXZbd0RldklEXS5oRmlsZSA9PSAwKSB7CmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL21jaWFuaW0uYyBiL211bHRpbWVkaWEvbWNpYW5pbS5jCmluZGV4IDdhMTkxZDQuLmNlMmRkYzIgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvbWNpYW5pbS5jCisrKyBiL211bHRpbWVkaWEvbWNpYW5pbS5jCkBAIC0yLDkgKzIsOSBAQAogICogU2FtcGxlIE1DSSBBTklNQVRJT04gV2luZSBEcml2ZXIgZm9yIExpbnV4CiAgKgogICogQ29weXJpZ2h0IDE5OTQgTWFydGluIEF5b3R0ZQotICovCisgKgogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBNYXJ0aW4gQXlvdHRlLCAxOTk0IjsKLQorKi8KICNpZm5kZWYgV0lORUxJQgogI2RlZmluZSBCVUlMVElOX01NU1lTVEVNCiAjZW5kaWYgCkBAIC0yMiw4ICsyMiw3IEBACiAjaW5jbHVkZSAiZHJpdmVyLmgiCiAjaW5jbHVkZSAibW1zeXN0ZW0uaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgotLyogI2RlZmluZSBERUJVR19NQ0lBTklNIC8qICovCi0vKiAjdW5kZWYgIERFQlVHX01DSUFOSU0gLyogKi8KKy8qICNkZWZpbmUgREVCVUdfTUNJQU5JTSAqLwogI2RlZmluZSBERUJVR19NQ0lBTklNCiAjaW5jbHVkZSAiZGVidWcuaCIKIApkaWZmIC0tZ2l0IGEvbXVsdGltZWRpYS9tY2ljZGEuYyBiL211bHRpbWVkaWEvbWNpY2RhLmMKaW5kZXggZGUyYTNkOC4uNjc3NTMzNSAxMDA2NDQKLS0tIGEvbXVsdGltZWRpYS9tY2ljZGEuYworKysgYi9tdWx0aW1lZGlhL21jaWNkYS5jCkBAIC0yLDkgKzIsOSBAQAogICogU2FtcGxlIE1DSSBDREFVRElPIFdpbmUgRHJpdmVyIGZvciBMaW51eAogICoKICAqIENvcHlyaWdodCAxOTk0IE1hcnRpbiBBeW90dGUKLSAqLworICoKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgTWFydGluIEF5b3R0ZSwgMTk5NCI7Ci0KKyovCiAjaWZuZGVmIFdJTkVMSUIKICNkZWZpbmUgQlVJTFRJTl9NTVNZU1RFTQogI2VuZGlmIApAQCAtMjIsOCArMjIsNyBAQAogI2luY2x1ZGUgImRyaXZlci5oIgogI2luY2x1ZGUgIm1tc3lzdGVtLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKLS8qICNkZWZpbmUgREVCVUdfQ0RBVURJTyAvKiAqLwotLyogI3VuZGVmICBERUJVR19DREFVRElPIC8qICovCisvKiAjZGVmaW5lIERFQlVHX0NEQVVESU8gKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAjaWZkZWYgbGludXgKZGlmZiAtLWdpdCBhL211bHRpbWVkaWEvbWlkaS5jIGIvbXVsdGltZWRpYS9taWRpLmMKaW5kZXggZDMzNDI5MC4uZGYyNDA0NSAxMDA2NDQKLS0tIGEvbXVsdGltZWRpYS9taWRpLmMKKysrIGIvbXVsdGltZWRpYS9taWRpLmMKQEAgLTIsMTYgKzIsMTYgQEAKICAqIFNhbXBsZSBNSURJIFdpbmUgRHJpdmVyIGZvciBMaW51eAogICoKICAqIENvcHlyaWdodCAxOTk0IE1hcnRpbiBBeW90dGUKLSAqLworICoKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgTWFydGluIEF5b3R0ZSwgMTk5NCI7Ci0KKyovCiAjaWZuZGVmIFdJTkVMSUIKICNkZWZpbmUgQlVJTFRJTl9NTVNZU1RFTQogI2VuZGlmIAogCiAjaWZkZWYgQlVJTFRJTl9NTVNZU1RFTQogCi0jaW5jbHVkZSAic3RkaW8uaCIKKyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgIndpbi5oIgogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJkcml2ZXIuaCIKQEAgLTIwLDggKzIwLDcgQEAKICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KIAogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCi0vKiAjZGVmaW5lIERFQlVHX01JREkgLyogKi8KLS8qICN1bmRlZiAgREVCVUdfTUlESSAvKiAqLworLyogI2RlZmluZSBERUJVR19NSURJICovCiAKICNkZWZpbmUgREVCVUdfTUlESQogI2luY2x1ZGUgImRlYnVnLmgiCmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL21tYXV4LmMgYi9tdWx0aW1lZGlhL21tYXV4LmMKaW5kZXggZWY2OWVlZC4uYTNhYjBhOCAxMDA2NDQKLS0tIGEvbXVsdGltZWRpYS9tbWF1eC5jCisrKyBiL211bHRpbWVkaWEvbW1hdXguYwpAQCAtMiw5ICsyLDkgQEAKICAqIFNhbXBsZSBBVVhJTEFSWSBXaW5lIERyaXZlciBmb3IgTGludXgKICAqCiAgKiBDb3B5cmlnaHQgMTk5NCBNYXJ0aW4gQXlvdHRlCi0gKi8KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIE1hcnRpbiBBeW90dGUsIDE5OTQiOwotCisqLwogI2lmbmRlZiBXSU5FTElCCiAjZGVmaW5lIEJVSUxUSU5fTU1TWVNURU0KICNlbmRpZiAKZGlmZiAtLWdpdCBhL211bHRpbWVkaWEvbW1zeXN0ZW0uYyBiL211bHRpbWVkaWEvbW1zeXN0ZW0uYwppbmRleCBlOTMyMmZkLi4yOGY2N2NiIDEwMDY0NAotLS0gYS9tdWx0aW1lZGlhL21tc3lzdGVtLmMKKysrIGIvbXVsdGltZWRpYS9tbXN5c3RlbS5jCkBAIC0yLDkgKzIsOSBAQAogICogTU1TWVRFTSBmdW5jdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgMTk5MyBNYXJ0aW4gQXlvdHRlCi0gKi8KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIE1hcnRpbiBBeW90dGUsIDE5OTMiOwotCisqLwogI2lmbmRlZiBXSU5FTElCCiAKICNpbmNsdWRlIDxzdGRpby5oPgpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9iaXRibHQuYyBiL29iamVjdHMvYml0Ymx0LmMKaW5kZXggZmE1OGRhZC4uZTk0NWZhZiAxMDA2NDQKLS0tIGEvb2JqZWN0cy9iaXRibHQuYworKysgYi9vYmplY3RzL2JpdGJsdC5jCkBAIC0yLDMwICsyLDI2IEBACiAgKiBHREkgYml0LWJsaXQgb3BlcmF0aW9ucwogICoKICAqIENvcHlyaWdodCAxOTkzIEFsZXhhbmRyZSBKdWxsaWFyZAotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5MyI7Ci0KKyovCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KLQorI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNpbmNsdWRlICJkYy5oIgogI2luY2x1ZGUgImdkaS5oIgorI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAibWV0YWZpbGUuaCIKICNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKIC8qICNkZWZpbmUgREVCVUdfR0RJICovCi0vKiAjdW5kZWYgIERFQlVHX0dESSAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKLWV4dGVybiBjb25zdCBpbnQgRENfWFJPUGZ1bmN0aW9uW107Ci1leHRlcm4gQ29sb3JtYXAgQ09MT1JfV2luQ29sb3JtYXA7Ci0KICNkZWZpbmUgTUlOKGEsYikgKChhKSA8IChiKSA/IChhKSA6IChiKSkKICNkZWZpbmUgTUFYKGEsYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBCSVRCTFRfR2V0SW1hZ2UKICAqLwpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9iaXRtYXAuYyBiL29iamVjdHMvYml0bWFwLmMKaW5kZXggMTRiZGQxZi4uNzc2NjgyNiAxMDA2NDQKLS0tIGEvb2JqZWN0cy9iaXRtYXAuYworKysgYi9vYmplY3RzL2JpdG1hcC5jCkBAIC0yLDMzICsyLDMwIEBACiAgKiBHREkgYml0bWFwIG9iamVjdHMKICAqCiAgKiBDb3B5cmlnaHQgMTk5MyBBbGV4YW5kcmUgSnVsbGlhcmQKLSAqLwotCisgKgogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBBbGV4YW5kcmUgSnVsbGlhcmQsIDE5OTMiOwotCisqLwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8WDExL1hsaWIuaD4KICNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KICNpbmNsdWRlICJnZGkuaCIKKyNpbmNsdWRlICJkYy5oIgogI2luY2x1ZGUgImJpdG1hcC5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX0dESSAgICAqLwotLyogI3VuZGVmICBERUJVR19HREkgICAgKi8KLS8qICNkZWZpbmUgREVCVUdfQklUTUFQICovCiAvKiAjZGVmaW5lIERFQlVHX0JJVE1BUCAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKICAgLyogR0NzIHVzZWQgZm9yIEImVyBhbmQgY29sb3IgYml0bWFwIG9wZXJhdGlvbnMgKi8KIEdDIEJJVE1BUF9tb25vR0MgPSAwLCBCSVRNQVBfY29sb3JHQyA9IDA7CiAKLWV4dGVybiB2b2lkIERDX0luaXREQyggSERDIGhkYyApOyAgICAgICAgICAgICAgICAvKiBvYmplY3RzL2RjLmMgKi8KIGV4dGVybiB2b2lkIENMSVBQSU5HX1VwZGF0ZUdDUmVnaW9uKCBEQyAqIGRjICk7ICAvKiBvYmplY3RzL2NsaXBwaW5nLmMgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQklUTUFQX0luaXQKICAqLwotQk9PTCBCSVRNQVBfSW5pdCgpCitCT09MIEJJVE1BUF9Jbml0KHZvaWQpCiB7CiAgICAgUGl4bWFwIHRtcFBpeG1hcDsKICAgICAKZGlmZiAtLWdpdCBhL29iamVjdHMvYnJ1c2guYyBiL29iamVjdHMvYnJ1c2guYwppbmRleCA0NDAzMzUzLi43NWRlNWQ2IDEwMDY0NAotLS0gYS9vYmplY3RzL2JydXNoLmMKKysrIGIvb2JqZWN0cy9icnVzaC5jCkBAIC0yLDE3ICsyLDE2IEBACiAgKiBHREkgYnJ1c2ggb2JqZWN0cwogICoKICAqIENvcHlyaWdodCAxOTkzIEFsZXhhbmRyZSBKdWxsaWFyZAotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5MyI7CisqLwogCiAjaW5jbHVkZSAiZ2RpLmgiCiAjaW5jbHVkZSAiYml0bWFwLmgiCiAjaW5jbHVkZSAicHJvdG90eXBlcy5oIgogI2luY2x1ZGUgIm1ldGFmaWxlLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKLS8qICNkZWZpbmUgREVCVUdfR0RJICovCi0vKiAjdW5kZWYgIERFQlVHX0dESSAqLworI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogI2RlZmluZSBOQl9IQVRDSF9TVFlMRVMgIDYKQEAgLTI3LDggKzI2LDYgQEAKICAgICB7IDB4ODEsIDB4NDIsIDB4MjQsIDB4MTgsIDB4MTgsIDB4MjQsIDB4NDIsIDB4ODEgfSAgLyogSFNfRElBR0NST1NTICAqLwogfTsKIAotZXh0ZXJuIFdPUkQgQ09MT1JfVG9QaHlzaWNhbCggREMgKmRjLCBDT0xPUlJFRiBjb2xvciApOwotCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENyZWF0ZUJydXNoSW5kaXJlY3QgICAgKEdESS41MCkKQEAgLTE4MCw3ICsxNzcsNyBAQAogICovCiBzdGF0aWMgdm9pZCBCUlVTSF9TZWxlY3RTb2xpZEJydXNoKCBEQyAqZGMsIENPTE9SUkVGIGNvbG9yICkKIHsKLSAgICBpZiAoKGRjLT53LmJpdHNQZXJQaXhlbCA+IDEpICYmICFDT0xPUl9Jc1NvbGlkKCBjb2xvciApKQorICAgIGlmICgoZGMtPncuYml0c1BlclBpeGVsID4gMSkgJiYgKHNjcmVlbkRlcHRoIDw9IDgpICYmICFDT0xPUl9Jc1NvbGlkKCBjb2xvciApKQogICAgIHsKIAkgIC8qIERpdGhlcmVkIGJydXNoICovCiAJZGMtPnUueC5icnVzaC5waXhtYXAgPSBESVRIRVJfRGl0aGVyQ29sb3IoIGRjLCBjb2xvciApOwpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9jbGlwcGluZy5jIGIvb2JqZWN0cy9jbGlwcGluZy5jCmluZGV4IGQ2ZDhiYmEuLmQwYzNlMTMgMTAwNjQ0Ci0tLSBhL29iamVjdHMvY2xpcHBpbmcuYworKysgYi9vYmplY3RzL2NsaXBwaW5nLmMKQEAgLTIsMTAgKzIsOSBAQAogICogREMgY2xpcHBpbmcgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IDE5OTMgQWxleGFuZHJlIEp1bGxpYXJkCi0gKi8KLQorICoKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgQWxleGFuZHJlIEp1bGxpYXJkLCAxOTkzIjsKLQorKi8KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImdkaS5oIgogI2luY2x1ZGUgIm1ldGFmaWxlLmgiCmRpZmYgLS1naXQgYS9vYmplY3RzL2NvbG9yLmMgYi9vYmplY3RzL2NvbG9yLmMKaW5kZXggNTQ1MTY5Yi4uNTAwZWFjMiAxMDA2NDQKLS0tIGEvb2JqZWN0cy9jb2xvci5jCisrKyBiL29iamVjdHMvY29sb3IuYwpAQCAtMiwxNiArMiwxNiBAQAogICogQ29sb3IgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IDE5OTMgQWxleGFuZHJlIEp1bGxpYXJkCi0gKi8KLQorICoKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgQWxleGFuZHJlIEp1bGxpYXJkLCAxOTkzIjsKLQorKi8KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAid2luZG93cy5oIgogI2luY2x1ZGUgIm9wdGlvbnMuaCIKICNpbmNsdWRlICJnZGkuaCIKKyNpbmNsdWRlICJjb2xvci5oIgogCiAKIENvbG9ybWFwIENPTE9SX1dpbkNvbG9ybWFwID0gMDsKQEAgLTkxLDcgKzkxLDcgQEAKICAqCiAgKiBDcmVhdGUgdGhlIHN5c3RlbSBwYWxldHRlLgogICovCi1zdGF0aWMgSFBBTEVUVEUgQ09MT1JfSW5pdFBhbGV0dGUoKQorc3RhdGljIEhQQUxFVFRFIENPTE9SX0luaXRQYWxldHRlKHZvaWQpCiB7CiAgICAgaW50IGksIHNpemU7CiAgICAgWENvbG9yIGNvbG9yOwpAQCAtMTYyLDcgKzE2Miw3IEBACiAgKgogICogSW5pdGlhbGl6ZSBjb2xvciBtYXAgYW5kIHN5c3RlbSBwYWxldHRlLgogICovCi1IUEFMRVRURSBDT0xPUl9Jbml0KCkKK0hQQUxFVFRFIENPTE9SX0luaXQodm9pZCkKIHsKICAgICBWaXN1YWwgKiB2aXN1YWwgPSBEZWZhdWx0VmlzdWFsKCBkaXNwbGF5LCBEZWZhdWx0U2NyZWVuKGRpc3BsYXkpICk7CiAgICAgCkBAIC0yMjcsNyArMjI3LDcgQEAKICAqCiAgKiBSZXR1cm4gdGhlIHBoeXNpY2FsIGNvbG9yIGNsb3Nlc3QgdG8gJ2NvbG9yJy4KICAqLwotV09SRCBDT0xPUl9Ub1BoeXNpY2FsKCBEQyAqZGMsIENPTE9SUkVGIGNvbG9yICkKK2ludCBDT0xPUl9Ub1BoeXNpY2FsKCBEQyAqZGMsIENPTE9SUkVGIGNvbG9yICkKIHsKICAgICBXT1JEIGluZGV4ID0gMDsKICAgICBXT1JEICptYXBwaW5nOwpAQCAtMjkyLDcgKzI5Miw4IEBACiAgICAgV09SRCBpbmRleDsKICAgICBEQyAqZGMgPSAoREMgKikgR0RJX0dldE9ialB0ciggaGRjLCBEQ19NQUdJQyApOwogICAgIGlmICghZGMpIHJldHVybiAwOwotICAgIGluZGV4ID0gQ09MT1JfVG9QaHlzaWNhbCggZGMsIGNvbG9yICYgMHhmZmZmZmYgKTsKKyAgICBpZiAoc2NyZWVuRGVwdGggPiA4KSByZXR1cm4gY29sb3I7CisgICAgaW5kZXggPSAoV09SRCkoQ09MT1JfVG9QaHlzaWNhbCggZGMsIGNvbG9yICYgMHhmZmZmZmYgKSAmIDB4ZmZmZik7CiAgICAgcmV0dXJuIFBBTEVUVEVJTkRFWCggaW5kZXggKTsKIH0KIApkaWZmIC0tZ2l0IGEvb2JqZWN0cy9kYy5jIGIvb2JqZWN0cy9kYy5jCmluZGV4IGEzODkwNmMuLjg3ZDgwMDYgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZGMuYworKysgYi9vYmplY3RzL2RjLmMKQEAgLTIsMjkgKzIsMjMgQEAKICAqIEdESSBEZXZpY2UgQ29udGV4dCBmdW5jdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgMTk5MyBBbGV4YW5kcmUgSnVsbGlhcmQKLSAqLwotCisgKgogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBBbGV4YW5kcmUgSnVsbGlhcmQsIDE5OTMiOwotCisqLwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgImdkaS5oIgogI2luY2x1ZGUgImJpdG1hcC5oIgogI2luY2x1ZGUgIm1ldGFmaWxlLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKLS8qICNkZWZpbmUgREVCVUdfREMgLyogKi8KLS8qICN1bmRlZiAgREVCVUdfREMgLyogKi8KKyNpbmNsdWRlICJjb2xvci5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0KKyNpbmNsdWRlICJmb250LmgiCiAKIHN0YXRpYyBEZXZpY2VDYXBzICogZGlzcGxheURldkNhcHMgPSBOVUxMOwogCiBleHRlcm4gY29uc3QgV0lOX0RDX0lORk8gRENWQUxfZGVmYXVsdFZhbHVlczsKLQogZXh0ZXJuIHZvaWQgQ0xJUFBJTkdfVXBkYXRlR0NSZWdpb24oIERDICogZGMgKTsgICAgIC8qIG9iamVjdHMvY2xpcHBpbmcuYyAqLwotZXh0ZXJuIFdPUkQgQ09MT1JfVG9QaHlzaWNhbCggREMgKmRjLCBDT0xPUlJFRiBjb2xvciApOy8qIG9iamVjdHMvY29sb3IuYyAqLwotZXh0ZXJuIHZvaWQgQ09MT1JfU2V0TWFwcGluZyggREMgKmRjLCBIQU5ETEUsIFdPUkQgKTsgIC8qIG9iamVjdHMvY29sb3IuYyAqLwotCiAKICAgLyogUk9QIGNvZGUgdG8gR0MgZnVuY3Rpb24gY29udmVyc2lvbiAqLwogY29uc3QgaW50IERDX1hST1BmdW5jdGlvblsxNl0gPQpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9kY3ZhbHVlcy5jIGIvb2JqZWN0cy9kY3ZhbHVlcy5jCmluZGV4IDJkZWYwNWIuLjgwMWI2ZGYgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZGN2YWx1ZXMuYworKysgYi9vYmplY3RzL2RjdmFsdWVzLmMKQEAgLTIsMTAgKzIsOSBAQAogICogREMgZGV2aWNlLWluZGVwZW5kZW50IEdldC9TZXRYWFggZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IDE5OTMgQWxleGFuZHJlIEp1bGxpYXJkCi0gKi8KLQorICoKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgQWxleGFuZHJlIEp1bGxpYXJkLCAxOTkzIjsKLQorKi8KICNpbmNsdWRlICJnZGkuaCIKICNpbmNsdWRlICJtZXRhZmlsZS5oIgogCmRpZmYgLS1naXQgYS9vYmplY3RzL2RpYi5jIGIvb2JqZWN0cy9kaWIuYwppbmRleCBhZmI3OWJlLi5kODQxZjAxIDEwMDY0NAotLS0gYS9vYmplY3RzL2RpYi5jCisrKyBiL29iamVjdHMvZGliLmMKQEAgLTIsMjcgKzIsMzcgQEAKICAqIEdESSBkZXZpY2UgaW5kZXBlbmRlbnQgYml0bWFwcwogICoKICAqIENvcHlyaWdodCAxOTkzIEFsZXhhbmRyZSBKdWxsaWFyZAotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5MyI7Ci0KKyovCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2luY2x1ZGUgImRjLmgiCiAjaW5jbHVkZSAiZ2RpLmgiCiAjaW5jbHVkZSAiYml0bWFwLmgiCiAjaW5jbHVkZSAiaWNvbi5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCi0vKiAjZGVmaW5lIERFQlVHX0lDT04gLyogKi8KLS8qICN1bmRlZiAgREVCVUdfSUNPTiAvKiAqLwotLyogI2RlZmluZSBERUJVR19CSVRNQVAgLyogKi8KLS8qICN1bmRlZiAgREVCVUdfQklZTUFQIC8qICovCisjaW5jbHVkZSAiY29sb3IuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCi1leHRlcm4gY29uc3QgaW50IERDX1hST1BmdW5jdGlvbltdOwotCi1leHRlcm4gV09SRCBDT0xPUl9Ub1BoeXNpY2FsKCBEQyAqZGMsIENPTE9SUkVGIGNvbG9yICk7ICAvKiBjb2xvci5jICovCitzdGF0aWMgaW50IGdldF9icHAoaW50IGRlcHRoKQoreworCXN3aXRjaChkZXB0aCkgeworCQljYXNlIDQ6CisJCWNhc2UgODoJCisJCQlyZXR1cm4gMTsKKwkJY2FzZSAxNToKKwkJY2FzZSAxNjoKKwkJCXJldHVybiAyOworCQljYXNlIDI0OgorCQkJcmV0dXJuIDQ7CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKHN0ZGVyciwgIkRJQjogdW5zdXBwb3J0ZWQgZGVwdGggJWQhXG4iLCBkZXB0aCk7CisJCQlleGl0KDEpOworCX0JCQorfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBESUJfQml0bWFwSW5mb1NpemUKQEAgLTUxLDkgKzYxLDggQEAKIHsKICAgICBleHRlcm4gdm9pZCBfWEluaXRJbWFnZUZ1bmNQdHJzKCBYSW1hZ2UqICk7CiAgICAgWEltYWdlICogaW1hZ2U7Ci0gICAgaW50IGJ5dGVzUGVyTGluZSA9ICgoYm1wLT5iaUJpdENvdW50ID09IDI0ID8gMzIgOiBibXAtPmJpQml0Q291bnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAqIGJtcC0+YmlXaWR0aCArIDMxKSAvIDMyICogNDsKLSAgICAKKyAgICBpbnQgYnl0ZXNQZXJMaW5lID0gYm1wLT5iaVdpZHRoICogZ2V0X2JwcChibXAtPmJpQml0Q291bnQpOworCiAgICAgaW1hZ2UgPSBYQ3JlYXRlSW1hZ2UoIGRpc3BsYXksIERlZmF1bHRWaXN1YWxPZlNjcmVlbiggc2NyZWVuICksCiAJCQkgIGJtcC0+YmlCaXRDb3VudCwgWlBpeG1hcCwgMCwgYm1wRGF0YSwKIAkJCSAgYm1wLT5iaVdpZHRoLCBibXAtPmJpSGVpZ2h0LCAzMiwgYnl0ZXNQZXJMaW5lICk7CkBAIC03Miw3ICs4MSw3IEBACiAgKiBTZXRESUJpdHMgZm9yIGEgMS1iaXQgZGVlcCBESUIuCiAgKi8KIHN0YXRpYyB2b2lkIERJQl9TZXRJbWFnZUJpdHNfMSggV09SRCBsaW5lcywgQllURSAqYml0cywgV09SRCB3aWR0aCwKLQkJCSAgICAgICAgV09SRCAqY29sb3JzLCBYSW1hZ2UgKmJtcEltYWdlICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb2xvcnMsIFhJbWFnZSAqYm1wSW1hZ2UgKQogewogICAgIFdPUkQgaSwgeDsKICAgICBCWVRFIHBhZCwgcGl4OwpAQCAtMTE2LDcgKzEyNSw3IEBACiAgKiBTZXRESUJpdHMgZm9yIGEgNC1iaXQgZGVlcCBESUIuCiAgKi8KIHN0YXRpYyB2b2lkIERJQl9TZXRJbWFnZUJpdHNfNCggV09SRCBsaW5lcywgQllURSAqYml0cywgV09SRCB3aWR0aCwKLQkJCSAgICAgICAgV09SRCAqY29sb3JzLCBYSW1hZ2UgKmJtcEltYWdlICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb2xvcnMsIFhJbWFnZSAqYm1wSW1hZ2UgKQogewogICAgIFdPUkQgaSwgeDsKICAgICBCWVRFIHBhZDsKQEAgLTE1MCw3ICsxNTksNyBAQAogICogU2V0RElCaXRzIGZvciBhIDQtYml0IGRlZXAgY29tcHJlc3NlZCBESUIuCiAgKi8KIHN0YXRpYyB2b2lkIERJQl9TZXRJbWFnZUJpdHNfUkxFNCggV09SRCBsaW5lcywgQllURSAqYml0cywgV09SRCB3aWR0aCwKLQkJCSAgICAgICAgV09SRCAqY29sb3JzLCBYSW1hZ2UgKmJtcEltYWdlICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb2xvcnMsIFhJbWFnZSAqYm1wSW1hZ2UgKQogewogCWludCB4ID0gMCwgYywgbGVuZ3RoOwogCUJZVEUgKmJlZ2luID0gYml0czsKQEAgLTIwOSw3ICsyMTgsNyBAQAogICogU2V0RElCaXRzIGZvciBhbiA4LWJpdCBkZWVwIERJQi4KICAqLwogc3RhdGljIHZvaWQgRElCX1NldEltYWdlQml0c184KCBXT1JEIGxpbmVzLCBCWVRFICpiaXRzLCBXT1JEIHdpZHRoLAotCQkJICAgICAgICBXT1JEICpjb2xvcnMsIFhJbWFnZSAqYm1wSW1hZ2UgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvbG9ycywgWEltYWdlICpibXBJbWFnZSApCiB7CiAgICAgV09SRCB4OwogICAgIEJZVEUgcGFkID0gKDQgLSAod2lkdGggJiAzKSkgJiAzOwpAQCAtMjU2LDcgKzI2NSw3IEBACiBzdGF0aWMgdm9pZCBESUJfU2V0SW1hZ2VCaXRzX1JMRTgoV09SRCBsaW5lcywgCiAJCQkJICBCWVRFICpiaXRzLCAKIAkJCQkgIFdPUkQgd2lkdGgsCi0JCQkJICBXT1JEICpjb2xvcnMsIAorCQkJCSAgaW50ICpjb2xvcnMsIAogCQkJCSAgWEltYWdlICpibXBJbWFnZSkKIHsKICAgICBpbnQgeDsJCQkvKiBYLXBvc2l0b24gb24gZWFjaCBsaW5lLiAgSW5jcmVhc2VzLiAqLwpAQCAtNDM3LDcgKzQ0Niw3IEBACiAJCQkgICAgIERyYXdhYmxlIGRyYXdhYmxlLCBHQyBnYywgaW50IHhTcmMsIGludCB5U3JjLAogCQkJICAgICBpbnQgeERlc3QsIGludCB5RGVzdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0ICkKIHsKLSAgICBXT1JEICpjb2xvck1hcHBpbmc7CisgICAgaW50ICpjb2xvck1hcHBpbmc7CiAgICAgWEltYWdlICpibXBJbWFnZTsKICAgICB2b2lkICpibXBEYXRhOwogICAgIGludCBpLCBjb2xvcnMsIHdpZHRoQnl0ZXM7CkBAIC00NDksNyArNDU4LDcgQEAKICAgICB7CiAJY29sb3JzID0gaW5mby0+Ym1pSGVhZGVyLmJpQ2xyVXNlZDsKIAlpZiAoIWNvbG9ycykgY29sb3JzID0gMSA8PCBpbmZvLT5ibWlIZWFkZXIuYmlCaXRDb3VudDsKLQlpZiAoIShjb2xvck1hcHBpbmcgPSAoV09SRCAqKW1hbGxvYyggY29sb3JzICogc2l6ZW9mKFdPUkQpICkpKQorCWlmICghKGNvbG9yTWFwcGluZyA9IChpbnQgKiltYWxsb2MoIGNvbG9ycyAqIHNpemVvZihpbnQpICkpKQogCSAgICByZXR1cm4gMDsKIAlpZiAoY29sb3J1c2UgPT0gRElCX1JHQl9DT0xPUlMpCiAJewpAQCAtNDY4LDkgKzQ3Nyw4IEBACiAgICAgfQogCiAgICAgICAvKiBUcmFuc2ZlciB0aGUgcGl4ZWxzICovCisgICAgd2lkdGhCeXRlcyA9IGluZm8tPmJtaUhlYWRlci5iaVdpZHRoICogZ2V0X2JwcChkZXB0aCk7CiAKLSAgICB3aWR0aEJ5dGVzID0gKChkZXB0aCA9PSAyNCA/IDMyIDogZGVwdGgpICogaW5mby0+Ym1pSGVhZGVyLmJpV2lkdGggKyAzMSkKLSAgICAgICAgICAgICAgICAgIC8gMzIgKiA0OwogICAgIGJtcERhdGEgID0gbWFsbG9jKCBsaW5lcyAqIHdpZHRoQnl0ZXMgKTsKICAgICBibXBJbWFnZSA9IFhDcmVhdGVJbWFnZSggZGlzcGxheSwgRGVmYXVsdFZpc3VhbE9mU2NyZWVuKHNjcmVlbiksCiAJCQkgICAgIGRlcHRoLCBaUGl4bWFwLCAwLCBibXBEYXRhLApAQCAtNjU1LDcgKzY2Myw3IEBACiAgICAgQklUTUFQCWJtOwogICAgIEhCSVRNQVAJaEJpdFRlbXA7CiAgICAgSERDCQloTWVtREM7Ci0gICAgSERDCQloTWVtREMyOworCiAgICAgZHByaW50Zl9pY29uKHN0ZGRlYiwiRHJhd0ljb24oJTA0WCwgJWQsICVkLCAlMDRYKSBcbiIsIGhEQywgeCwgeSwgaEljb24pOwogICAgIGlmIChoSWNvbiA9PSAoSElDT04pTlVMTCkgcmV0dXJuIEZBTFNFOwogICAgIGxwaWNvID0gKElDT05BTExPQyAqKUdsb2JhbExvY2soaEljb24pOwpAQCAtNjc0LDE3ICs2ODIsMTcgQEAKICAgICBkcHJpbnRmX2ljb24oc3RkZGViLCJEcmF3SWNvbiAvIGJpdG1hcCBibVdpZHRoPSVkIGJtSGVpZ2h0PSVkXG4iLCAKIAkJIGJtLmJtV2lkdGgsIGJtLmJtSGVpZ2h0KTsKICAgICBoTWVtREMgPSBDcmVhdGVDb21wYXRpYmxlREMoaERDKTsKLSNpZmRlZiBERUJVR19JQ09OCisgICAgaWYoZGVidWdnaW5nX2ljb24pewogICAgIGhCaXRUZW1wID0gU2VsZWN0T2JqZWN0KGhNZW1EQywgbHBpY28tPmhCaXRtYXApOwogICAgIEJpdEJsdChoREMsIHgsIHksIGJtLmJtV2lkdGgsIGJtLmJtSGVpZ2h0LCBoTWVtREMsIDAsIDAsIFNSQ0NPUFkpOwogICAgIFNlbGVjdE9iamVjdChoTWVtREMsIGxwaWNvLT5oQml0TWFzayk7CiAgICAgQml0Qmx0KGhEQywgeCwgeSArIGJtLmJtSGVpZ2h0LCBibS5ibVdpZHRoLCBibS5ibUhlaWdodCwgaE1lbURDLCAwLCAwLCBTUkNDT1BZKTsKLSNlbHNlCisgICAgfWVsc2V7CiAgICAgaEJpdFRlbXAgPSBTZWxlY3RPYmplY3QoaE1lbURDLCBscGljby0+aEJpdE1hc2spOwogICAgIEJpdEJsdChoREMsIHgsIHksIGJtLmJtV2lkdGgsIGJtLmJtSGVpZ2h0LCBoTWVtREMsIDAsIDAsIFNSQ0FORCk7CiAgICAgU2VsZWN0T2JqZWN0KGhNZW1EQywgbHBpY28tPmhCaXRtYXApOwogICAgIEJpdEJsdChoREMsIHgsIHksIGJtLmJtV2lkdGgsIGJtLmJtSGVpZ2h0LCBoTWVtREMsIDAsIDAsIFNSQ1BBSU5UKTsKLSNlbmRpZgorICAgIH0KICAgICBTZWxlY3RPYmplY3QoIGhNZW1EQywgaEJpdFRlbXAgKTsKICAgICBEZWxldGVEQyhoTWVtREMpOwogICAgIHJldHVybiBUUlVFOwpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9kaXRoZXIuYyBiL29iamVjdHMvZGl0aGVyLmMKaW5kZXggNTIxMDEwNi4uZDkwMzk2ZCAxMDA2NDQKLS0tIGEvb2JqZWN0cy9kaXRoZXIuYworKysgYi9vYmplY3RzL2RpdGhlci5jCkBAIC0yLDE0ICsyLDE0IEBACiAgKiBEaXRoZXJpbmcgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IDE5OTQgQWxleGFuZHJlIEp1bGxpYXJkCi0gKi8KLQorICoKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgQWxleGFuZHJlIEp1bGxpYXJkLCAxOTk0IjsKKyovCiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgotCisjaW5jbHVkZSAiY29sb3IuaCIKICNpbmNsdWRlICJnZGkuaCIKICNpbmNsdWRlICJiaXRtYXAuaCIKIApAQCAtNzAsOSArNzAsNiBAQAogICAgIDE1ICAvKiBmZmZmZmYgLT4gZmZmZmZmICovCiB9OwogCi0gICAvKiBNYXAgYW4gRUdBIGluZGV4ICgwLi4xNSkgdG8gYSBwaXhlbCB2YWx1ZSAqLwotZXh0ZXJuIGludCBDT0xPUl9tYXBFR0FQaXhlbFsxNl07ICAvKiBpbiBjb2xvci5jICovCi0KICNkZWZpbmUgUElYRUxfVkFMVUUocixnLGIpIFwKICAgICBDT0xPUl9tYXBFR0FQaXhlbFtFR0FtYXBwaW5nWygocikqUFJJTUFSWV9MRVZFTFMrKGcpKSpQUklNQVJZX0xFVkVMUysoYildXQogCkBAIC04Niw3ICs4Myw3IEBACiAgKgogICogQ3JlYXRlIHRoZSBYIGltYWdlIHVzZWQgZm9yIGRpdGhlcmluZy4KICAqLwotQk9PTCBESVRIRVJfSW5pdCgpCitCT09MIERJVEhFUl9Jbml0KHZvaWQpCiB7CiAgICAgaW50IGJ5dGVzX3Blcl9saW5lID0gKHNjcmVlbkRlcHRoICogTUFUUklYX1NJWkUgKyA3KSAvIDg7CiAgICAgaWYgKCEoaW1hZ2VEYXRhID0gKGNoYXIgKikgbWFsbG9jKCBieXRlc19wZXJfbGluZSAqIE1BVFJJWF9TSVpFICkpKQpAQCAtMTE2LDcgKzExMyw3IEBACiAJaW50IGIgPSBHZXRCVmFsdWUoIGNvbG9yICkgKiBESVRIRVJfTEVWRUxTOwogCWNvbnN0IGludCAqcG1hdHJpeCA9IGRpdGhlcl9tYXRyaXg7CiAKLQlXT1JEICptYXBwaW5nID0gKFdPUkQgKikgR0RJX0hFQVBfQUREUiggZGMtPnUueC5wYWwuaE1hcHBpbmcgKTsKKy8qCVdPUkQgKm1hcHBpbmcgPSAoV09SRCAqKSBHRElfSEVBUF9BRERSKCBkYy0+dS54LnBhbC5oTWFwcGluZyApOyovCiAKIAlmb3IgKHkgPSAwOyB5IDwgTUFUUklYX1NJWkU7IHkrKykKIAl7CmRpZmYgLS1naXQgYS9vYmplY3RzL2ZvbnQuYyBiL29iamVjdHMvZm9udC5jCmluZGV4IGYwNTFiOGEuLmYwMzk2MmYgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZm9udC5jCisrKyBiL29iamVjdHMvZm9udC5jCkBAIC0yLDkgKzIsOSBAQAogICogR0RJIGZvbnQgb2JqZWN0cwogICoKICAqIENvcHlyaWdodCAxOTkzIEFsZXhhbmRyZSBKdWxsaWFyZAotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5MyI7CisqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTEyLDkgKzEyLDEwIEBACiAjaW5jbHVkZSA8WDExL1hhdG9tLmg+CiAjaW5jbHVkZSAidXNlci5oIgogI2luY2x1ZGUgImdkaS5oIgorI2luY2x1ZGUgIm1ldGFmaWxlLmgiCisjaW5jbHVkZSAiY2FsbGJhY2suaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogLyogI2RlZmluZSBERUJVR19GT05UICovCi0vKiAjdW5kZWYgIERFQlVHX0ZPTlQgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAjZGVmaW5lIE1BWF9GT05UUwkyNTYKQEAgLTQyOSw3ICs0MzAsNyBAQAogewogICAgIFNJWkUgc2l6ZTsKICAgICBpZiAoIUdldFRleHRFeHRlbnRQb2ludCggaGRjLCBzdHIsIGNvdW50LCAmc2l6ZSApKSByZXR1cm4gMDsKLSAgICByZXR1cm4gc2l6ZS5jeCB8IChzaXplLmN5IDw8IDE2KTsKKyAgICByZXR1cm4gTUFLRUxPTkcoIHNpemUuY3gsIHNpemUuY3kgKTsKIH0KIAogCkBAIC01ODIsNyArNTgzLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQlJbml0Rm9udHNMaXN0CQlbaW50ZXJuYWxdCiAgKi8KLXZvaWQgSW5pdEZvbnRzTGlzdCgpCit2b2lkIEluaXRGb250c0xpc3Qodm9pZCkKIHsKICAgICBjaGFyIAlzdHJbMzJdOwogICAgIGNoYXIgCXBhdHRlcm5bMTAwXTsKZGlmZiAtLWdpdCBhL29iamVjdHMvZ2Rpb2JqLmMgYi9vYmplY3RzL2dkaW9iai5jCmluZGV4IDk5MmM5MzUuLjZlOGZhMzkgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZ2Rpb2JqLmMKKysrIGIvb2JqZWN0cy9nZGlvYmouYwpAQCAtMiwxOCArMiwyMCBAQAogICogR0RJIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAxOTkzIEFsZXhhbmRyZSBKdWxsaWFyZAotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5MyI7CisqLwogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSAiZ2RpLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKICNpbmNsdWRlICJwcm90b3R5cGVzLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKKyNpbmNsdWRlICJiaXRtYXAuaCIKKyNpbmNsdWRlICJmb250LmgiCiAvKiAjZGVmaW5lIERFQlVHX0dESSAqLwotLyogI3VuZGVmICBERUJVR19HREkgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiBNREVTQyAqR0RJX0hlYXAgPSBOVUxMOwpAQCAtMjUsOCArMjcsNiBAQAogI2RlZmluZSBNQVhfT0JKIAkJCTEwMjQKIEhBTkRMRSAqbHBQZW5CcnVzaExpc3QgPSBOVUxMOwogCi1leHRlcm4gSFBBTEVUVEUgQ09MT1JfSW5pdCgpOyAgLyogY29sb3IuYyAqLwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgIEdESSBzdG9jayBvYmplY3RzIAogICovCkBAIC0xNTUsNyArMTU1LDcgQEAKICAqCiAgKiBHREkgaW5pdGlhbGlzYXRpb24uCiAgKi8KLUJPT0wgR0RJX0luaXQoKQorQk9PTCBHRElfSW5pdCh2b2lkKQogewogICAgIEhQQUxFVFRFIGhwYWxldHRlOwogICAgIHN0cnVjdCBzZWdtZW50X2Rlc2NyaXB0b3JfcyAqIHM7CkBAIC00MjksOCArNDI5LDggQEAKICAqLwogaW50IEVudW1PYmplY3RzKEhEQyBoREMsIGludCBuT2JqVHlwZSwgRkFSUFJPQyBscEVudW1GdW5jLCBMUFNUUiBscERhdGEpCiB7Ci0gICAgSEFORExFIAkJaGFuZGxlOwotICAgIERDIAkJCSpkYzsKKy8qICAgIEhBTkRMRSAJCWhhbmRsZTsKKyAgICBEQyAJCQkqZGM7Ki8KIAlIQU5ETEUJCSpscGhPYmo7CiAJR0RJT0JKSERSIAkqaGVhZGVyOwogCVdPUkQgIAkJd01hZ2ljOwpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9saW5lZGRhLmMgYi9vYmplY3RzL2xpbmVkZGEuYwppbmRleCBlNjEyOTBkLi43MjlmOWVjIDEwMDY0NAotLS0gYS9vYmplY3RzL2xpbmVkZGEuYworKysgYi9vYmplY3RzL2xpbmVkZGEuYwpAQCAtMiwxMiArMiwxMyBAQAogICogTGluZUREQQogICoKICAqIENvcHlyaWdodCAxOTkzIEJvYiBBbXN0YWR0Ci0gKi8KLQorICoKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgQm9iIEFtc3RhZHQsIDE5OTMiOworKi8KIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNpbmNsdWRlICJpZjE2MzIuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQlMaW5lRERBCQkoR0RJLjEwMCkKZGlmZiAtLWdpdCBhL29iamVjdHMvbWV0YWZpbGUuYyBiL29iamVjdHMvbWV0YWZpbGUuYwppbmRleCA4NzE1YmY3Li5kZWJkZjIzIDEwMDY0NAotLS0gYS9vYmplY3RzL21ldGFmaWxlLmMKKysrIGIvb2JqZWN0cy9tZXRhZmlsZS5jCkBAIC0yLDkgKzIsOSBAQAogICogTWV0YWZpbGUgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0ICBEYXZpZCBXLiBNZXRjYWxmZSwgMTk5NAotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIERhdmlkIFcuIE1ldGNhbGZlLCAxOTk0IjsKKyovCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICJ3aW5kb3dzLmgiCkBAIC0xMiw4ICsxMiw3IEBACiAjaW5jbHVkZSAibWV0YWZpbGUuaCIKICNpbmNsdWRlICJwcm90b3R5cGVzLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKLS8qICNkZWZpbmUgREVCVUdfTUVUQUZJTEUgLyogKi8KLS8qICN1bmRlZiAgREVCVUdfTUVUQUZJTEUgLyogKi8KKy8qICNkZWZpbmUgREVCVUdfTUVUQUZJTEUgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAjZGVmaW5lIEhUSU5DUiAgMTAgICAgICAvKiBoYW5kbGUgdGFibGUgYWxsb2NhdGlvbiBzaXplIGluY3JlbWVudCAqLwpAQCAtMjIsNiArMjEsNTggQEAKIHN0YXRpYyBpbnQgSFRMZW47ICAgICAgIC8qIGFsbG9jYXRlZCBsZW5ndGggb2YgaGFuZGxlIHRhYmxlICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgR2V0TWV0YWZpbGUgICAgICAgICBHREkuMTI0IEJ5IEtlbm55IE1hY0RvbmFsZCAzMCBOb3YgOTQKKyAqLworSE1FVEFGSUxFIEdldE1ldGFGaWxlKExQU1RSIGxwRmlsZW5hbWUpCit7CisKKyAgREMgKmRjOworICBITUVUQUZJTEUgaG1mOworICBNRVRBRklMRSAqbWY7CisgIE1FVEFIRUFERVIgKm1oOworCisgIGRwcmludGZfbWV0YWZpbGUoc3RkZGViLCJHZXRNZXRhRmlsZTogJXNcbiIsIGxwRmlsZW5hbWUpOworCisgIGlmICghbHBGaWxlbmFtZSkKKyAgICByZXR1cm4gMDsKKworICBobWYgPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFLCBzaXplb2YoTUVUQUZJTEUpKTsKKyAgbWYgPSAoTUVUQUZJTEUgKilHbG9iYWxMb2NrKGhtZik7CisgIGlmICghbWYpIHsKKyAgICBHbG9iYWxGcmVlKGhtZik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBtZi0+aE1ldGFIZHIgPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFLCBNRkhFQURFUlNJWkUpOworICBtaCA9IChNRVRBSEVBREVSICopR2xvYmFsTG9jayhtZi0+aE1ldGFIZHIpOworICBpZiAoIW1oKSB7CisgICAgR2xvYmFsRnJlZShtZi0+aE1ldGFIZHIpOworICAgIEdsb2JhbEZyZWUoaG1mKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBzdHJjcHkobWYtPkZpbGVuYW1lLCBscEZpbGVuYW1lKTsKKyAgbWYtPndNYWdpYyA9IE1FVEFGSUxFX01BR0lDOworICBpZiAoKG1mLT5oRmlsZSA9IF9sb3BlbihscEZpbGVuYW1lLCBPRl9SRUFEKSkgPT0gSEZJTEVfRVJST1IpIHsKKyAgICBHbG9iYWxGcmVlKGhtZik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKF9scmVhZChtZi0+aEZpbGUsIChjaGFyICopbWgsIE1GSEVBREVSU0laRSkgPT0gSEZJTEVfRVJST1IpIHsKKyAgICBHbG9iYWxGcmVlKG1mLT5oTWV0YUhkcik7CisgICAgR2xvYmFsRnJlZShobWYpOworICAgIHJldHVybiAwOworICB9CisgIF9sY2xvc2UobWYtPmhGaWxlKTsKKworCisgIEdsb2JhbFVubG9jayhtZi0+aE1ldGFIZHIpOworICBHbG9iYWxVbmxvY2soaG1mKTsKKyAgaWYgKG1oLT5tdFR5cGUgIT0gMSkKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAgIHJldHVybiBobWY7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgQ3JlYXRlTWV0YWZpbGUgICAgICAgICBHREkuMTI1CiAgKi8KIEhBTkRMRSBDcmVhdGVNZXRhRmlsZShMUFNUUiBscEZpbGVuYW1lKQpAQCAtOTMsNyArMTQ0LDcgQEAKICAgICBNRVRBSEVBREVSICptaDsKICAgICBITUVUQUZJTEUgaG1mOwogICAgIGNoYXIgYnVmZmVyWzE1XTsKLSAgICBNRVRBUkVDT1JEICptciA9IChNRVRBUkVDT1JEICopJmJ1ZmZlcjsKKy8qICAgIE1FVEFSRUNPUkQgKm1yID0gKE1FVEFSRUNPUkQgKikmYnVmZmVyOyovCiAKICAgICBkcHJpbnRmX21ldGFmaWxlKHN0ZGRlYiwiQ2xvc2VNZXRhRmlsZVxuIik7CiAKQEAgLTE5NCw3ICsyNDUsNyBAQAogCWlmIChtaC0+bXRUeXBlID09IDEpICAgLyogZGlzayBiYXNlZCBtZXRhZmlsZSAqLwogCXsKIAkgICAgX2xyZWFkKG1mLT5oRmlsZSwgYnVmZmVyLCBzaXplb2YoTUVUQVJFQ09SRCkpOwotCSAgICBtciA9IChNRVRBUkVDT1JEICopJmJ1ZmZlcjsKKwkgICAgbXIgPSAoTUVUQVJFQ09SRCAqKWJ1ZmZlcjsKIAkgICAgX2xyZWFkKG1mLT5oRmlsZSwgKGNoYXIgKikobXItPnJkUGFyYW0gKyAxKSwgKG1yLT5yZFNpemUgKiAyKSAtCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihNRVRBUkVDT1JEKSk7CiAJICAgIG1mLT5NZXRhT2Zmc2V0ICs9IG1yLT5yZFNpemUgKiAyOwpAQCAtMjM0LDYgKzI4NSwxMyBAQAogCiAgICAgc3dpdGNoIChtci0+cmRGdW5jdGlvbikKICAgICB7CisgICAgY2FzZSBNRVRBX0VPRjoKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBNRVRBX0RFTEVURU9CSkVDVDoKKyAgICAgIERlbGV0ZU9iamVjdCgqKGh0LT5vYmplY3RIYW5kbGUgKyAqKG1yLT5yZFBhcmFtKSkpOworICAgICAgYnJlYWs7CisKICAgICBjYXNlIE1FVEFfU0VUQktDT0xPUjoKIAlTZXRCa0NvbG9yKGhkYywgKihtci0+cmRQYXJhbSkpOwogCWJyZWFrOwpAQCAtMzgxLDYgKzQzOSwxMSBAQAogCVBvbHlnb24oaGRjLCAoTFBQT0lOVCkobXItPnJkUGFyYW0gKyAxKSwgKihtci0+cmRQYXJhbSkpOwogCWJyZWFrOwogCisgICAgY2FzZSBNRVRBX1BPTFlQT0xZR09OOgorICAgICAgUG9seVBvbHlnb24oaGRjLCAoTFBQT0lOVCkobXItPnJkUGFyYW0gKyAqKG1yLT5yZFBhcmFtKSArIDEpLAorCQkgIChtci0+cmRQYXJhbSArIDEpLCAqKG1yLT5yZFBhcmFtKSk7IAorICAgICAgYnJlYWs7CisKICAgICBjYXNlIE1FVEFfUE9MWUxJTkU6CiAJUG9seWxpbmUoaGRjLCAoTFBQT0lOVCkobXItPnJkUGFyYW0gKyAxKSwgKihtci0+cmRQYXJhbSkpOwogCWJyZWFrOwpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9vZW1iaXRtYXAuYyBiL29iamVjdHMvb2VtYml0bWFwLmMKaW5kZXggMGM1YTk2Yy4uODgzZDA5MiAxMDA2NDQKLS0tIGEvb2JqZWN0cy9vZW1iaXRtYXAuYworKysgYi9vYmplY3RzL29lbWJpdG1hcC5jCkBAIC0yLDEwICsyLDkgQEAKICAqIEdESSBPRU0gYml0bWFwIG9iamVjdHMKICAqCiAgKiBDb3B5cmlnaHQgMTk5NCBBbGV4YW5kcmUgSnVsbGlhcmQKLSAqLwotCisgKgogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBBbGV4YW5kcmUgSnVsbGlhcmQsIDE5OTQiOwotCisqLwogI2luY2x1ZGUgPFgxMS9YbGliLmg+CiAjaW5jbHVkZSA8WDExL1h1dGlsLmg+CiAjaWZkZWYgVVNFX1hQTQpAQCAtMTQsNyArMTMsNyBAQAogI2luY2x1ZGUgImdkaS5oIgogI2luY2x1ZGUgImJpdG1hcC5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCi0vKiAjZGVmaW5lIERFQlVHX0JJVE1BUCAqLworI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogI2RlZmluZSBPQk1fRklSU1QgIE9CTV9MRkFSUk9XSSAgICAvKiBGaXJzdCBPRU0gYml0bWFwICovCkBAIC0xODgsMTAgKzE4Nyw2IEBACiAKICNlbmRpZiAvKiBVU0VfWFBNICovCiAKLWV4dGVybiBXT1JEIENPTE9SX1RvUGh5c2ljYWwoIERDICpkYywgQ09MT1JSRUYgY29sb3IgKTsgIC8qIGNvbG9yLmMgKi8KLQotZXh0ZXJuIENvbG9ybWFwIENPTE9SX1dpbkNvbG9ybWFwOwotCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIE9CTV9Jbml0Q29sb3JTeW1ib2xzCmRpZmYgLS1naXQgYS9vYmplY3RzL3BhbGV0dGUuYyBiL29iamVjdHMvcGFsZXR0ZS5jCmluZGV4IDdhOGNkZTQuLmMyOGNiNjAgMTAwNjQ0Ci0tLSBhL29iamVjdHMvcGFsZXR0ZS5jCisrKyBiL29iamVjdHMvcGFsZXR0ZS5jCkBAIC0yLDEwICsyLDkgQEAKICAqIEdESSBwYWxldHRlIG9iamVjdHMKICAqCiAgKiBDb3B5cmlnaHQgMTk5MywxOTk0IEFsZXhhbmRyZSBKdWxsaWFyZAotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5MywxOTk0IjsKLQorKi8KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTE3LDE2ICsxNiwxMSBAQAogCiAjaW5jbHVkZSA8WDExL1hsaWIuaD4KICNpbmNsdWRlICJnZGkuaCIKKyNpbmNsdWRlICJjb2xvci5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX1BBTEVUVEUgKi8KLS8qICN1bmRlZiAgREVCVUdfUEFMRVRURSAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKLWV4dGVybiB2b2lkIENPTE9SX1NldE1hcHBpbmcoIERDICpkYywgSEFORExFIG1hcCwgV09SRCBzaXplICk7ICAvKiBjb2xvci5jICovCi0KLWV4dGVybiBDb2xvcm1hcCBDT0xPUl9XaW5Db2xvcm1hcDsKLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDcmVhdGVQYWxldHRlICAgIChHREkuMzYwKQogICovCmRpZmYgLS1naXQgYS9vYmplY3RzL3Blbi5jIGIvb2JqZWN0cy9wZW4uYwppbmRleCBkZjVmNTVjLi4yMjkzMTgyIDEwMDY0NAotLS0gYS9vYmplY3RzL3Blbi5jCisrKyBiL29iamVjdHMvcGVuLmMKQEAgLTIsMTkgKzIsMTUgQEAKICAqIEdESSBwZW4gb2JqZWN0cwogICoKICAqIENvcHlyaWdodCAxOTkzIEFsZXhhbmRyZSBKdWxsaWFyZAotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5MyI7Ci0KKyovCiAjaW5jbHVkZSAiZ2RpLmgiCiAjaW5jbHVkZSAibWV0YWZpbGUuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgotLyogI2RlZmluZSBERUJVR19HREkgKi8KLS8qICN1bmRlZiAgREVCVUdfR0RJICovCisjaW5jbHVkZSAiY29sb3IuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCi1leHRlcm4gV09SRCBDT0xPUl9Ub1BoeXNpY2FsKCBEQyAqZGMsIENPTE9SUkVGIGNvbG9yICk7Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENyZWF0ZVBlbiAgICAoR0RJLjYxKQogICovCmRpZmYgLS1naXQgYS9vYmplY3RzL3JlZ2lvbi5jIGIvb2JqZWN0cy9yZWdpb24uYwppbmRleCBhZDMzNzliLi41ZDFkMWQ5IDEwMDY0NAotLS0gYS9vYmplY3RzL3JlZ2lvbi5jCisrKyBiL29iamVjdHMvcmVnaW9uLmMKQEAgLTIsMTcgKzIsMTUgQEAKICAqIEdESSByZWdpb24gb2JqZWN0cwogICoKICAqIENvcHlyaWdodCAxOTkzLCAxOTk0IEFsZXhhbmRyZSBKdWxsaWFyZAotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5MywgMTk5NCI7Ci0KKyovCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAogI2luY2x1ZGUgImdkaS5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCi0vKiAjZGVmaW5lIERFQlVHX1JFR0lPTiAvKiAqLwotLyogI3VuZGVmICBERUJVR19SRUdJT04gLyogKi8KKy8qICNkZWZpbmUgREVCVUdfUkVHSU9OICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogICAvKiBHQyB1c2VkIGZvciByZWdpb24gb3BlcmF0aW9ucyAqLwpAQCAtMjEsNyArMTksNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgUkVHSU9OX0luaXQKICAqLwotQk9PTCBSRUdJT05fSW5pdCgpCitCT09MIFJFR0lPTl9Jbml0KHZvaWQpCiB7CiAgICAgUGl4bWFwIHRtcFBpeG1hcDsKIApkaWZmIC0tZ2l0IGEvb2JqZWN0cy90ZXh0LmMgYi9vYmplY3RzL3RleHQuYwppbmRleCBkMDdkMmI5Li5jMjhmM2IwIDEwMDY0NAotLS0gYS9vYmplY3RzL3RleHQuYworKysgYi9vYmplY3RzL3RleHQuYwpAQCAtMiwxOCArMiwxOCBAQAogICogdGV4dCBmdW5jdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgMTk5MywgMTk5NCBBbGV4YW5kcmUgSnVsbGlhcmQKLSAqLwotCisgKgogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBBbGV4YW5kcmUgSnVsbGlhcmQsIDE5OTMsIDE5OTQiOwotCisqLwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPFgxMS9YYXRvbS5oPgogI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNpbmNsdWRlICJkYy5oIgogI2luY2x1ZGUgImdkaS5oIgorI2luY2x1ZGUgImNhbGxiYWNrLmgiCiAjaW5jbHVkZSAibWV0YWZpbGUuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgotLyogI2RlZmluZSBERUJVR19URVhUIC8qICovCi0vKiAjdW5kZWYgIERFQlVHX1RFWFQgLyogKi8KKy8qICNkZWZpbmUgREVCVUdfVEVYVCAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKICNkZWZpbmUgVEFCICAgICA5CkBAIC01MDUsMjkgKzUwNSw4MSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQlUYWJiZWRUZXh0T3V0CQlbVVNFUi4xOTZdCisgKiAgICAgICAgICAgVEVYVF9UYWJiZWRUZXh0T3V0CisgKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBUYWJiZWRUZXh0T3V0KCkgYW5kIEdldFRhYmJlZFRleHRFeHRlbnQoKS4KKyAqIE5vdGU6IHRoaXMgZG9lc24ndCB3b3JrIHRvbyB3ZWxsIGZvciB0ZXh0LWFsaWdubWVudCBtb2RlcyBvdGhlcgorICogICAgICAgdGhhbiBUQV9MRUZUfFRBX1RPUC4gQnV0IHdlIHdhbnQgYnVnLWZvci1idWcgY29tcGF0aWJpbGl0eSA6LSkKICAqLwotTE9ORyBUYWJiZWRUZXh0T3V0KEhEQyBoREMsIHNob3J0IHgsIHNob3J0IHksIExQU1RSIGxwU3RyLCBzaG9ydCBuQ291bnQsIAotCQlzaG9ydCBuVGFiQ291bnQsIExQSU5UIGxwVGFiUG9zLCBzaG9ydCBuVGFiT3JnKQorTE9ORyBURVhUX1RhYmJlZFRleHRPdXQoIEhEQyBoZGMsIGludCB4LCBpbnQgeSwgTFBTVFIgbHBzdHIsIGludCBjb3VudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNUYWJTdG9wcywgTFBJTlQgbHBUYWJQb3MsIGludCBuVGFiT3JnLAorICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgZkRpc3BsYXlUZXh0KQogewotCVdPUkQgCXdpZHRoLCBoZWlnaHQ7Ci0JZHByaW50Zl90ZXh0KHN0ZG5pbXAsIkVNUFRZIFNUVUIgISEhIFRhYmJlZFRleHRPdXQoKTsgISBjYWxsIFRleHRPdXQoKSBmb3Igbm93ICFcbiIpOwotCWhlaWdodCA9IEhJV09SRChHZXRUZXh0RXh0ZW50KGhEQywgbHBTdHIsIG5Db3VudCkpOwotCXdpZHRoID0gTE9XT1JEKEdldFRleHRFeHRlbnQoaERDLCBscFN0ciwgbkNvdW50KSk7Ci0JVGV4dE91dChoREMsIHgsIHksIGxwU3RyLCBuQ291bnQpOwotCXJldHVybiBNQUtFTE9ORyh3aWR0aCwgaGVpZ2h0KTsKKyAgICBXT1JEIGRlZldpZHRoOworICAgIERXT1JEIGV4dGVudDsKKyAgICBpbnQgaSwgdGFiUG9zID0gMDsKKworICAgIGlmIChjVGFiU3RvcHMgPT0gMSkgZGVmV2lkdGggPSAqbHBUYWJQb3M7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVEVYVE1FVFJJQyB0bTsKKyAgICAgICAgR2V0VGV4dE1ldHJpY3MoIGhkYywgJnRtICk7CisgICAgICAgIGRlZldpZHRoID0gOCAqIHRtLnRtQXZlQ2hhcldpZHRoOworICAgIH0KKyAgICAKKyAgICB3aGlsZSAoY291bnQgPiAwKQorICAgIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICBpZiAobHBzdHJbaV0gPT0gJ1x0JykgYnJlYWs7CisgICAgICAgIGV4dGVudCA9IEdldFRleHRFeHRlbnQoIGhkYywgbHBzdHIsIGkgKTsKKyAgICAgICAgd2hpbGUgKChjVGFiU3RvcHMgPiAwKSAmJiAoblRhYk9yZyArICpscFRhYlBvcyA8IHggKyBMT1dPUkQoZXh0ZW50KSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxwVGFiUG9zKys7CisgICAgICAgICAgICBjVGFiU3RvcHMtLTsKKyAgICAgICAgfQorICAgICAgICBpZiAobHBzdHJbaV0gIT0gJ1x0JykKKyAgICAgICAgICAgIHRhYlBvcyA9IHggKyBMT1dPUkQoZXh0ZW50KTsKKyAgICAgICAgZWxzZSBpZiAoY1RhYlN0b3BzID4gMCkKKyAgICAgICAgICAgIHRhYlBvcyA9IG5UYWJPcmcgKyAqbHBUYWJQb3M7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRhYlBvcyA9ICh4ICsgTE9XT1JEKGV4dGVudCkgKyBkZWZXaWR0aCAtIDEpIC8gZGVmV2lkdGggKiBkZWZXaWR0aDsKKyAgICAgICAgaWYgKGZEaXNwbGF5VGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgUkVDVCByOworICAgICAgICAgICAgU2V0UmVjdCggJnIsIHgsIHksIHRhYlBvcywgeStISVdPUkQoZXh0ZW50KSApOworICAgICAgICAgICAgRXh0VGV4dE91dCggaGRjLCB4LCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgR2V0QmtNb2RlKGhkYykgPT0gT1BBUVVFID8gRVRPX09QQVFVRSA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAmciwgbHBzdHIsIGksIE5VTEwgKTsKKyAgICAgICAgfQorICAgICAgICB4ID0gdGFiUG9zOworICAgICAgICBjb3VudCAtPSBpKzE7CisgICAgICAgIGxwc3RyICs9IGkrMTsKKyAgICB9CisgICAgcmV0dXJuIHRhYlBvczsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJR2V0VGFiYmVkVGV4dEV4dGVudAkJW1VTRVIuMTk3XQorICogICAgICAgICAgIFRhYmJlZFRleHRPdXQgICAgKFVTRVIuMTk2KQogICovCi1EV09SRCBHZXRUYWJiZWRUZXh0RXh0ZW50KEhEQyBoREMsIExQU1RSIGxwU3RyaW5nLCBpbnQgbkNvdW50LCAKLQlpbnQgblRhYlBvc2l0aW9ucywgTFBJTlQgbHBuVGFiU3RvcFBvc2l0aW9ucykKK0xPTkcgVGFiYmVkVGV4dE91dCggSERDIGhkYywgc2hvcnQgeCwgc2hvcnQgeSwgTFBTVFIgbHBzdHIsIHNob3J0IGNvdW50LCAKKyAgICAgICAgICAgICAgICAgICAgc2hvcnQgY1RhYlN0b3BzLCBMUElOVCBscFRhYlBvcywgc2hvcnQgblRhYk9yZyApCiB7Ci0JZHByaW50Zl90ZXh0KHN0ZG5pbXAsIkVNUFRZIFNUVUIgISEhIEdldFRhYmJlZFRleHRFeHRlbnQoKTsgIVxuIik7Ci0KLQlyZXR1cm4gKDE4IDw8IDE2KSB8IChuQ291bnQgKiAxOCk7CisgICAgZHByaW50Zl90ZXh0KCBzdGRkZWIsICJUYWJiZWRUZXh0T3V0OiAleCAlZCwlZCAnJXMnICVkXG4iLAorICAgICAgICAgICAgICAgICAgaGRjLCB4LCB5LCBscHN0ciwgY291bnQgKTsKKyAgICByZXR1cm4gVEVYVF9UYWJiZWRUZXh0T3V0KCBoZGMsIHgsIHksIGxwc3RyLCBjb3VudCwgY1RhYlN0b3BzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwVGFiUG9zLCBuVGFiT3JnLCBUUlVFICk7CiB9CiAKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0VGFiYmVkVGV4dEV4dGVudCAgICAoVVNFUi4xOTcpCisgKi8KK0RXT1JEIEdldFRhYmJlZFRleHRFeHRlbnQoIEhEQyBoZGMsIExQU1RSIGxwc3RyLCBpbnQgY291bnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY1RhYlN0b3BzLCBMUElOVCBscFRhYlBvcyApCit7CisgICAgZHByaW50Zl90ZXh0KCBzdGRkZWIsICJHZXRUYWJiZWRUZXh0RXh0ZW50OiAleCAnJXMnICVkXG4iLAorICAgICAgICAgICAgICAgICAgaGRjLCBscHN0ciwgY291bnQgKTsKKyAgICByZXR1cm4gVEVYVF9UYWJiZWRUZXh0T3V0KCBoZGMsIDAsIDAsIGxwc3RyLCBjb3VudCwgY1RhYlN0b3BzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwVGFiUG9zLCAwLCBGQUxTRSApOworfQpkaWZmIC0tZ2l0IGEvcmMvcmMubCBiL3JjL3JjLmwKaW5kZXggYTA5ODE5Zi4uMjc3MzgyMCAxMDA2NDQKLS0tIGEvcmMvcmMubAorKysgYi9yYy9yYy5sCkBAIC00LDcgKzQsNiBAQAogICogQ29weXJpZ2h0ICBNYXJ0aW4gdm9uIExvZXdpcywgMTk5NAogICoKICAqLwotCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgTWFydGluIHZvbiBMb2V3aXMsIDE5OTQiOwogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CmRpZmYgLS1naXQgYS9yYy9yYy55IGIvcmMvcmMueQppbmRleCBlZTdmY2NmLi4zODQ0ZTM5IDEwMDY0NAotLS0gYS9yYy9yYy55CisrKyBiL3JjL3JjLnkKQEAgLTIsNyArMiw2IEBACiAvKgogICoKICAqIENvcHlyaWdodCAgTWFydGluIHZvbiBMb2V3aXMsIDE5OTQKLSAqCiAgKi8KIAogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IE1hcnRpbiB2b24gTG9ld2lzLCAxOTk0IjsKQEAgLTIwNCw3ICsyMDMsNyBAQAogCQl8ICcoJyBzdHlsZSAnKScgeyQkPSQyO30KIAkJfCBzdHlsZSAnfCcgc3R5bGUgeyQkPSQxOyQkLT5vcnw9JDMtPm9yOyQkLT5hbmQmPSQzLT5hbmQ7fQogJSUKLXl5ZXJyb3IoY2hhciAqcykKK2ludCB5eWVycm9yKGNoYXIgKnMpCiB7CiAJcHV0cyhzKTsKIH0KZGlmZiAtLWdpdCBhL3JjL3N5c3Jlcy5yYyBiL3JjL3N5c3Jlcy5yYwppbmRleCA4Y2I5NzkxLi42NzRkZjY1IDEwMDY0NAotLS0gYS9yYy9zeXNyZXMucmMKKysrIGIvcmMvc3lzcmVzLnJjCkBAIC0xLDI2OSArMSwyNzEgQEAKICNpZiAjTEFORyhFbikKIAotU1lTTUVOVSBNRU5VIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgDQotew0KLSBNRU5VSVRFTSAiJlJlc3RvcmUiLCA2MTcyOA0KLSBNRU5VSVRFTSAiJk1vdmUiLCA2MTQ1Ng0KLSBNRU5VSVRFTSAiJlNpemUiLCA2MTQ0MA0KLSBNRU5VSVRFTSAiTWkmbmltaXplIiwgNjE0NzINCi0gTUVOVUlURU0gIk1hJnhpbWl6ZSIsIDYxNDg4DQotIE1FTlVJVEVNIFNFUEFSQVRPUg0KLSBNRU5VSVRFTSAiJkNsb3NlXHRBbHQtRjQiLCA2MTUzNg0KLSBNRU5VSVRFTSBTRVBBUkFUT1INCi0gTUVOVUlURU0gIiZTd2l0Y2ggdG8gLi4uXHRDdHJsLUVzYyIsIDYxNzQ0DQotIE1FTlVJVEVNIFNFUEFSQVRPUg0KLSBNRU5VSVRFTSAiJkFib3V0IFdJTkUgLi4uIiwgNjE3NjENCi19DQotDQotDQotMiBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA4MCwgODAsIDE1MCwgMTcwDQotU1RZTEUgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfRExHRlJBTUUNCi17DQotIFBVU0hCVVRUT04gIkNyZWRpdCAmIExpY2Vuc2UiLCA2LCAzMCwgMTUwLCA0MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLSBQVVNIQlVUVE9OICJDYW5jZWwiLCAyLCA2MCwgMjUwLCA0MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLSBERUZQVVNIQlVUVE9OICJPayIsIDEsIDgwLCAxNTAsIDQwLCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLX0NCi0NCi0NCi1TVE9QX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA4MCwgODAsIDE1MCwgNzUNCi1TVFlMRSBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19ETEdGUkFNRQ0KLXsNCi0gSUNPTiAiU1lTSURJX0hBTkQiLCAtMSwgMTYsIDE2LCAwLCAwDQotfQ0KLQ0KLQ0KLVFVRVNUSU9OX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA4MCwgODAsIDE1MCwgNzUNCi1TVFlMRSBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19ETEdGUkFNRQ0KLXsNCi0gSUNPTiAiU1lTSURJX1FVRVNUSU9OIiwgLTEsIDE2LCAxNiwgMCwgMA0KLX0NCi0NCi0NCi1FWENMQU1BVElPTl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgODAsIDgwLCAxNTAsIDc1DQotU1RZTEUgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfRExHRlJBTUUNCi17DQotIElDT04gIlNZU0lESV9FWENMQU1BVElPTiIsIC0xLCAxNiwgMTYsIDAsIDANCi19DQotDQotDQotU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDUwLCA0NCwgMjEzLCAxNDkNCi1TVFlMRSBEU19MT0NBTEVESVQgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUNCi1DQVBUSU9OICJhYm91dCBYIg0KLUZPTlQgMTAsICJTeXN0ZW0iDQotew0KLSBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDg2LCAxMzAsIDQwLCAxNA0KLSBDT05UUk9MICIiLCAtMSwgIlNUQVRJQyIsIFNTX0JMQUNLRlJBTUUgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19ESVNBQkxFRCwgNCwgMzUsIDIwNSwgOTANCi0gTFRFWFQgIlRleHQiLCAxMDAsIDExLCA0MCwgMTkwLCA4MCwgU1NfTk9QUkVGSVggfCBXU19HUk9VUA0KLSBJQ09OICJXSU5FSUNPTiIsIC0xLCAxODUsIDEwLCAxOCwgMjANCi19DQotDQotDQotMyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI3NSwgMTM0DQotU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUNCi1DQVBUSU9OICJPcGVuIg0KLUZPTlQgOCwgIkhlbHYiDQotew0KLSBMVEVYVCAiRmlsZSAmTmFtZToiLCAxMDkwLCA2LCA2LCA3NiwgOQ0KLSBFRElUVEVYVCAxMTUyLCA2LCAxNiwgOTAsIDEyLCBFU19BVVRPSFNDUk9MTCB8IEVTX09FTUNPTlZFUlQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QDQotIExJU1RCT1ggMTEyMCwgNiwgMzIsIDkwLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUA0KLSBMVEVYVCAiJkRpcmVjdG9yaWVzOiIsIC0xLCAxMTAsIDYsIDkyLCA5DQotIExURVhUICIiLCAxMDg4LCAxMTAsIDE4LCA5MiwgOSwgU1NfTk9QUkVGSVggfCBXU19HUk9VUA0KLSBMSVNUQk9YIDExMjEsIDExMCwgMzIsIDkyLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUA0KLSBMVEVYVCAiTGlzdCBGaWxlcyBvZiAmVHlwZToiLCAxMDg5LCA2LCAxMDQsIDkwLCA5DQotIENPTUJPQk9YIDExMzYsIDYsIDExNCwgOTAsIDM2LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1ANCi0gTFRFWFQgIkRyaSZ2ZXM6IiwgMTA5MSwgMTEwLCAxMDQsIDkyLCA5DQotIENPTUJPQk9YIDExMzcsIDExMCwgMTE0LCA5MiwgNjgsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IENCU19IQVNTVFJJTkdTIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1ANCi0gREVGUFVTSEJVVFRPTiAiT3BlbiIsIDEsIDIwOCwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwOCwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIFBVU0hCVVRUT04gIiZIZWxwIiwgMTAzOCwgMjA4LCA0NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1ANCi0gQ0hFQ0tCT1ggIiZSZWFkIE9ubHkiLCAxMDQwLCAyMDgsIDY4LCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLX0NCi0NCi0NCi00IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjc1LCAxMzQNCi1TVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQ0KLUNBUFRJT04gIlNhdmUgQXMgLi4uIg0KLUZPTlQgOCwgIkhlbHYiDQotew0KLSBMVEVYVCAiRmlsZSAmTmFtZToiLCAxMDkwLCA2LCA2LCA3NiwgOQ0KLSBFRElUVEVYVCAxMTUyLCA2LCAxNiwgOTAsIDEyLCBFU19BVVRPSFNDUk9MTCB8IEVTX09FTUNPTlZFUlQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QDQotIExJU1RCT1ggMTEyMCwgNiwgMzIsIDkwLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUA0KLSBMVEVYVCAiJkRpcmVjdG9yaWVzOiIsIC0xLCAxMTAsIDYsIDkyLCA5DQotIExURVhUICIiLCAxMDg4LCAxMTAsIDE4LCA5MiwgOSwgU1NfTk9QUkVGSVggfCBXU19HUk9VUA0KLSBMSVNUQk9YIDExMjEsIDExMCwgMzIsIDkyLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUA0KLSBMVEVYVCAiTGlzdCBGaWxlcyBvZiAmVHlwZToiLCAxMDg5LCA2LCAxMDQsIDkwLCA5DQotIENPTUJPQk9YIDExMzYsIDYsIDExNCwgOTAsIDM2LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1ANCi0gTFRFWFQgIkRyaSZ2ZXM6IiwgMTA5MSwgMTEwLCAxMDQsIDkyLCA5DQotIENPTUJPQk9YIDExMzcsIDExMCwgMTE0LCA5MiwgNjgsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IENCU19IQVNTVFJJTkdTIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1ANCi0gREVGUFVTSEJVVFRPTiAiU2F2ZSBBcyIsIDEsIDIwOCwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwOCwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIFBVU0hCVVRUT04gIiZIZWxwIiwgMTAzOCwgMjA4LCA0NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1ANCi0gQ0hFQ0tCT1ggIiZSZWFkIE9ubHkiLCAxMDQwLCAyMDgsIDY4LCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLX0NCi0NCi0NCi0xMSBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI3NSwgMTM0DQotU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUNCi1DQVBUSU9OICJPcGVuIg0KLUZPTlQgOCwgIkhlbHYiDQotew0KLSBMVEVYVCAiRmlsZSAmTmFtZToiLCAxMDkwLCA2LCA2LCA3NiwgOQ0KLSBMVEVYVCAiIiwgMTE1MiwgNiwgMTYsIDkwLCAxMg0KLSBMSVNUQk9YIDExMjAsIDYsIDMyLCA5MCwgNjgsIExCU19TVEFOREFSRCB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX0RJU0FCTEVOT1NDUk9MTCB8IFdTX1RBQlNUT1ANCi0gTFRFWFQgIiZEaXJlY3RvcmllczoiLCAtMSwgMTEwLCA2LCA5MiwgOQ0KLSBMVEVYVCAiIiwgMTA4OCwgMTEwLCAxOCwgOTIsIDksIFNTX05PUFJFRklYIHwgV1NfR1JPVVANCi0gTElTVEJPWCAxMTIxLCAxMTAsIDMyLCA5MiwgNjgsIExCU19TVEFOREFSRCB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX0RJU0FCTEVOT1NDUk9MTCB8IFdTX1RBQlNUT1ANCi0gTFRFWFQgIkxpc3QgRmlsZXMgb2YgJlR5cGU6IiwgMTA4OSwgNiwgMTA0LCA5MCwgOQ0KLSBDT01CT0JPWCAxMTM2LCA2LCAxMTQsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QDQotIExURVhUICJEcmkmdmVzOiIsIDEwOTEsIDExMCwgMTA0LCA5MiwgOQ0KLSBDT01CT0JPWCAxMTM3LCAxMTAsIDExNCwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QDQotIERFRlBVU0hCVVRUT04gIk9wZW4iLCAxLCAyMDgsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLSBQVVNIQlVUVE9OICJDYW5jZWwiLCAyLCAyMDgsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLSBQVVNIQlVUVE9OICImSGVscCIsIDEwMzgsIDIwOCwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIENIRUNLQk9YICImUmVhZCBPbmx5IiwgMTA0MCwgMjA4LCA2OCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1ANCi19DQotDQotDQotMTIgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNzUsIDEzNA0KLVNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VDQotQ0FQVElPTiAiU2F2ZSBBcyAuLi4iDQotRk9OVCA4LCAiSGVsdiINCi17DQotIExURVhUICJGaWxlICZOYW1lOiIsIDEwOTAsIDYsIDYsIDc2LCA5DQotIExURVhUICIiLCAxMTUyLCA2LCAxNiwgOTAsIDEyDQotIExJU1RCT1ggMTEyMCwgNiwgMzIsIDkwLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUA0KLSBMVEVYVCAiJkRpcmVjdG9yaWVzOiIsIC0xLCAxMTAsIDYsIDkyLCA5DQotIExURVhUICIiLCAxMDg4LCAxMTAsIDE4LCA5MiwgOSwgU1NfTk9QUkVGSVggfCBXU19HUk9VUA0KLSBMSVNUQk9YIDExMjEsIDExMCwgMzIsIDkyLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUA0KLSBMVEVYVCAiTGlzdCBGaWxlcyBvZiAmVHlwZToiLCAxMDg5LCA2LCAxMDQsIDkwLCA5DQotIENPTUJPQk9YIDExMzYsIDYsIDExNCwgOTAsIDM2LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1ANCi0gTFRFWFQgIkRyaSZ2ZXM6IiwgMTA5MSwgMTEwLCAxMDQsIDkyLCA5DQotIENPTUJPQk9YIDExMzcsIDExMCwgMTE0LCA5MiwgNjgsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IENCU19IQVNTVFJJTkdTIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1ANCi0gREVGUFVTSEJVVFRPTiAiU2F2ZSBBcyIsIDEsIDIwOCwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwOCwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIFBVU0hCVVRUT04gIiZIZWxwIiwgMTAzOCwgMjA4LCA0NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1ANCi0gQ0hFQ0tCT1ggIiZSZWFkIE9ubHkiLCAxMDQwLCAyMDgsIDY4LCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLX0NCi0NCi0NCi01IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMzQNCi1TVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQ0KLUNBUFRJT04gIlByaW50Ig0KLUZPTlQgOCwgIkhlbHYiDQotew0KLSBMVEVYVCAiUHJpbnRlcjoiLCAxMDg4LCA2LCA2LCA0MCwgOQ0KLSBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQ0KLSBHUk9VUEJPWCAiUHJpbnQgUmFuZ2UiLCAxMDcyLCA2LCAzMCwgMTYwLCA2NSwgQlNfR1JPVVBCT1gNCi0gUkFESU9CVVRUT04gIiZBbGwiLCAxMDU2LCAxNiwgNDUsIDYwLCAxMg0KLSBSQURJT0JVVFRPTiAiUyZlbGVjdGlvbiIsIDEwNTcsIDE2LCA2MCwgNjAsIDEyDQotIFJBRElPQlVUVE9OICImUGFnZXMiLCAxMDU4LCAxNiwgNzUsIDYwLCAxMg0KLSBERUZQVVNIQlVUVE9OICJQcmludCIsIDEsIDIwNiwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIFBVU0hCVVRUT04gIiZTZXR1cCIsIDEwMjQsIDIwNiwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIExURVhUICImRnJvbToiLCAxMDkwLCA2MCwgODAsIDMwLCA5DQotIExURVhUICImVG86IiwgMTA5MSwgMTIwLCA4MCwgMzAsIDkNCi0gTFRFWFQgIlByaW50ICZRdWFsaXR5OiIsIDEwOTIsIDYsIDEwMCwgNzYsIDkNCi0gQ09NQk9CT1ggMTEzNiwgODAsIDEwMCwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QDQotIENIRUNLQk9YICJQcmludCB0byBGaSZsZSIsIDEwNDAsIDIwLCAxMDAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIENIRUNLQk9YICJDb25kZW5zZWQiLCAxMDQxLCAxNjAsIDEwMCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1ANCi19DQotDQotDQotNiBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0DQotU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUNCi1DQVBUSU9OICJQcmludCBTZXR1cCINCi1GT05UIDgsICJIZWx2Ig0KLXsNCi0gR1JPVVBCT1ggIlByaW50ZXIiLCAxMDcyLCA2LCAxMCwgMTgwLCA2NSwgQlNfR1JPVVBCT1gNCi0gUkFESU9CVVRUT04gIiZEZWZhdWx0IFByaW50ZXIiLCAxMDU2LCAxNiwgMjAsIDgwLCAxMg0KLSBMVEVYVCAiW25vbmVdIiwgMTA4OCwgMzUsIDM1LCAxMjAsIDkNCi0gUkFESU9CVVRUT04gIlNwZWNpZmljICZQcmludGVyIiwgMTA1NywgMTYsIDUwLCA4MCwgMTINCi0gQ09NQk9CT1ggMTEzNiwgMzUsIDY1LCAxNDksIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QDQotIERFRlBVU0hCVVRUT04gIk9rIiwgMSwgMjA2LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1ANCi0gUFVTSEJVVFRPTiAiQ2FuY2VsIiwgMiwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1ANCi0gUFVTSEJVVFRPTiAiJlNldHVwIiwgMTAyNCwgMjA2LCA0NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1ANCi0gR1JPVVBCT1ggIk9yaWVudGF0aW9uIiwgMTA3MywgNiwgODUsIDEwMCwgNTAsIEJTX0dST1VQQk9YDQotIFJBRElPQlVUVE9OICJQbyZydHJhaXQiLCAxMDU4LCA1MCwgMTAwLCA0MCwgMTINCi0gUkFESU9CVVRUT04gIiZMYW5kc2NhcGUiLCAxMDU5LCA1MCwgMTE1LCA0MCwgMTINCi0gSUNPTiAiTEFORFNDQVAiLCAxMDk3LCAxMCwgOTUsIDMyLCAzMg0KLSBJQ09OICJQT1JUUkFJVCIsIDEwOTgsIDEwLCA5NSwgMzIsIDMyDQotIEdST1VQQk9YICJQYXBlciIsIDEwNzQsIDEyMCwgODUsIDE4MCwgNTAsIEJTX0dST1VQQk9YDQotIExURVhUICJTaSZ6ZSIsIDEwODksIDEzMCwgOTUsIDMwLCA5DQotIExURVhUICImU291cmNlIiwgMTA5MCwgMTMwLCAxMTAsIDMwLCA5DQotIENPTUJPQk9YIDExMzcsIDE1NSwgOTUsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUA0KLSBDT01CT0JPWCAxMTM4LCAxNTUsIDExMCwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QDQotfQ0KLQ0KLQ0KLTcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDEzNA0KLVNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VDQotQ0FQVElPTiAiRm9udCINCi1GT05UIDgsICJIZWx2Ig0KLXsNCi0gTFRFWFQgIkZvbnQ6IiwgMTA4OCwgNiwgNiwgNDAsIDkNCi0gTFRFWFQgIiIsIDEwODksIDYwLCA2LCAxNTAsIDkNCi0gREVGUFVTSEJVVFRPTiAiT2siLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLSBQVVNIQlVUVE9OICJDYW5jZWwiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLX0NCi0NCi0NCi04IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAyMDANCi1TVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQ0KLUNBUFRJT04gIkNvbG9yIg0KLUZPTlQgOCwgIkhlbHYiDQotew0KLSBMVEVYVCAiJkJhc2ljIENvbG9yczoiLCAxMDg4LCA2LCA2LCA0MCwgOQ0KLSBMVEVYVCAiJkN1c3RvbSBDb2xvcnM6IiwgMTA4OSwgNiwgMTI2LCA0MCwgOQ0KLSBMVEVYVCAiQ29sb3J8U29sJmlkIiwgMTA5MCwgMTAwLCAxNDYsIDQwLCA5DQotIExURVhUICImSHVlOiIsIDEwOTEsIDE1MCwgMTI2LCA0MCwgOQ0KLSBMVEVYVCAiJlNhdDoiLCAxMDkyLCAxNTAsIDE0NiwgNDAsIDkNCi0gTFRFWFQgIiZMdW06IiwgMTA5MywgMTUwLCAxNjYsIDQwLCA5DQotIExURVhUICImUmVkOiIsIDEwOTQsIDE1MCwgMTI2LCA0MCwgOQ0KLSBMVEVYVCAiJkdyZWVuOiIsIDEwOTUsIDE1MCwgMTQ2LCA0MCwgOQ0KLSBMVEVYVCAiQmwmdWU6IiwgMTA5NiwgMTUwLCAxNjYsIDQwLCA5DQotIERFRlBVU0hCVVRUT04gIk9rIiwgMSwgNiwgMTgyLCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1ANCi0gUFVTSEJVVFRPTiAiJkFkZCB0byBDdXN0b20gQ29sb3JzIiwgMTAyNCwgMTIwLCAxODIsIDEwMCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLSBQVVNIQlVUVE9OICImRGVsZXRlIEN1c3RvbSBDb2xvcnMiLCAxMDI1LCA2LCAxNjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDc2LCAxODIsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotfQ0KLQ0KLQ0KLTkgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDg0DQotU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUNCi1DQVBUSU9OICJGaW5kIg0KLUZPTlQgOCwgIkhlbHYiDQotew0KLSBMVEVYVCAiRmkmbmQgV2hhdDoiLCAxMDg4LCA2LCA2LCA0MCwgOQ0KLSBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQ0KLSBDSEVDS0JPWCAiTWF0Y2ggJldob2xlIFdvcmQgT25seSIsIDEwNDAsIDIwLCAzMCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1ANCi0gQ0hFQ0tCT1ggIk1hdGNoICZDYXNlIiwgMTA0MSwgMjAsIDUwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLSBHUk9VUEJPWCAiRGlyZWN0aW9uIiwgMTA3MiwgOTAsIDQwLCA4MCwgNDAsIEJTX0dST1VQQk9YDQotIFJBRElPQlVUVE9OICImVXAiLCAxMDU2LCAxMDAsIDUwLCA1MCwgMTINCi0gUkFESU9CVVRUT04gIiZEb3duIiwgMTA1NywgMTUwLCA1MCwgNTAsIDEyDQotIERFRlBVU0hCVVRUT04gIiZGaW5kIE5leHQiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLSBQVVNIQlVUVE9OICJDYW5jZWwiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLX0NCi0NCi0NCi0xMCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTE0DQotU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUNCi1DQVBUSU9OICJSZXBsYWNlIg0KLUZPTlQgOCwgIkhlbHYiDQotew0KLSBMVEVYVCAiRmkmbmQgV2hhdDoiLCAxMDg4LCA2LCA2LCA0MCwgOQ0KLSBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQ0KLSBMVEVYVCAiUmUmcGxhY2UgV2l0aDoiLCAxMDkwLCA2LCAyNiwgNDAsIDkNCi0gTFRFWFQgIiIsIDEwOTEsIDYwLCAyNiwgMTUwLCA5DQotIENIRUNLQk9YICJNYXRjaCAmV2hvbGUgV29yZCBPbmx5IiwgMTA0MCwgMjAsIDQwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLSBDSEVDS0JPWCAiTWF0Y2ggJkNhc2UiLCAxMDQxLCAyMCwgNjAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIERFRlBVU0hCVVRUT04gIiZGaW5kIE5leHQiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUA0KLSBQVVNIQlVUVE9OICImUmVwbGFjZSIsIDEwMjQsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIFBVU0hCVVRUT04gIlJlcGxhY2UgJkFsbCIsIDEwMjUsIDIwNiwgNDQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwNiwgNjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QDQotfQ0KLQ0KLSNlbmRpZiAvKkxBTkc9RW4qLworU1lTTUVOVSBNRU5VIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUKK3sKKyBNRU5VSVRFTSAiJlJlc3RvcmUiLCA2MTcyOAorIE1FTlVJVEVNICImTW92ZSIsIDYxNDU2CisgTUVOVUlURU0gIiZTaXplIiwgNjE0NDAKKyBNRU5VSVRFTSAiTWkmbmltaXplIiwgNjE0NzIKKyBNRU5VSVRFTSAiTWEmeGltaXplIiwgNjE0ODgKKyBNRU5VSVRFTSBTRVBBUkFUT1IKKyBNRU5VSVRFTSAiJkNsb3NlXHRBbHQtRjQiLCA2MTUzNgorIE1FTlVJVEVNIFNFUEFSQVRPUgorIE1FTlVJVEVNICImU3dpdGNoIHRvIC4uLlx0Q3RybC1Fc2MiLCA2MTc0NAorIE1FTlVJVEVNIFNFUEFSQVRPUgorIE1FTlVJVEVNICImQWJvdXQgV0lORSAuLi4iLCA2MTc2MQorfQogCi0jaWYgI0xBTkcoRGUpCisKKzIgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgODAsIDgwLCAxNTAsIDE3MAorU1RZTEUgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfRExHRlJBTUUKK3sKKyBQVVNIQlVUVE9OICJDcmVkaXQgJiBMaWNlbnNlIiwgNiwgMzAsIDE1MCwgNDAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJDYW5jZWwiLCAyLCA2MCwgMjUwLCA0MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIk9rIiwgMSwgODAsIDE1MCwgNDAsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCit9CisKKworU1RPUF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgODAsIDgwLCAxNTAsIDc1CitTVFlMRSBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19ETEdGUkFNRQoreworIElDT04gIlNZU0lESV9IQU5EIiwgLTEsIDE2LCAxNiwgMCwgMAorfQorCisKK1FVRVNUSU9OX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA4MCwgODAsIDE1MCwgNzUKK1NUWUxFIFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0RMR0ZSQU1FCit7CisgSUNPTiAiU1lTSURJX1FVRVNUSU9OIiwgLTEsIDE2LCAxNiwgMCwgMAorfQorCisKK0VYQ0xBTUFUSU9OX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA4MCwgODAsIDE1MCwgNzUKK1NUWUxFIFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0RMR0ZSQU1FCit7CisgSUNPTiAiU1lTSURJX0VYQ0xBTUFUSU9OIiwgLTEsIDE2LCAxNiwgMCwgMAorfQorCisKK1NIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIxMywgMTQ5CitTVFlMRSBEU19MT0NBTEVESVQgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIkFib3V0IFgiCitGT05UIDEwLCAiU3lzdGVtIgoreworIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODYsIDEzMCwgNDAsIDE0CisgQ09OVFJPTCAiIiwgLTEsICJTVEFUSUMiLCBTU19CTEFDS0ZSQU1FIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfRElTQUJMRUQsIDQsIDM1LCAyMDUsIDkwCisgTFRFWFQgIlRleHQiLCAxMDAsIDExLCA0MCwgMTkwLCA4MCwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAorIElDT04gIldJTkVJQ09OIiwgLTEsIDE4NSwgMTAsIDE4LCAyMAorfQorCisKKzMgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNzUsIDEzNAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIk9wZW4iCitGT05UIDgsICJIZWx2IgoreworIExURVhUICJGaWxlICZOYW1lOiIsIDEwOTAsIDYsIDYsIDc2LCA5CisgRURJVFRFWFQgMTE1MiwgNiwgMTYsIDkwLCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBFU19PRU1DT05WRVJUIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAorIExJU1RCT1ggMTEyMCwgNiwgMzIsIDkwLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICImRGlyZWN0b3JpZXM6IiwgLTEsIDExMCwgNiwgOTIsIDkKKyBMVEVYVCAiIiwgMTA4OCwgMTEwLCAxOCwgOTIsIDksIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBMSVNUQk9YIDExMjEsIDExMCwgMzIsIDkyLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICJMaXN0IEZpbGVzIG9mICZUeXBlOiIsIDEwODksIDYsIDEwNCwgOTAsIDkKKyBDT01CT0JPWCAxMTM2LCA2LCAxMTQsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIkRyaSZ2ZXM6IiwgMTA5MSwgMTEwLCAxMDQsIDkyLCA5CisgQ09NQk9CT1ggMTEzNywgMTEwLCAxMTQsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIk9wZW4iLCAxLCAyMDgsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwOCwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkhlbHAiLCAxMDM4LCAyMDgsIDQ2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImUmVhZCBPbmx5IiwgMTA0MCwgMjA4LCA2OCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK30KKworCis0IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjc1LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJTYXZlIEFzIC4uLiIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIkZpbGUgJk5hbWU6IiwgMTA5MCwgNiwgNiwgNzYsIDkKKyBFRElUVEVYVCAxMTUyLCA2LCAxNiwgOTAsIDEyLCBFU19BVVRPSFNDUk9MTCB8IEVTX09FTUNPTlZFUlQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCisgTElTVEJPWCAxMTIwLCA2LCAzMiwgOTAsIDY4LCBMQlNfU1RBTkRBUkQgfCBMQlNfT1dORVJEUkFXRklYRUQgfCBMQlNfSEFTU1RSSU5HUyB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZEaXJlY3RvcmllczoiLCAtMSwgMTEwLCA2LCA5MiwgOQorIExURVhUICIiLCAxMDg4LCAxMTAsIDE4LCA5MiwgOSwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAorIExJU1RCT1ggMTEyMSwgMTEwLCAzMiwgOTIsIDY4LCBMQlNfU1RBTkRBUkQgfCBMQlNfT1dORVJEUkFXRklYRUQgfCBMQlNfSEFTU1RSSU5HUyB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIkxpc3QgRmlsZXMgb2YgJlR5cGU6IiwgMTA4OSwgNiwgMTA0LCA5MCwgOQorIENPTUJPQk9YIDExMzYsIDYsIDExNCwgOTAsIDM2LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAiRHJpJnZlczoiLCAxMDkxLCAxMTAsIDEwNCwgOTIsIDkKKyBDT01CT0JPWCAxMTM3LCAxMTAsIDExNCwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgREVGUFVTSEJVVFRPTiAiU2F2ZSBBcyIsIDEsIDIwOCwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQ2FuY2VsIiwgMiwgMjA4LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImSGVscCIsIDEwMzgsIDIwOCwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIiZSZWFkIE9ubHkiLCAxMDQwLCAyMDgsIDY4LCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorfQorCisKKzExIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjc1LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJPcGVuIgorRk9OVCA4LCAiSGVsdiIKK3sKKyBMVEVYVCAiRmlsZSAmTmFtZToiLCAxMDkwLCA2LCA2LCA3NiwgOQorIExURVhUICIiLCAxMTUyLCA2LCAxNiwgOTAsIDEyCisgTElTVEJPWCAxMTIwLCA2LCAzMiwgOTAsIDY4LCBMQlNfU1RBTkRBUkQgfCBMQlNfT1dORVJEUkFXRklYRUQgfCBMQlNfSEFTU1RSSU5HUyB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZEaXJlY3RvcmllczoiLCAtMSwgMTEwLCA2LCA5MiwgOQorIExURVhUICIiLCAxMDg4LCAxMTAsIDE4LCA5MiwgOSwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAorIExJU1RCT1ggMTEyMSwgMTEwLCAzMiwgOTIsIDY4LCBMQlNfU1RBTkRBUkQgfCBMQlNfT1dORVJEUkFXRklYRUQgfCBMQlNfSEFTU1RSSU5HUyB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIkxpc3QgRmlsZXMgb2YgJlR5cGU6IiwgMTA4OSwgNiwgMTA0LCA5MCwgOQorIENPTUJPQk9YIDExMzYsIDYsIDExNCwgOTAsIDM2LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAiRHJpJnZlczoiLCAxMDkxLCAxMTAsIDEwNCwgOTIsIDkKKyBDT01CT0JPWCAxMTM3LCAxMTAsIDExNCwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgREVGUFVTSEJVVFRPTiAiT3BlbiIsIDEsIDIwOCwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQ2FuY2VsIiwgMiwgMjA4LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImSGVscCIsIDEwMzgsIDIwOCwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIiZSZWFkIE9ubHkiLCAxMDQwLCAyMDgsIDY4LCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorfQorCisKKzEyIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjc1LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJTYXZlIEFzIC4uLiIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIkZpbGUgJk5hbWU6IiwgMTA5MCwgNiwgNiwgNzYsIDkKKyBMVEVYVCAiIiwgMTE1MiwgNiwgMTYsIDkwLCAxMgorIExJU1RCT1ggMTEyMCwgNiwgMzIsIDkwLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICImRGlyZWN0b3JpZXM6IiwgLTEsIDExMCwgNiwgOTIsIDkKKyBMVEVYVCAiIiwgMTA4OCwgMTEwLCAxOCwgOTIsIDksIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBMSVNUQk9YIDExMjEsIDExMCwgMzIsIDkyLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICJMaXN0IEZpbGVzIG9mICZUeXBlOiIsIDEwODksIDYsIDEwNCwgOTAsIDkKKyBDT01CT0JPWCAxMTM2LCA2LCAxMTQsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIkRyaSZ2ZXM6IiwgMTA5MSwgMTEwLCAxMDQsIDkyLCA5CisgQ09NQk9CT1ggMTEzNywgMTEwLCAxMTQsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIlNhdmUgQXMiLCAxLCAyMDgsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwOCwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkhlbHAiLCAxMDM4LCAyMDgsIDQ2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImUmVhZCBPbmx5IiwgMTA0MCwgMjA4LCA2OCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK30KKworCis1IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJQcmludCIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIlByaW50ZXI6IiwgMTA4OCwgNiwgNiwgNDAsIDkKKyBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQorIEdST1VQQk9YICJQcmludCBSYW5nZSIsIDEwNzIsIDYsIDMwLCAxNjAsIDY1LCBCU19HUk9VUEJPWAorIFJBRElPQlVUVE9OICImQWxsIiwgMTA1NiwgMTYsIDQ1LCA2MCwgMTIKKyBSQURJT0JVVFRPTiAiUyZlbGVjdGlvbiIsIDEwNTcsIDE2LCA2MCwgNjAsIDEyCisgUkFESU9CVVRUT04gIiZQYWdlcyIsIDEwNTgsIDE2LCA3NSwgNjAsIDEyCisgREVGUFVTSEJVVFRPTiAiUHJpbnQiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJlNldHVwIiwgMTAyNCwgMjA2LCA0NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAiJkZyb206IiwgMTA5MCwgNjAsIDgwLCAzMCwgOQorIExURVhUICImVG86IiwgMTA5MSwgMTIwLCA4MCwgMzAsIDkKKyBMVEVYVCAiUHJpbnQgJlF1YWxpdHk6IiwgMTA5MiwgNiwgMTAwLCA3NiwgOQorIENPTUJPQk9YIDExMzYsIDgwLCAxMDAsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICJQcmludCB0byBGaSZsZSIsIDEwNDAsIDIwLCAxMDAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIkNvbmRlbnNlZCIsIDEwNDEsIDE2MCwgMTAwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorfQorCisKKzYgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDEzNAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIlByaW50IFNldHVwIgorRk9OVCA4LCAiSGVsdiIKK3sKKyBHUk9VUEJPWCAiUHJpbnRlciIsIDEwNzIsIDYsIDEwLCAxODAsIDY1LCBCU19HUk9VUEJPWAorIFJBRElPQlVUVE9OICImRGVmYXVsdCBQcmludGVyIiwgMTA1NiwgMTYsIDIwLCA4MCwgMTIKKyBMVEVYVCAiW25vbmVdIiwgMTA4OCwgMzUsIDM1LCAxMjAsIDkKKyBSQURJT0JVVFRPTiAiU3BlY2lmaWMgJlByaW50ZXIiLCAxMDU3LCAxNiwgNTAsIDgwLCAxMgorIENPTUJPQk9YIDExMzYsIDM1LCA2NSwgMTQ5LCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIk9rIiwgMSwgMjA2LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJDYW5jZWwiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZTZXR1cCIsIDEwMjQsIDIwNiwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgR1JPVVBCT1ggIk9yaWVudGF0aW9uIiwgMTA3MywgNiwgODUsIDEwMCwgNTAsIEJTX0dST1VQQk9YCisgUkFESU9CVVRUT04gIlBvJnJ0cmFpdCIsIDEwNTgsIDUwLCAxMDAsIDQwLCAxMgorIFJBRElPQlVUVE9OICImTGFuZHNjYXBlIiwgMTA1OSwgNTAsIDExNSwgNDAsIDEyCisgSUNPTiAiTEFORFNDQVAiLCAxMDk3LCAxMCwgOTUsIDMyLCAzMgorIElDT04gIlBPUlRSQUlUIiwgMTA5OCwgMTAsIDk1LCAzMiwgMzIKKyBHUk9VUEJPWCAiUGFwZXIiLCAxMDc0LCAxMjAsIDg1LCAxODAsIDUwLCBCU19HUk9VUEJPWAorIExURVhUICJTaSZ6ZSIsIDEwODksIDEzMCwgOTUsIDMwLCA5CisgTFRFWFQgIiZTb3VyY2UiLCAxMDkwLCAxMzAsIDExMCwgMzAsIDkKKyBDT01CT0JPWCAxMTM3LCAxNTUsIDk1LCA5MiwgNjgsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IENCU19IQVNTVFJJTkdTIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKKyBDT01CT0JPWCAxMTM4LCAxNTUsIDExMCwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCit9CisKKworNyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0CitTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiRm9udCIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIkZvbnQ6IiwgMTA4OCwgNiwgNiwgNDAsIDkKKyBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQorIERFRlBVU0hCVVRUT04gIk9rIiwgMSwgMjA2LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJDYW5jZWwiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorfQorCisKKzggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDIwMAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIkNvbG9yIgorRk9OVCA4LCAiSGVsdiIKK3sKKyBMVEVYVCAiJkJhc2ljIENvbG9yczoiLCAxMDg4LCA2LCA2LCA0MCwgOQorIExURVhUICImQ3VzdG9tIENvbG9yczoiLCAxMDg5LCA2LCAxMjYsIDQwLCA5CisgTFRFWFQgIkNvbG9yfFNvbCZpZCIsIDEwOTAsIDEwMCwgMTQ2LCA0MCwgOQorIExURVhUICImSHVlOiIsIDEwOTEsIDE1MCwgMTI2LCA0MCwgOQorIExURVhUICImU2F0OiIsIDEwOTIsIDE1MCwgMTQ2LCA0MCwgOQorIExURVhUICImTHVtOiIsIDEwOTMsIDE1MCwgMTY2LCA0MCwgOQorIExURVhUICImUmVkOiIsIDEwOTQsIDE1MCwgMTI2LCA0MCwgOQorIExURVhUICImR3JlZW46IiwgMTA5NSwgMTUwLCAxNDYsIDQwLCA5CisgTFRFWFQgIkJsJnVlOiIsIDEwOTYsIDE1MCwgMTY2LCA0MCwgOQorIERFRlBVU0hCVVRUT04gIk9rIiwgMSwgNiwgMTgyLCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImQWRkIHRvIEN1c3RvbSBDb2xvcnMiLCAxMDI0LCAxMjAsIDE4MiwgMTAwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkRlbGV0ZSBDdXN0b20gQ29sb3JzIiwgMTAyNSwgNiwgMTY0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDc2LCAxODIsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCit9CisKKworOSBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgODQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJGaW5kIgorRk9OVCA4LCAiSGVsdiIKK3sKKyBMVEVYVCAiRmkmbmQgV2hhdDoiLCAxMDg4LCA2LCA2LCA0MCwgOQorIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5CisgQ0hFQ0tCT1ggIk1hdGNoICZXaG9sZSBXb3JkIE9ubHkiLCAxMDQwLCAyMCwgMzAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIk1hdGNoICZDYXNlIiwgMTA0MSwgMjAsIDUwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIEdST1VQQk9YICJEaXJlY3Rpb24iLCAxMDcyLCA5MCwgNDAsIDgwLCA0MCwgQlNfR1JPVVBCT1gKKyBSQURJT0JVVFRPTiAiJlVwIiwgMTA1NiwgMTAwLCA1MCwgNTAsIDEyCisgUkFESU9CVVRUT04gIiZEb3duIiwgMTA1NywgMTUwLCA1MCwgNTAsIDEyCisgREVGUFVTSEJVVFRPTiAiJkZpbmQgTmV4dCIsIDEsIDIwNiwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQ2FuY2VsIiwgMiwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK30KKworCisxMCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTE0CitTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiUmVwbGFjZSIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIkZpJm5kIFdoYXQ6IiwgMTA4OCwgNiwgNiwgNDAsIDkKKyBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQorIExURVhUICJSZSZwbGFjZSBXaXRoOiIsIDEwOTAsIDYsIDI2LCA0MCwgOQorIExURVhUICIiLCAxMDkxLCA2MCwgMjYsIDE1MCwgOQorIENIRUNLQk9YICJNYXRjaCAmV2hvbGUgV29yZCBPbmx5IiwgMTA0MCwgMjAsIDQwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICJNYXRjaCAmQ2FzZSIsIDEwNDEsIDIwLCA2MCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBERUZQVVNIQlVUVE9OICImRmluZCBOZXh0IiwgMSwgMjA2LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImUmVwbGFjZSIsIDEwMjQsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiUmVwbGFjZSAmQWxsIiwgMTAyNSwgMjA2LCA0NCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJDYW5jZWwiLCAyLCAyMDYsIDY0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorfQorCisjZWxpZiAjTEFORyhEZSkKICNpbmNsdWRlICJzeXNyZXNfRGUucmMiCisjZWxpZiAjTEFORyhObykKKyNpbmNsdWRlICJzeXNyZXNfTm8ucmMiCisjZWxzZQorI2Vycm9yIExBTkcgbm90IHNldCB0byBhbiBpbXBsZW1lbnRlZCBsYW5ndWFnZS4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvcmMvc3lzcmVzX0RlLnJjIGIvcmMvc3lzcmVzX0RlLnJjCmluZGV4IDllNTRkNDcuLjAzODUyYmMgMTAwNjQ0Ci0tLSBhL3JjL3N5c3Jlc19EZS5yYworKysgYi9yYy9zeXNyZXNfRGUucmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDUwLCA0NCwgMjEzLCAxNDkKIFNUWUxFIERTX0xPQ0FMRURJVCB8IERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQotQ0FQVElPTiAi3GJlciBYIgorQ0FQVElPTiAiIgogRk9OVCAxMCwgIlN5c3RlbSIKIHsKICBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDg2LCAxMzAsIDQwLCAxNApAQCAtOTUsNyArOTUsNyBAQAogIENPTUJPQk9YIDExMzcsIDExMCwgMTE0LCA5MiwgNjgsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IENCU19IQVNTVFJJTkdTIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICBERUZQVVNIQlVUVE9OICJTcGVpY2hlcm4gYWxzIiwgMSwgMjA4LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKICBQVVNIQlVUVE9OICJBYmJyZWNoZW4iLCAyLCAyMDgsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIiZIZWxwIiwgMTAzOCwgMjA4LCA0NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImSGlsZmUiLCAxMDM4LCAyMDgsIDQ2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogIENIRUNLQk9YICImU2NocmVpYmdlc2No/HR6dCIsIDEwNDAsIDIwOCwgNjgsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiB9CiAKQEAgLTExNyw3ICsxMTcsNyBAQAogIENPTUJPQk9YIDExMzcsIDExMCwgMTE0LCA5MiwgNjgsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IENCU19IQVNTVFJJTkdTIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICBERUZQVVNIQlVUVE9OICLWZmZuZW4iLCAxLCAyMDgsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAogIFBVU0hCVVRUT04gIkFiYnJlY2hlbiIsIDIsIDIwOCwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiJkhlbHAiLCAxMDM4LCAyMDgsIDQ2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZIaWxmZSIsIDEwMzgsIDIwOCwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiAgQ0hFQ0tCT1ggIiZTY2hyZWliZ2VzY2j8dHp0IiwgMTA0MCwgMjA4LCA2OCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIH0KIApAQCAtMTM5LDcgKzEzOSw3IEBACiAgQ09NQk9CT1ggMTEzNywgMTEwLCAxMTQsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAogIERFRlBVU0hCVVRUT04gIlNwZWljaGVybiBhbHMiLCAxLCAyMDgsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAogIFBVU0hCVVRUT04gIkFiYnJlY2hlbiIsIDIsIDIwOCwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiJkhlbHAiLCAxMDM4LCAyMDgsIDQ2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZIaWxmZSIsIDEwMzgsIDIwOCwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiAgQ0hFQ0tCT1ggIiZTY2hyZWliZ2VzY2j8dHp0IiwgMTA0MCwgMjA4LCA2OCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIH0KIApAQCAtMTg2LDcgKzE4Niw3IEBACiAgSUNPTiAiTEFORFNDQVAiLCAxMDk3LCAxMCwgOTUsIDMyLCAzMgogIElDT04gIlBPUlRSQUlUIiwgMTA5OCwgMTAsIDk1LCAzMiwgMzIKICBHUk9VUEJPWCAiUGFwZXIiLCAxMDc0LCAxMjAsIDg1LCAxODAsIDUwLCBCU19HUk9VUEJPWAotIExURVhUICImR3LW32UiLCAxMDg5LCAxMzAsIDk1LCAzMCwgOQorIExURVhUICImR3L232UiLCAxMDg5LCAxMzAsIDk1LCAzMCwgOQogIExURVhUICJQJmFwaWVycXVlbGxlIiwgMTA5MCwgMTMwLCAxMTAsIDMwLCA5CiAgQ09NQk9CT1ggMTEzNywgMTU1LCA5NSwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgQ09NQk9CT1ggMTEzOCwgMTU1LCAxMTAsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUApkaWZmIC0tZ2l0IGEvcmMvc3lzcmVzX05vLnJjIGIvcmMvc3lzcmVzX05vLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYTJiNTgKLS0tIC9kZXYvbnVsbAorKysgYi9yYy9zeXNyZXNfTm8ucmMKQEAgLTAsMCArMSwyNjEgQEAKK1NZU01FTlUgTUVOVSBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFCit7CisgTUVOVUlURU0gIiZHamVub3BwcmV0dCIsIDYxNzI4CisgTUVOVUlURU0gIiZGbHl0dCIsIDYxNDU2CisgTUVOVUlURU0gIiZTdPhycmVsc2UiLCA2MTQ0MAorIE1FTlVJVEVNICImTWluaW1lciIsIDYxNDcyCisgTUVOVUlURU0gIk1hJmtzaW1lciIsIDYxNDg4CisgTUVOVUlURU0gU0VQQVJBVE9SCisgTUVOVUlURU0gIiZBdnNsdXR0XHRBbHQtRjQiLCA2MTUzNgorIE1FTlVJVEVNIFNFUEFSQVRPUgorIE1FTlVJVEVNICImQnl0dCB0aWwgLi4uXHRDdHJsLUVzYyIsIDYxNzQ0CisgTUVOVUlURU0gU0VQQVJBVE9SCisgTUVOVUlURU0gIiZPbSBXSU5FIC4uLiIsIDYxNzYxCit9CisKKworMiBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA4MCwgODAsIDE1MCwgMTcwCitTVFlMRSBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19ETEdGUkFNRQoreworIFBVU0hCVVRUT04gIkxpc2VucyBvc3YuIiwgNiwgMzAsIDE1MCwgNDAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJBdmJyeXQiLCAyLCA2MCwgMjUwLCA0MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIk9rIiwgMSwgODAsIDE1MCwgNDAsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCit9CisKKworU1RPUF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgODAsIDgwLCAxNTAsIDc1CitTVFlMRSBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19ETEdGUkFNRQoreworIElDT04gIlNZU0lESV9IQU5EIiwgLTEsIDE2LCAxNiwgMCwgMAorfQorCisKK1FVRVNUSU9OX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA4MCwgODAsIDE1MCwgNzUKK1NUWUxFIFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0RMR0ZSQU1FCit7CisgSUNPTiAiU1lTSURJX1FVRVNUSU9OIiwgLTEsIDE2LCAxNiwgMCwgMAorfQorCisKK0VYQ0xBTUFUSU9OX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA4MCwgODAsIDE1MCwgNzUKK1NUWUxFIFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0RMR0ZSQU1FCit7CisgSUNPTiAiU1lTSURJX0VYQ0xBTUFUSU9OIiwgLTEsIDE2LCAxNiwgMCwgMAorfQorCisKK1NIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIxMywgMTQ5CitTVFlMRSBEU19MT0NBTEVESVQgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIk9tIFgiCitGT05UIDEwLCAiU3lzdGVtIgoreworIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODYsIDEzMCwgNDAsIDE0CisgQ09OVFJPTCAiIiwgLTEsICJTVEFUSUMiLCBTU19CTEFDS0ZSQU1FIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfRElTQUJMRUQsIDQsIDM1LCAyMDUsIDkwCisgTFRFWFQgIlRla3N0IiwgMTAwLCAxMSwgNDAsIDE5MCwgODAsIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBJQ09OICJXSU5FSUNPTiIsIC0xLCAxODUsIDEwLCAxOCwgMjAKK30KKworCiszIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjc1LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICLFcG5lIgorRk9OVCA4LCAiSGVsdiIKK3sKKyBMVEVYVCAiJkZpbG5hdm46IiwgMTA5MCwgNiwgNiwgNzYsIDkKKyBFRElUVEVYVCAxMTUyLCA2LCAxNiwgOTAsIDEyLCBFU19BVVRPSFNDUk9MTCB8IEVTX09FTUNPTlZFUlQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCisgTElTVEJPWCAxMTIwLCA2LCAzMiwgOTAsIDY4LCBMQlNfU1RBTkRBUkQgfCBMQlNfT1dORVJEUkFXRklYRUQgfCBMQlNfSEFTU1RSSU5HUyB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZLYXRhbG9nZXI6IiwgLTEsIDExMCwgNiwgOTIsIDkKKyBMVEVYVCAiIiwgMTA4OCwgMTEwLCAxOCwgOTIsIDksIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBMSVNUQk9YIDExMjEsIDExMCwgMzIsIDkyLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICJMaXN0ZSBvdmVyIGZpbGVyIGF2ICZ0eXBlOiIsIDEwODksIDYsIDEwNCwgOTAsIDkKKyBDT01CT0JPWCAxMTM2LCA2LCAxMTQsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZLYXRhbG9nZXI6IiwgMTA5MSwgMTEwLCAxMDQsIDkyLCA5CisgQ09NQk9CT1ggMTEzNywgMTEwLCAxMTQsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIsVwbmUiLCAxLCAyMDgsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkF2YnJ5dCIsIDIsIDIwOCwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkhqZWxwIiwgMTAzOCwgMjA4LCA0NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiJlNrcml2ZWJlc2t5dHRldCIsIDEwNDAsIDIwOCwgNjgsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCit9CisKKworNCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI3NSwgMTM0CitTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiTGFncmUgc29tIC4uLiIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIiZGaWxuYXZuOiIsIDEwOTAsIDYsIDYsIDc2LCA5CisgRURJVFRFWFQgMTE1MiwgNiwgMTYsIDkwLCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBFU19PRU1DT05WRVJUIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAorIExJU1RCT1ggMTEyMCwgNiwgMzIsIDkwLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICImS2F0YWxvZ2VyOiIsIC0xLCAxMTAsIDYsIDkyLCA5CisgTFRFWFQgIiIsIDEwODgsIDExMCwgMTgsIDkyLCA5LCBTU19OT1BSRUZJWCB8IFdTX0dST1VQCisgTElTVEJPWCAxMTIxLCAxMTAsIDMyLCA5MiwgNjgsIExCU19TVEFOREFSRCB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX0RJU0FCTEVOT1NDUk9MTCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAiTGlzdGUgb3ZlciBmaWxlciBhdiAmdHlwZToiLCAxMDg5LCA2LCAxMDQsIDkwLCA5CisgQ09NQk9CT1ggMTEzNiwgNiwgMTE0LCA5MCwgMzYsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICImS2F0YWxvZ2VyOiIsIDEwOTEsIDExMCwgMTA0LCA5MiwgOQorIENPTUJPQk9YIDExMzcsIDExMCwgMTE0LCA5MiwgNjgsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IENCU19IQVNTVFJJTkdTIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKKyBERUZQVVNIQlVUVE9OICJMYWdyZSBzb20iLCAxLCAyMDgsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkF2YnJ5dCIsIDIsIDIwOCwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkhqZWxwIiwgMTAzOCwgMjA4LCA0NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiJlNrcml2ZWJlc2t5dHRldCIsIDEwNDAsIDIwOCwgNjgsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCit9CisKKworMTEgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNzUsIDEzNAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIsVwbmUiCitGT05UIDgsICJIZWx2IgoreworIExURVhUICImRmlsbmF2bjoiLCAxMDkwLCA2LCA2LCA3NiwgOQorIExURVhUICIiLCAxMTUyLCA2LCAxNiwgOTAsIDEyCisgTElTVEJPWCAxMTIwLCA2LCAzMiwgOTAsIDY4LCBMQlNfU1RBTkRBUkQgfCBMQlNfT1dORVJEUkFXRklYRUQgfCBMQlNfSEFTU1RSSU5HUyB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZLYXRhbG9nZXI6IiwgLTEsIDExMCwgNiwgOTIsIDkKKyBMVEVYVCAiIiwgMTA4OCwgMTEwLCAxOCwgOTIsIDksIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBMSVNUQk9YIDExMjEsIDExMCwgMzIsIDkyLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICJMaXN0ZSBvdmVyIGZpbGVyIGF2ICZ0eXBlOiIsIDEwODksIDYsIDEwNCwgOTAsIDkKKyBDT01CT0JPWCAxMTM2LCA2LCAxMTQsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZLYXRhbG9nZXI6IiwgMTA5MSwgMTEwLCAxMDQsIDkyLCA5CisgQ09NQk9CT1ggMTEzNywgMTEwLCAxMTQsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIsVwbmUiLCAxLCAyMDgsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkF2YnJ5dCIsIDIsIDIwOCwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkhqZWxwIiwgMTAzOCwgMjA4LCA0NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiJlNrcml2ZWJlc2t5dHRldCIsIDEwNDAsIDIwOCwgNjgsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCit9CisKKworMTIgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNzUsIDEzNAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIkxhZ3JlIHNvbSAuLi4iCitGT05UIDgsICJIZWx2IgoreworIExURVhUICImRmlsbmF2bjoiLCAxMDkwLCA2LCA2LCA3NiwgOQorIExURVhUICIiLCAxMTUyLCA2LCAxNiwgOTAsIDEyCisgTElTVEJPWCAxMTIwLCA2LCAzMiwgOTAsIDY4LCBMQlNfU1RBTkRBUkQgfCBMQlNfT1dORVJEUkFXRklYRUQgfCBMQlNfSEFTU1RSSU5HUyB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZLYXRhbG9nZXI6IiwgLTEsIDExMCwgNiwgOTIsIDkKKyBMVEVYVCAiIiwgMTA4OCwgMTEwLCAxOCwgOTIsIDksIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBMSVNUQk9YIDExMjEsIDExMCwgMzIsIDkyLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICJMaXN0ZSBvdmVyIGZpbGVyIGF2ICZ0eXBlOiIsIDEwODksIDYsIDEwNCwgOTAsIDkKKyBDT01CT0JPWCAxMTM2LCA2LCAxMTQsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZLYXRhbG9nZXI6IiwgMTA5MSwgMTEwLCAxMDQsIDkyLCA5CisgQ09NQk9CT1ggMTEzNywgMTEwLCAxMTQsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIkxhZ3JlIHNvbSIsIDEsIDIwOCwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQXZicnl0IiwgMiwgMjA4LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImSGplbHAiLCAxMDM4LCAyMDgsIDQ2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImU2tyaXZlYmVza3l0dGV0IiwgMTA0MCwgMjA4LCA2OCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK30KKworCis1IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJTa3JpdiIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIlNrcml2ZXI6IiwgMTA4OCwgNiwgNiwgNDAsIDkKKyBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQorIEdST1VQQk9YICJTa3JpdiBkZWwiLCAxMDcyLCA2LCAzMCwgMTYwLCA2NSwgQlNfR1JPVVBCT1gKKyBSQURJT0JVVFRPTiAiJkFsbGUiLCAxMDU2LCAxNiwgNDUsIDYwLCAxMgorIFJBRElPQlVUVE9OICImTWFya2VydCIsIDEwNTcsIDE2LCA2MCwgNjAsIDEyCisgUkFESU9CVVRUT04gIiZTaWRlciIsIDEwNTgsIDE2LCA3NSwgNjAsIDEyCisgREVGUFVTSEJVVFRPTiAiU2tyaXYiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkF2YnJ5dCIsIDIsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJk9wcHNldHQiLCAxMDI0LCAyMDYsIDQ2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICImRnJhOiIsIDEwOTAsIDYwLCA4MCwgMzAsIDkKKyBMVEVYVCAiJlRpbDoiLCAxMDkxLCAxMjAsIDgwLCAzMCwgOQorIExURVhUICImVXRza3JpZnRza3ZhbGl0ZXQ6IiwgMTA5MiwgNiwgMTAwLCA3NiwgOQorIENPTUJPQk9YIDExMzYsIDgwLCAxMDAsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImU2tyaXYgdGlsIGZpbCIsIDEwNDAsIDIwLCAxMDAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIlNhbW1lbnRyeWtrZXQiLCAxMDQxLCAxNjAsIDEwMCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK30KKworCis2IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJTa3JpdmVvcHBzZXR0IgorRk9OVCA4LCAiSGVsdiIKK3sKKyBHUk9VUEJPWCAiU2tyaXZlciIsIDEwNzIsIDYsIDEwLCAxODAsIDY1LCBCU19HUk9VUEJPWAorIFJBRElPQlVUVE9OICImU3RhbmRhcmRza3JpdmVyIiwgMTA1NiwgMTYsIDIwLCA4MCwgMTIKKyBMVEVYVCAiW2luZ2VuXSIsIDEwODgsIDM1LCAzNSwgMTIwLCA5CisgUkFESU9CVVRUT04gIlNwZXNpZmlrayAmc2tyaXZlciIsIDEwNTcsIDE2LCA1MCwgODAsIDEyCisgQ09NQk9CT1ggMTEzNiwgMzUsIDY1LCAxNDksIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgREVGUFVTSEJVVFRPTiAiT2siLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkF2YnJ5dCIsIDIsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJk9wcHNldHQiLCAxMDI0LCAyMDYsIDQ2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIEdST1VQQk9YICJPcmllbnRlcmluZyIsIDEwNzMsIDYsIDg1LCAxMDAsIDUwLCBCU19HUk9VUEJPWAorIFJBRElPQlVUVE9OICImUG9ydHJldHQiLCAxMDU4LCA1MCwgMTAwLCA0MCwgMTIKKyBSQURJT0JVVFRPTiAiJkxhbmRza2FwIiwgMTA1OSwgNTAsIDExNSwgNDAsIDEyCisgSUNPTiAiTEFORFNDQVAiLCAxMDk3LCAxMCwgOTUsIDMyLCAzMgorIElDT04gIlBPUlRSQUlUIiwgMTA5OCwgMTAsIDk1LCAzMiwgMzIKKyBHUk9VUEJPWCAiUGFwaXIiLCAxMDc0LCAxMjAsIDg1LCAxODAsIDUwLCBCU19HUk9VUEJPWAorIExURVhUICImU3T4cnJlbHNlIiwgMTA4OSwgMTMwLCA5NSwgMzAsIDkKKyBMVEVYVCAiJktpbGRlIiwgMTA5MCwgMTMwLCAxMTAsIDMwLCA5CisgQ09NQk9CT1ggMTEzNywgMTU1LCA5NSwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgQ09NQk9CT1ggMTEzOCwgMTU1LCAxMTAsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorfQorCisKKzcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDEzNAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIkZvbnQiCitGT05UIDgsICJIZWx2IgoreworIExURVhUICJGb250OiIsIDEwODgsIDYsIDYsIDQwLCA5CisgTFRFWFQgIiIsIDEwODksIDYwLCA2LCAxNTAsIDkKKyBERUZQVVNIQlVUVE9OICJPayIsIDEsIDIwNiwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQXZicnl0IiwgMiwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK30KKworCis4IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAyMDAKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJGYXJnZSIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIiZHcnVubmxlZ2dlbmRlIGZhcmdlcjoiLCAxMDg4LCA2LCA2LCA0MCwgOQorIExURVhUICImRWdlbmRlZmluZXJ0ZSBmYXJnZXI6IiwgMTA4OSwgNiwgMTI2LCA0MCwgOQorIExURVhUICImRW5zZmFyZ2V0IiwgMTA5MCwgMTAwLCAxNDYsIDQwLCA5CisgTFRFWFQgIiZJbnQ6IiwgMTA5MSwgMTUwLCAxMjYsIDQwLCA5CisgTFRFWFQgIiZNZXQ6IiwgMTA5MiwgMTUwLCAxNDYsIDQwLCA5CisgTFRFWFQgIiZMdW06IiwgMTA5MywgMTUwLCAxNjYsIDQwLCA5CisgTFRFWFQgIiZS+GQ6IiwgMTA5NCwgMTUwLCAxMjYsIDQwLCA5CisgTFRFWFQgIiZHcvhubjoiLCAxMDk1LCAxNTAsIDE0NiwgNDAsIDkKKyBMVEVYVCAiJkJs5ToiLCAxMDk2LCAxNTAsIDE2NiwgNDAsIDkKKyBERUZQVVNIQlVUVE9OICJPayIsIDEsIDYsIDE4MiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkxlZ2cgdGlsIGVnZW5kZWZpbmVydCBmYXJnZSIsIDEwMjQsIDEyMCwgMTgyLCAxMDAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImRmplcm4gZWdlbmRlZmluZXJ0ZSBmYXJnZXIiLCAxMDI1LCA2LCAxNjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQXZicnl0IiwgMiwgNzYsIDE4MiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK30KKworCis5IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCA4NAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIkZpbm4iCitGT05UIDgsICJIZWx2IgoreworIExURVhUICImRmlubiBodmE6IiwgMTA4OCwgNiwgNiwgNDAsIDkKKyBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQorIENIRUNLQk9YICImS3VuIGhlbGUgb3JkIiwgMTA0MCwgMjAsIDMwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImU2tpbGwgcOUgc3RvcmUvc23lIGJva3N0YXZlciIsIDEwNDEsIDIwLCA1MCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBHUk9VUEJPWCAiUmV0bmluZyIsIDEwNzIsIDkwLCA0MCwgODAsIDQwLCBCU19HUk9VUEJPWAorIFJBRElPQlVUVE9OICImT3BwIiwgMTA1NiwgMTAwLCA1MCwgNTAsIDEyCisgUkFESU9CVVRUT04gIiZOZWQiLCAxMDU3LCAxNTAsIDUwLCA1MCwgMTIKKyBERUZQVVNIQlVUVE9OICImRmlubiBuZXN0ZSIsIDEsIDIwNiwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQXZicnl0IiwgMiwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK30KKworCisxMCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTE0CitTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiQnl0dCIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIiZGaW5uIGh2YToiLCAxMDg4LCA2LCA2LCA0MCwgOQorIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5CisgTFRFWFQgIiZCeXR0IG1lZDoiLCAxMDkwLCA2LCAyNiwgNDAsIDkKKyBMVEVYVCAiIiwgMTA5MSwgNjAsIDI2LCAxNTAsIDkKKyBDSEVDS0JPWCAiJkt1biBoZWxlIG9yZCIsIDEwNDAsIDIwLCA0MCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiJlNraWxsIHDlIHN0b3JlL3Nt5SBib2tzdGF2ZXIiLCAxMDQxLCAyMCwgNjAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgREVGUFVTSEJVVFRPTiAiJkZpbm4gbmVzdGUiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZCeXR0IiwgMTAyNCwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImQnl0dCBhbHQiLCAxMDI1LCAyMDYsIDQ0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkF2YnJ5dCIsIDIsIDIwNiwgNjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCit9CmRpZmYgLS1naXQgYS9yYy93aW5lcmMuYyBiL3JjL3dpbmVyYy5jCmluZGV4IGIyMGNhMzIuLjA2ZGM3ZGYgMTAwNjQ0Ci0tLSBhL3JjL3dpbmVyYy5jCisrKyBiL3JjL3dpbmVyYy5jCkBAIC0zLDcgKzMsNiBAQAogICogQ29weXJpZ2h0ICBNYXJ0aW4gdm9uIExvZXdpcywgMTk5NAogICoKICAqLwotCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgTWFydGluIHZvbiBMb2V3aXMsIDE5OTQiOwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTExLDYgKzEwLDggQEAKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN5cy9mY250bC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxuZWV4ZS5oPgogI2luY2x1ZGUgInJjLmgiCkBAIC0yNSw3ICsyNiw3IEBACiBGSUxFICpoZWFkZXIsKmNvZGU7CiBjaGFyIGhuYW1lWzI1Nl0sc25hbWVbMjU2XTsKIAotbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCitpbnQgbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCiB7ICAKIAlleHRlcm4gaW50IHl5ZGVidWc7CiAJZXh0ZXJuIGNoYXIqIG9wdGFyZzsKZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkLmMgYi90b29scy9idWlsZC5jCmluZGV4IDIyNzc4YjAuLjk1ODk5NWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2J1aWxkLmMKKysrIGIvdG9vbHMvYnVpbGQuYwpAQCAtMzEzLDkgKzMxMyw3IEBACiAgICAgY2hhciAqdG9rZW47CiAgICAgT1JEREVGICpvZHA7CiAgICAgT1JERlVOQ0RFRiAqZmRwOwotICAgIGludCBhcmdfdHlwZXNbMTZdOwogICAgIGludCBpOwotICAgIGludCBhcmdfbnVtOwogICAgIGludCBjdXJyZW50X29mZnNldDsKICAgICBpbnQgYXJnX3NpemU7CiAJCkBAIC00NjksNyArNDY3LDYgQEAKICAgICBPUkRSRVRERUYgKnJkcDsKICAgICBjaGFyICp0b2tlbjsKICAgICBjaGFyICplbmRwdHI7Ci0gICAgaW50IHZhbHVlOwogICAgIAogICAgIGlmIChvcmRpbmFsID49IE1BWF9PUkRJTkFMUykKICAgICB7CkBAIC02MDQsMTEgKzYwMSwxMSBAQAogICAgIHJldHVybiAwOwogfQogCi1Jbml0Q29udGV4dCgpCit2b2lkCitJbml0Q29udGV4dCh2b2lkKQogewogICAgIHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCBjb250ZXh0OwogICAgIGludCBpOwotICAgIGludCBqOwogICAgIAogICAgIG5fY29udGV4dF9zdHJpbmdzID0gc2l6ZW9mKGNvbnRleHQpIC8gNDsKICAgICBjb250ZXh0X3N0cmluZ3MgICA9IChjaGFyICoqKSBtYWxsb2Mobl9jb250ZXh0X3N0cmluZ3MgKiBzaXplb2YoY2hhciAqKikpOwpAQCAtNzA3LDEwICs3MDQsNyBAQAogICAgIE9SRFJFVERFRiAqcmRwOwogICAgIEZJTEUgKmZwOwogICAgIGNoYXIgZmlsZW5hbWVbODBdOwotICAgIGNoYXIgYnVmZmVyWzgwXTsKLSAgICBjaGFyICpwOwotICAgIGludCBpLCBjaTsKLSAgICBpbnQgYWRkX2NvdW50OworICAgIGludCBpLCBjaSwgYWRkX2NvdW50OwogICAgIAogICAgIGlmIChhcmdjIDwgMikKICAgICB7CkBAIC05NzEsNSArOTY1LDYgQEAKICAgICBmcHJpbnRmKGZwLCAifTtcbiIpOwogCiAgICAgZmNsb3NlKGZwKTsKKyAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvbWFrZV9kZWJ1ZyBiL3Rvb2xzL21ha2VfZGVidWcKaW5kZXggZTdkNTQ2MC4uZGMxZWMwOSAxMDA3NTUKLS0tIGEvdG9vbHMvbWFrZV9kZWJ1ZworKysgYi90b29scy9tYWtlX2RlYnVnCkBAIC05MCwxMSArOTAsMTQgQEAKIAljYXQgPDwrK0VPRisrID4+JERFQlVHX0gKICNpZmRlZiBERUJVR19SVU5USU1FCiAjZGVmaW5lIGRwcmludGZfJHggaWYoZGVidWdfbXNnX2VuYWJsZWRbJGldKSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ18keCBkZWJ1Z19tc2dfZW5hYmxlZFskaV0KICNlbHNlCiAjaWZkZWYgREVCVUdfJHkKICNkZWZpbmUgZHByaW50Zl8keCBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ18keCAxCiAjZWxzZQogI2RlZmluZSBkcHJpbnRmXyR4CisjZGVmaW5lIGRlYnVnZ2luZ18keCAwCiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS93aW5kb3dzL2NhcmV0LmMgYi93aW5kb3dzL2NhcmV0LmMKaW5kZXggYmMwOWUyMi4uNWMzMWQxOSAxMDA2NDQKLS0tIGEvd2luZG93cy9jYXJldC5jCisrKyBiL3dpbmRvd3MvY2FyZXQuYwpAQCAtMiwxNCArMiwxMyBAQAogICogQ2FyZXQgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IDE5OTMgRGF2aWQgTWV0Y2FsZmUKLSAqLwotCisgKgogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBEYXZpZCBNZXRjYWxmZSwgMTk5MyI7CisqLwogCiAjaW5jbHVkZSAid2luZG93cy5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX0NBUkVUICovCi0vKiAjdW5kZWYgIERFQlVHX0NBUkVUICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogCmRpZmYgLS1naXQgYS93aW5kb3dzL2NsYXNzLmMgYi93aW5kb3dzL2NsYXNzLmMKaW5kZXggNmM2YWU3Yi4uN2Y5MzdiYiAxMDA2NDQKLS0tIGEvd2luZG93cy9jbGFzcy5jCisrKyBiL3dpbmRvd3MvY2xhc3MuYwpAQCAtMiw5ICsyLDkgQEAKICAqIFdpbmRvdyBjbGFzc2VzIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAxOTkzIEFsZXhhbmRyZSBKdWxsaWFyZAotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5MyI7CisqLwogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlICJkY2UuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogLyogI2RlZmluZSBERUJVR19DTEFTUyAqLwotLyogI3VuZGVmICBERUJVR19DTEFTUyAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKIApkaWZmIC0tZ2l0IGEvd2luZG93cy9jdXJzb3IuYyBiL3dpbmRvd3MvY3Vyc29yLmMKaW5kZXggNGFhOGEwNi4uNGQzNjI4YSAxMDA2NDQKLS0tIGEvd2luZG93cy9jdXJzb3IuYworKysgYi93aW5kb3dzL2N1cnNvci5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICAgIFdJTkUKLSovCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIE1hcnRpbiBBeW90dGUsIDE5OTMiOworKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0xNiwyMSArMTYsMTggQEAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAid2luLmgiCiAjaW5jbHVkZSAiZ2RpLmgiCisjaW5jbHVkZSAibGlicmFyeS5oIgogI2luY2x1ZGUgIndpbmUuaCIKICNpbmNsdWRlICJjdXJzb3IuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogLyogI2RlZmluZSBERUJVR19DVVJTT1IgICAqLwotLyogI3VuZGVmICBERUJVR19DVVJTT1IgICAqLwogLyogI2RlZmluZSBERUJVR19SRVNPVVJDRSAqLwotLyogI3VuZGVmICBERUJVR19SRVNPVVJDRSAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKIHN0YXRpYyBpbnQgU2hvd0N1cnNDb3VudCA9IDA7CiBzdGF0aWMgSENVUlNPUiBoQWN0aXZlQ3Vyc29yOwogc3RhdGljIEhDVVJTT1IgaEVtcHR5Q3Vyc29yID0gMDsKIFJFQ1QJQ2xpcEN1cnNvclJlY3Q7Ci1leHRlcm4gSElOU1RBTkNFIGhTeXNSZXM7Ci1leHRlcm4gaW50IGRlc2t0b3BYLCBkZXNrdG9wWTsgICAvKiBtaXNjL21haW4uYyAqLwogCiBzdGF0aWMgc3RydWN0IHsgTFBTVFIgbmFtZTsgSENVUlNPUiBjdXJzb3I7IH0gc3lzdGVtX2N1cnNvcltdID0KIHsKZGlmZiAtLWdpdCBhL3dpbmRvd3MvZGNlLmMgYi93aW5kb3dzL2RjZS5jCmluZGV4IDlkZGMxZjQuLjMxNDhiYTIgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZGNlLmMKKysrIGIvd2luZG93cy9kY2UuYwpAQCAtMiw5ICsyLDkgQEAKICAqIFVTRVIgRENFIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAxOTkzIEFsZXhhbmRyZSBKdWxsaWFyZAotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5MyI7CisqLwogCiAjaW5jbHVkZSAiZGNlLmgiCiAjaW5jbHVkZSAiY2xhc3MuaCIKQEAgLTE0LDE0ICsxNCwxMCBAQAogI2luY2x1ZGUgInN5c21ldHJpY3MuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogLyogI2RlZmluZSBERUJVR19EQyAqLwotLyogI3VuZGVmICBERUJVR19EQyAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKLQogI2RlZmluZSBOQl9EQ0UgICAgNSAgLyogTnVtYmVyIG9mIERDRXMgY3JlYXRlZCBhdCBzdGFydHVwICovCiAKLWV4dGVybiBEaXNwbGF5ICogZGlzcGxheTsKLQogc3RhdGljIEhBTkRMRSBmaXJzdERDRSA9IDA7CiBzdGF0aWMgSERDIGRlZmF1bHREQ3N0YXRlID0gMDsKIApkaWZmIC0tZ2l0IGEvd2luZG93cy9kZWZkbGcuYyBiL3dpbmRvd3MvZGVmZGxnLmMKaW5kZXggY2FkYzQ3ZS4uNGJkODU5MiAxMDA2NDQKLS0tIGEvd2luZG93cy9kZWZkbGcuYworKysgYi93aW5kb3dzL2RlZmRsZy5jCkBAIC0yLDIyICsyLDE3IEBACiAgKiBEZWZhdWx0IGRpYWxvZyBwcm9jZWR1cmUKICAqCiAgKiBDb3B5cmlnaHQgMTk5MyBBbGV4YW5kcmUgSnVsbGlhcmQKLSAqLwotCisgKgogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBBbGV4YW5kcmUgSnVsbGlhcmQsIDE5OTMiOworKi8KIAogI2luY2x1ZGUgIndpbmRvd3MuaCIKICNpbmNsdWRlICJkaWFsb2cuaCIKICNpbmNsdWRlICJ3aW4uaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgotLyogI2RlZmluZSBERUJVR19ESUFMT0cgLyogKi8KLS8qICN1bmRlZiAgREVCVUdfRElBTE9HIC8qICovCisvKiAjZGVmaW5lIERFQlVHX0RJQUxPRyAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKLQotZXh0ZXJuIEhXTkQgRElBTE9HX0dldEZpcnN0VGFiSXRlbSggSFdORCBod25kRGxnICk7ICAvKiB3aW5kb3dzL2RpYWxvZy5jICovCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgREVGRExHX1NldEZvY3VzCiAgKgpkaWZmIC0tZ2l0IGEvd2luZG93cy9kZWZ3bmQuYyBiL3dpbmRvd3MvZGVmd25kLmMKaW5kZXggYTIzZDc2NC4uYjAyYTM3MSAxMDA2NDQKLS0tIGEvd2luZG93cy9kZWZ3bmQuYworKysgYi93aW5kb3dzL2RlZnduZC5jCkBAIC0yLDkgKzIsOSBAQAogICogRGVmYXVsdCB3aW5kb3cgcHJvY2VkdXJlCiAgKgogICogQ29weXJpZ2h0IDE5OTMgQWxleGFuZHJlIEp1bGxpYXJkCi0gKi8KIAogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBBbGV4YW5kcmUgSnVsbGlhcmQsIDE5OTMiOworKi8KIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0xMiwyNyArMTIsMTYgQEAKICNpbmNsdWRlICJ3aW4uaCIKICNpbmNsdWRlICJjbGFzcy5oIgogI2luY2x1ZGUgInVzZXIuaCIKKyNpbmNsdWRlICJub25jbGllbnQuaCIKKyNpbmNsdWRlICJ3aW5wb3MuaCIKICNpbmNsdWRlICJzeXNjb2xvci5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX01FU1NBR0UgKi8KLS8qICN1bmRlZiAgREVCVUdfTUVTU0FHRSAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKLQogICAvKiBMYXN0IENPTE9SIGlkICovCiAjZGVmaW5lIENPTE9SX01BWCAgIENPTE9SX0JUTkhJR0hMSUdIVAogCi1leHRlcm4gTE9ORyBOQ19IYW5kbGVOQ1BhaW50KCBIV05EIGh3bmQsIEhSR04gaHJnbiApOwotZXh0ZXJuIExPTkcgTkNfSGFuZGxlTkNBY3RpdmF0ZSggSFdORCBod25kLCBXT1JEIHdQYXJhbSApOwotZXh0ZXJuIExPTkcgTkNfSGFuZGxlTkNDYWxjU2l6ZSggSFdORCBod25kLCBOQ0NBTENTSVpFX1BBUkFNUyAqcGFyYW1zICk7Ci1leHRlcm4gTE9ORyBOQ19IYW5kbGVOQ0hpdFRlc3QoIEhXTkQgaHduZCwgUE9JTlQgcHQgKTsKLWV4dGVybiBMT05HIE5DX0hhbmRsZU5DTEJ1dHRvbkRvd24oIEhXTkQgaHduZCwgV09SRCB3UGFyYW0sIExPTkcgbFBhcmFtICk7Ci1leHRlcm4gTE9ORyBOQ19IYW5kbGVOQ0xCdXR0b25EYmxDbGsoIEhXTkQgaHduZCwgV09SRCB3UGFyYW0sIExPTkcgbFBhcmFtICk7Ci1leHRlcm4gTE9ORyBOQ19IYW5kbGVTeXNDb21tYW5kKCBIV05EIGh3bmQsIFdPUkQgd1BhcmFtLCBQT0lOVCBwdCApOwotZXh0ZXJuIExPTkcgTkNfSGFuZGxlU2V0Q3Vyc29yKCBIV05EIGh3bmQsIFdPUkQgd1BhcmFtLCBMT05HIGxQYXJhbSApOwotZXh0ZXJuIExPTkcgV0lOUE9TX0hhbmRsZVdpbmRvd1Bvc0NoYW5naW5nKCBXSU5ET1dQT1MgKndpbnBvcyApOyAvKiB3aW5wb3MuYyAqLwotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIERFRldORF9TZXRUZXh0CiAgKgpkaWZmIC0tZ2l0IGEvd2luZG93cy9kaWFsb2cuYyBiL3dpbmRvd3MvZGlhbG9nLmMKaW5kZXggYzVjMTA5Ni4uYmQwNTAzNCAxMDA2NDQKLS0tIGEvd2luZG93cy9kaWFsb2cuYworKysgYi93aW5kb3dzL2RpYWxvZy5jCkBAIC0yLDEwICsyLDkgQEAKICAqIERpYWxvZyBmdW5jdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgMTk5MywgMTk5NCBBbGV4YW5kcmUgSnVsbGlhcmQKLSAqLwotCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5MywgMTk5NCI7CisqLwogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTE4LDEwICsxNyw4IEBACiAjaW5jbHVkZSAiaGVhcC5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX0RJQUxPRyAqLwotLyogI3VuZGVmICBERUJVR19ESUFMT0cgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCi0KICAgLyogRGlhbG9nIGJhc2UgdW5pdHMgKi8KIHN0YXRpYyBXT1JEIHhCYXNlVW5pdCA9IDAsIHlCYXNlVW5pdCA9IDA7CiAKQEAgLTE1MSw3ICsxNDgsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgRElBTE9HX0Rpc3BsYXlUZW1wbGF0ZQogICovCi0jaWZkZWYgREVCVUdfRElBTE9HCiBzdGF0aWMgdm9pZCBESUFMT0dfRGlzcGxheVRlbXBsYXRlKCBETEdURU1QTEFURSAqIHJlc3VsdCApCiB7CiAgICAgZHByaW50Zl9kaWFsb2coc3RkZGViLCAiRElBTE9HICVkLCAlZCwgJWQsICVkXG4iLCByZXN1bHQtPmhlYWRlci0+eCwgcmVzdWx0LT5oZWFkZXItPnksCkBAIC0xNjYsNyArMTYyLDYgQEAKICAgICBpZiAocmVzdWx0LT5oZWFkZXItPnN0eWxlICYgRFNfU0VURk9OVCkKIAlkcHJpbnRmX2RpYWxvZyhzdGRkZWIsICIgRk9OVCAlZCwnJXMnXG4iLCByZXN1bHQtPnBvaW50U2l6ZSwgcmVzdWx0LT5mYWNlTmFtZSApOwogfQotI2VuZGlmICAvKiBERUJVR19ESUFMT0cgKi8KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIzNiw5ICsyMzEsNyBAQAogCiAgICAgaWYgKCFkbGdUZW1wbGF0ZSkgcmV0dXJuIDA7CiAgICAgaGVhZGVyID0gRElBTE9HX1BhcnNlVGVtcGxhdGUoIGRsZ1RlbXBsYXRlLCAmdGVtcGxhdGUgKTsKLSNpZmRlZiBERUJVR19ESUFMT0cKLSAgICBESUFMT0dfRGlzcGxheVRlbXBsYXRlKCAmdGVtcGxhdGUgKTsKLSNlbmRpZiAgICAKKyAgICBpZihkZWJ1Z2dpbmdfZGlhbG9nKURJQUxPR19EaXNwbGF5VGVtcGxhdGUoICZ0ZW1wbGF0ZSApOwogCiAgICAgICAvKiBMb2FkIG1lbnUgKi8KIApkaWZmIC0tZ2l0IGEvd2luZG93cy9ldmVudC5jIGIvd2luZG93cy9ldmVudC5jCmluZGV4IDExNDY3YmEuLjcxNDY5YjcgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZXZlbnQuYworKysgYi93aW5kb3dzL2V2ZW50LmMKQEAgLTIsOSArMiw5IEBACiAgKiBYIGV2ZW50cyBoYW5kbGluZyBmdW5jdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgMTk5MyBBbGV4YW5kcmUgSnVsbGlhcmQKLSAqLwotCisgKgogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBBbGV4YW5kcmUgSnVsbGlhcmQsIDE5OTMiOworKi8KIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0xMiwxNiArMTIsMTYgQEAKICNpbmNsdWRlIDxYMTEvWHJlc291cmNlLmg+CiAjaW5jbHVkZSA8WDExL1h1dGlsLmg+CiAjaW5jbHVkZSA8WDExL1hhdG9tLmg+Ci0KKyNpbmNsdWRlICJnZGkuaCIKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAid2luLmgiCiAjaW5jbHVkZSAiY2xhc3MuaCIKICNpbmNsdWRlICJtZXNzYWdlLmgiCisjaW5jbHVkZSAiY2xpcGJvYXJkLmgiCisjaW5jbHVkZSAid2lucG9zLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKLS8qICNkZWZpbmUgREVCVUdfRVZFTlQgLyogKi8KLS8qICN1bmRlZiAgREVCVUdfRVZFTlQgLyogKi8KLS8qICNkZWZpbmUgREVCVUdfS0VZICAgLyogKi8KLS8qICN1bmRlZiAgREVCVUdfS0VZICAgLyogKi8KKy8qICNkZWZpbmUgREVCVUdfRVZFTlQgKi8KKy8qICNkZWZpbmUgREVCVUdfS0VZICAgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAKQEAgLTM4LDEwICszOCw2IEBACiAKICNkZWZpbmUgTkJfQlVUVE9OUyAgICAgIDMgICAgIC8qIFdpbmRvd3MgY2FuIGhhbmRsZSAzIGJ1dHRvbnMgKi8KIAotZXh0ZXJuIGludCBkZXNrdG9wWCwgZGVza3RvcFk7ICAgLyogbWlzYy9tYWluLmMgKi8KLQotZXh0ZXJuIHZvaWQgV0lOUE9TX0NoYW5nZUFjdGl2ZVdpbmRvdyggSFdORCBod25kLCBCT09MIG1vdXNlTXNnICk7IC8qd2lucG9zLmMqLwotCiAgIC8qIFggY29udGV4dCB0byBhc3NvY2lhdGUgYSBod25kIHRvIGFuIFggd2luZG93ICovCiBzdGF0aWMgWENvbnRleHQgd2luQ29udGV4dCA9IDA7CiAKQEAgLTUxOSw3ICs1MTUsNyBAQAogc3RhdGljIHZvaWQgRVZFTlRfU2VsZWN0aW9uQ2xlYXIoSFdORCBod25kLCBYU2VsZWN0aW9uQ2xlYXJFdmVudCAqZXZlbnQpCiB7CiAgICAgaWYoZXZlbnQtPnNlbGVjdGlvbiE9WEFfUFJJTUFSWSlyZXR1cm47Ci0gICAgQ0xJUEJPQVJEX1JlbGVhc2VTZWxlY3Rpb24oKTsgCisgICAgQ0xJUEJPQVJEX1JlbGVhc2VTZWxlY3Rpb24oaHduZCk7IAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvd2luZG93cy9mb2N1cy5jIGIvd2luZG93cy9mb2N1cy5jCmluZGV4IDA0MThhZDkuLjdkYzg4OTcgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZm9jdXMuYworKysgYi93aW5kb3dzL2ZvY3VzLmMKQEAgLTMsMTggKzMsMTYgQEAKICAqCiAgKiBDb3B5cmlnaHQgMTk5MyBEYXZpZCBNZXRjYWxmZQogICogQ29weXJpZ2h0IDE5OTQgQWxleGFuZHJlIEp1bGxpYXJkCi0gKi8KLQorICoKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgRGF2aWQgTWV0Y2FsZmUsIDE5OTMiOwogc3RhdGljIGNoYXIgQ29weXJpZ2h0MltdID0gIkNvcHlyaWdodCAgQWxleGFuZHJlIEp1bGxpYXJkLCAxOTk0IjsKKyovCiAKICNpbmNsdWRlICJ3aW4uaCIKLQotZXh0ZXJuIENvbG9ybWFwIENPTE9SX1dpbkNvbG9ybWFwOworI2luY2x1ZGUgImNvbG9yLmgiCiAKIHN0YXRpYyBIV05EIGhXbmRGb2N1cyA9IDA7CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgIEZPQ1VTX1NldFhGb2N1cwogICoKZGlmZiAtLWdpdCBhL3dpbmRvd3MvZ3JhcGhpY3MuYyBiL3dpbmRvd3MvZ3JhcGhpY3MuYwppbmRleCBjMDUyZWZlLi42ZjQ4MTQ4IDEwMDY0NAotLS0gYS93aW5kb3dzL2dyYXBoaWNzLmMKKysrIGIvd2luZG93cy9ncmFwaGljcy5jCkBAIC0xNCwxOSArMTQsMTQgQEAKICNpZm5kZWYgUEkKICNkZWZpbmUgUEkgTV9QSQogI2VuZGlmCi0KKyNpbmNsdWRlICJkYy5oIgogI2luY2x1ZGUgImdkaS5oIgorI2luY2x1ZGUgIm1ldGFmaWxlLmgiCiAjaW5jbHVkZSAic3lzY29sb3IuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgotLyogI2RlZmluZSBERUJVR19HUkFQSElDUyAvKiAqLwotLyogI3VuZGVmICBERUJVR19HUkFQSElDUyAvKiAqLworI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotCi1leHRlcm4gY29uc3QgaW50IERDX1hST1BmdW5jdGlvbltdOwotCi1leHRlcm4gaW50IENPTE9SX1RvUGh5c2ljYWwoIERDICpkYywgQ09MT1JSRUYgY29sb3IgKTsKLQogc3RhdGljIF9faW5saW5lX18gdm9pZCBzd2FwX2ludChpbnQgKmEsIGludCAqYikKIHsKIAlpbnQgYzsKQEAgLTEwOSw3ICsxMDQsNyBAQAogICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgQXJjKCksIENob3JkKCkgYW5kIFBpZSgpLgogICogJ2xpbmVzJyBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIGRyYXc6IDAgZm9yIEFyYywgMSBmb3IgQ2hvcmQsIDIgZm9yIFBpZS4KICAqLwotQk9PTCBHUkFQSF9EcmF3QXJjKCBIREMgaGRjLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tLAorc3RhdGljIEJPT0wgR1JBUEhfRHJhd0FyYyggSERDIGhkYywgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSwKIAkJICAgIGludCB4c3RhcnQsIGludCB5c3RhcnQsIGludCB4ZW5kLCBpbnQgeWVuZCwgaW50IGxpbmVzICkKIHsKICAgICBpbnQgeGNlbnRlciwgeWNlbnRlciwgaXN0YXJ0X2FuZ2xlLCBpZGlmZl9hbmdsZTsKQEAgLTQ1Myw3ICs0NDgsNyBAQAogICovCiBDT0xPUlJFRiBTZXRQaXhlbCggSERDIGhkYywgc2hvcnQgeCwgc2hvcnQgeSwgQ09MT1JSRUYgY29sb3IgKQogewotICAgIGludCBwaXhlbDsKKyAgICBQaXhlbCBwaXhlbDsKICAgICBQQUxFVFRFRU5UUlkgZW50cnk7CiAgICAgCiAgICAgREMgKiBkYyA9IChEQyAqKSBHRElfR2V0T2JqUHRyKCBoZGMsIERDX01BR0lDICk7CkBAIC00NjgsMTMgKzQ2MywxNyBAQAogICAgIHggPSBkYy0+dy5EQ09yZ1ggKyBYTFBUT0RQKCBkYywgeCApOwogICAgIHkgPSBkYy0+dy5EQ09yZ1kgKyBZTFBUT0RQKCBkYywgeSApOwogICAgIHBpeGVsID0gQ09MT1JfVG9QaHlzaWNhbCggZGMsIGNvbG9yICk7Ci0gICAgR2V0UGFsZXR0ZUVudHJpZXMoIGRjLT53LmhQYWxldHRlLCBwaXhlbCwgMSwgJmVudHJ5ICk7CiAgICAgCiAgICAgWFNldEZvcmVncm91bmQoIGRpc3BsYXksIGRjLT51LnguZ2MsIHBpeGVsICk7CiAgICAgWFNldEZ1bmN0aW9uKCBkaXNwbGF5LCBkYy0+dS54LmdjLCBHWGNvcHkgKTsKICAgICBYRHJhd1BvaW50KCBkaXNwbGF5LCBkYy0+dS54LmRyYXdhYmxlLCBkYy0+dS54LmdjLCB4LCB5ICk7CiAKLSAgICByZXR1cm4gUkdCKCBlbnRyeS5wZVJlZCwgZW50cnkucGVHcmVlbiwgZW50cnkucGVCbHVlICk7CisgICAgaWYgKHNjcmVlbkRlcHRoIDw9IDgpCisgICAgeworICAgICAgICBHZXRQYWxldHRlRW50cmllcyggZGMtPncuaFBhbGV0dGUsIHBpeGVsLCAxLCAmZW50cnkgKTsKKyAgICAgICAgcmV0dXJuIFJHQiggZW50cnkucGVSZWQsIGVudHJ5LnBlR3JlZW4sIGVudHJ5LnBlQmx1ZSApOworICAgIH0KKyAgICBlbHNlIHJldHVybiAoQ09MT1JSRUYpcGl4ZWw7CiB9CiAKIApkaWZmIC0tZ2l0IGEvd2luZG93cy9tYXBwaW5nLmMgYi93aW5kb3dzL21hcHBpbmcuYwppbmRleCAwN2U0YmJjLi5iM2Y5NmQxIDEwMDY0NAotLS0gYS93aW5kb3dzL21hcHBpbmcuYworKysgYi93aW5kb3dzL21hcHBpbmcuYwpAQCAtOSw4ICs5LDcgQEAKICNpbmNsdWRlICJnZGkuaCIKICNpbmNsdWRlICJtZXRhZmlsZS5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCi0vKiAjZGVmaW5lIERFQlVHX0dESSAvKiAqLwotLyogI3VuZGVmICBERUJVR19HREkgLyogKi8KKy8qICNkZWZpbmUgREVCVUdfR0RJICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogCmRpZmYgLS1naXQgYS93aW5kb3dzL21kaS5jIGIvd2luZG93cy9tZGkuYwppbmRleCA2YzU5MjdkLi5lZDZjYTk2IDEwMDY0NAotLS0gYS93aW5kb3dzL21kaS5jCisrKyBiL3dpbmRvd3MvbWRpLmMKQEAgLTExLDE2ICsxMSwxMiBAQAogI2luY2x1ZGUgIndpbi5oIgogI2luY2x1ZGUgIm1kaS5oIgogI2luY2x1ZGUgInVzZXIuaCIKKyNpbmNsdWRlICJtZW51LmgiCiAjaW5jbHVkZSAic3lzbWV0cmljcy5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCi0vKiAjZGVmaW5lIERFQlVHX01ESSAvKiAqLwotLyogI3VuZGVmICBERUJVR19NREkgLyogKi8KKy8qICNkZWZpbmUgREVCVUdfTURJICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotCi1leHRlcm4gV09SRCBNRU5VX0RyYXdNZW51QmFyKCBIREMgaERDLCBMUFJFQ1QgbHByZWN0LAotCQkJICAgICAgSFdORCBod25kLCBCT09MIHN1cHByZXNzX2RyYXcgKTsgIC8qIG1lbnUuYyAqLwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJCU1ESVJlY3JlYXRlTWVudUxpc3QKICAqLwpAQCAtMzEsMTQgKzI3LDE0IEBACiAgICAgY2hhciBidWZmZXJbMTI4XTsKICAgICBpbnQgaWQsIG4sIGluZGV4OwogCi0gICAgZHByaW50Zl9tZGkoc3RkZGViLCAiTURJUmVjcmVhdGVNZW51TGlzdDogaFdpbmRvd01lbnUgJTA0LjR4XG4iLCAKKyAgICBkcHJpbnRmX21kaShzdGRkZWIsICJNRElSZWNyZWF0ZU1lbnVMaXN0OiBoV2luZG93TWVudSAlMHhcbiIsIAogCSAgICBjaS0+aFdpbmRvd01lbnUpOwogICAgIAogICAgIGlkID0gY2ktPmlkRmlyc3RDaGlsZDsgCiAgICAgd2hpbGUgKERlbGV0ZU1lbnUoY2ktPmhXaW5kb3dNZW51LCBpZCwgTUZfQllDT01NQU5EKSkKIAlpZCsrOwogCi0gICAgZHByaW50Zl9tZGkoc3RkZGViLCAiTURJUmVjcmVhdGVNZW51TGlzdDogaWQgJTA0LjR4LCBpZEZpcnN0Q2hpbGQgJTA0LjR4XG4iLCAKKyAgICBkcHJpbnRmX21kaShzdGRkZWIsICJNRElSZWNyZWF0ZU1lbnVMaXN0OiBpZCAlMDR4LCBpZEZpcnN0Q2hpbGQgJTA0eFxuIiwgCiAJICAgIGlkLCBjaS0+aWRGaXJzdENoaWxkKTsKIAogICAgIGlmICghY2ktPmZsYWdNZW51QWx0ZXJlZCkKQEAgLTU0LDcgKzUwLDcgQEAKIAluID0gc3ByaW50ZihidWZmZXIsICIlZCAiLCBpbmRleCsrKTsKIAlHZXRXaW5kb3dUZXh0KGNoaS0+aHduZCwgYnVmZmVyICsgbiwgc2l6ZW9mKGJ1ZmZlcikgLSBuIC0gMSk7CiAKLQlkcHJpbnRmX21kaShzdGRkZWIsICJNRElSZWNyZWF0ZU1lbnVMaXN0OiBpZCAlMDQuNHgsICclcydcbiIsIAorCWRwcmludGZfbWRpKHN0ZGRlYiwgIk1ESVJlY3JlYXRlTWVudUxpc3Q6IGlkICUwNHgsICclcydcbiIsIAogCQlpZCwgYnVmZmVyKTsKIAogCUFwcGVuZE1lbnUoY2ktPmhXaW5kb3dNZW51LCBNRl9TVFJJTkcsIGlkKyssIGJ1ZmZlcik7CkBAIC0xNTcsNyArMTUzLDcgQEAKICAgICB3ICA9IFdJTl9GaW5kV25kUHRyKHBhcmVudCk7CiAgICAgY2kgPSAoTURJQ0xJRU5USU5GTyAqKSB3LT53RXh0cmE7CiAgICAgCi0gICAgZHByaW50Zl9tZGkoc3RkZGViLCAiTURJQnJpbmdUb1RvcDogaWQgJTA0LjR4LCBieV9pZCAlZFxuIiwgaWQsIGJ5X2lkKTsKKyAgICBkcHJpbnRmX21kaShzdGRkZWIsICJNRElCcmluZ1RvVG9wOiBpZCAlMDR4LCBieV9pZCAlZFxuIiwgaWQsIGJ5X2lkKTsKIAogICAgIGlmIChieV9pZCkKIAlpZCAtPSBjaS0+aWRGaXJzdENoaWxkOwpAQCAtMTc5LDcgKzE3NSw3IEBACiAJaWYgKCFjaGkpCiAJICAgIHJldHVybjsKIAotCWRwcmludGZfbWRpKHN0ZGRlYiwgIk1ESUJyaW5nVG9Ub3A6IGNoaWxkICUwNC40eFxuIiwgY2hpLT5od25kKTsKKwlkcHJpbnRmX21kaShzdGRkZWIsICJNRElCcmluZ1RvVG9wOiBjaGlsZCAlMDR4XG4iLCBjaGktPmh3bmQpOwogCWlmIChjaGkgIT0gY2ktPmluZm9BY3RpdmVDaGlsZHJlbikKIAl7CiAJICAgIGlmIChjaS0+ZmxhZ0NoaWxkTWF4aW1pemVkKQpAQCAtMjQxLDcgKzIzNyw3IEBACiAJICAgIFNlbmRNZXNzYWdlKHBhcmVudCwgV01fQ0hJTERBQ1RJVkFURSwgMCwgMCk7CiAJfQogCQotCWRwcmludGZfbWRpKHN0ZGRlYiwgIk1ESUJyaW5nVG9Ub3A6IHBvcyAlMDQuNHgsIGh3bmQgJTA0LjR4XG4iLCAKKwlkcHJpbnRmX21kaShzdGRkZWIsICJNRElCcmluZ1RvVG9wOiBwb3MgJTA0eCwgaHduZCAlMDR4XG4iLCAKIAkJaWQsIGNoaS0+aHduZCk7CiAgICAgfQogfQpAQCAtMzE4LDcgKzMxNCw3IEBACiAgICAgSFdORCAgICAgICAgICBhY3RfaHduZDsKICAgICBMT05HICAgICAgICAgIGxQYXJhbTsKIAotICAgIGRwcmludGZfbWRpKHN0ZGRlYiwgIk1ESUNoaWxkQWN0aXZhdGU6IHRvcCAlMDQuNHhcbiIsIHctPmh3bmRDaGlsZCk7CisgICAgZHByaW50Zl9tZGkoc3RkZGViLCAiTURJQ2hpbGRBY3RpdmF0ZTogdG9wICUwNHhcbiIsIHctPmh3bmRDaGlsZCk7CiAKICAgICBjaGkgPSBjaS0+aW5mb0FjdGl2ZUNoaWxkcmVuOwogICAgIGlmIChjaGkpCkBAIC0zMjcsNyArMzIzLDcgQEAKIAlhY3RfaHduZCAgID0gY2hpLT5od25kOwogCWxQYXJhbSAgICAgPSAoKExPTkcpIGRlYWN0X2h3bmQgPDwgMTYpIHwgYWN0X2h3bmQ7CiAKLQlkcHJpbnRmX21kaShzdGRkZWIsICJNRElDaGlsZEFjdGl2YXRlOiBkZWFjdCAlMDQuNHgsIGFjdCAlMDQuNHhcbiIsCisJZHByaW50Zl9tZGkoc3RkZGViLCAiTURJQ2hpbGRBY3RpdmF0ZTogZGVhY3QgJTA0eCwgYWN0ICUwNHhcbiIsCiAJICAgICAgIGRlYWN0X2h3bmQsIGFjdF9od25kKTsKIAogCWNpLT5od25kQWN0aXZlQ2hpbGQgPSBhY3RfaHduZDsKQEAgLTM3NywxMiArMzczLDEyIEBACiAgICAgZm9yIChjaGkgPSBjaS0+aW5mb0FjdGl2ZUNoaWxkcmVuOyBjaGktPm5leHQgIT0gTlVMTDsgY2hpID0gY2hpLT5uZXh0KQogCTsKICAgICAKLSAgICBkcHJpbnRmX21kaShzdGRkZWIsICJNRElDYXNjYWRlOiBsYXN0IGNoaWxkIGlzICUwNC40eFxuIiwgY2hpLT5od25kKTsKKyAgICBkcHJpbnRmX21kaShzdGRkZWIsICJNRElDYXNjYWRlOiBsYXN0IGNoaWxkIGlzICUwNHhcbiIsIGNoaS0+aHduZCk7CiAgICAgeCA9IDA7CiAgICAgeSA9IDA7CiAgICAgZm9yICggOyBjaGkgIT0gTlVMTDsgY2hpID0gY2hpLT5wcmV2KQogICAgIHsKLQlkcHJpbnRmX21kaShzdGRkZWIsICJNRElDYXNjYWRlOiBtb3ZlICUwNC40eCB0byAoJWQsJWQpIHNpemUgWyVkLCVkXVxuIiwgCisJZHByaW50Zl9tZGkoc3RkZGViLCAiTURJQ2FzY2FkZTogbW92ZSAlMDR4IHRvICglZCwlZCkgc2l6ZSBbJWQsJWRdXG4iLCAKIAkJY2hpLT5od25kLCB4LCB5LCB4c2l6ZSwgeXNpemUpOwogCVNldFdpbmRvd1BvcyhjaGktPmh3bmQsIDAsIHgsIHksIHhzaXplLCB5c2l6ZSwgCiAJCSAgICAgU1dQX0RSQVdGUkFNRSB8IFNXUF9OT0FDVElWQVRFIHwgU1dQX05PWk9SREVSKTsKZGlmZiAtLWdpdCBhL3dpbmRvd3MvbWVzc2FnZS5jIGIvd2luZG93cy9tZXNzYWdlLmMKaW5kZXggMzA0YThmOS4uYjRkNjQ1OCAxMDA2NDQKLS0tIGEvd2luZG93cy9tZXNzYWdlLmMKKysrIGIvd2luZG93cy9tZXNzYWdlLmMKQEAgLTE3LDEyICsxNywxNSBAQAogCiAjaW5jbHVkZSAibWVzc2FnZS5oIgogI2luY2x1ZGUgIndpbi5oIgorI2luY2x1ZGUgImdkaS5oIgogI2luY2x1ZGUgIndpbmVvcHRzLmgiCiAjaW5jbHVkZSAic3lzbWV0cmljcy5oIgogI2luY2x1ZGUgImhvb2suaCIKKyNpbmNsdWRlICJ3aW4uaCIKKyNpbmNsdWRlICJldmVudC5oIgorI2luY2x1ZGUgIndpbnBvcy5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX01TRyAqLwotLyogI3VuZGVmICBERUJVR19NU0cgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAKQEAgLTMzLDEyICszNiw2IEBACiAKIGV4dGVybiBCT09MIFRJTUVSX0NoZWNrVGltZXIoIExPTkcgKm5leHQsIE1TRyAqbXNnLAogCQkJICAgICAgSFdORCBod25kLCBCT09MIHJlbW92ZSApOyAgLyogdGltZXIuYyAqLwotZXh0ZXJuIHZvaWQgRVZFTlRfUHJvY2Vzc0V2ZW50KCBYRXZlbnQgKmV2ZW50ICk7ICAvKiBldmVudC5jICovCi1leHRlcm4gdm9pZCBXSU5QT1NfQ2hhbmdlQWN0aXZlV2luZG93KCBIV05EIGh3bmQsIEJPT0wgbW91c2VNc2cgKTsgLyp3aW5wb3MuYyovCi1leHRlcm4gdm9pZCBXSU5fU2VuZFBhcmVudE5vdGlmeSggSFdORCBod25kLCBXT1JEIGV2ZW50LAotCQkJCSAgTE9ORyBsUGFyYW0gKTsgIC8qIHdpbi5jICovCi0KLWV4dGVybiBEaXNwbGF5ICogZGlzcGxheTsKIAogICAvKiBTeXN0ZW0gbWVzc2FnZSBxdWV1ZSAoZm9yIGhhcmR3YXJlIGV2ZW50cykgKi8KIHN0YXRpYyBIQU5ETEUgaG1lbVN5c01zZ1F1ZXVlID0gMDsKZGlmZiAtLWdpdCBhL3dpbmRvd3Mvbm9uY2xpZW50LmMgYi93aW5kb3dzL25vbmNsaWVudC5jCmluZGV4IDkyOWMxZjEuLmY5MWViMTIgMTAwNjQ0Ci0tLSBhL3dpbmRvd3Mvbm9uY2xpZW50LmMKKysrIGIvd2luZG93cy9ub25jbGllbnQuYwpAQCAtMiw5ICsyLDkgQEAKICAqIE5vbi1jbGllbnQgYXJlYSB3aW5kb3cgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IDE5OTQgQWxleGFuZHJlIEp1bGxpYXJkCi0gKi8KLQorICoKIHN0YXRpYyBjaGFyIENvcHlyaWdodFtdID0gIkNvcHlyaWdodCAgQWxleGFuZHJlIEp1bGxpYXJkLCAxOTk0IjsKKyovCiAKICNpbmNsdWRlICJ3aW4uaCIKICNpbmNsdWRlICJjbGFzcy5oIgpAQCAtMTIsMTAgKzEyLDE2IEBACiAjaW5jbHVkZSAic2Nyb2xsLmgiCiAjaW5jbHVkZSAic3lzbWV0cmljcy5oIgogI2luY2x1ZGUgInVzZXIuaCIKKyNpbmNsdWRlICJkaWFsb2cuaCIKICNpbmNsdWRlICJzeXNjb2xvci5oIgorI2luY2x1ZGUgImxpYnJhcnkuaCIKKyNpbmNsdWRlICJtZW51LmgiCisjaW5jbHVkZSAid2lucG9zLmgiCisjaW5jbHVkZSAic2Nyb2xsLmgiCisjaW5jbHVkZSAibm9uY2xpZW50LmgiCisjaW5jbHVkZSAiZ3JhcGhpY3MuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogLyogI2RlZmluZSBERUJVR19OT05DTElFTlQgKi8KLS8qICN1bmRlZiAgREVCVUdfTk9OQ0xJRU5UICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogCkBAIC0yOCwyNCArMzQsOCBAQAogc3RhdGljIEhCSVRNQVAgaGJpdG1hcFJlc3RvcmVEID0gMDsKIAogI2RlZmluZSBTQ19BQk9VVFdJTkUgICAgCShTQ19TQ1JFRU5TQVZFKzEpCi1leHRlcm4gSElOU1RBTkNFIGhTeXNSZXM7CiBleHRlcm4gQk9PTCBBYm91dFdpbmVfUHJvYyggSFdORCBoRGxnLCBXT1JEIG1zZywgV09SRCB3UGFyYW0sIExPTkcgbFBhcmFtICk7CiAKLWV4dGVybiB2b2lkIFdJTlBPU19HZXRNaW5NYXhJbmZvKCBIV05EIGh3bmQsIFBPSU5UICptYXhTaXplLCBQT0lOVCAqbWF4UG9zLAotCQkJICAgIFBPSU5UICptaW5UcmFjaywgUE9JTlQgKm1heFRyYWNrICk7ICAvKiB3aW5wb3MuYyAqLwotZXh0ZXJuIEJPT0wgR1JBUEhfRHJhd0JpdG1hcCggSERDIGhkYywgSEJJVE1BUCBoYml0bWFwLCBpbnQgeGRlc3QsIGludCB5ZGVzdCwKLQkJCSAgICAgIGludCB4c3JjLCBpbnQgeXNyYywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotCQkJICAgICAgaW50IHJvcCApOyAgICAgICAgICAgICAgICAgICAgIC8qIGdyYXBoaWNzLmMgKi8KLWV4dGVybiBXT1JEIE1FTlVfR2V0TWVudUJhckhlaWdodCggSFdORCBod25kLCBXT1JEIG1lbnViYXJXaWR0aCwKLQkJCQkgICBpbnQgb3JnWCwgaW50IG9yZ1kgKTsgICAgICAgICAvKiBtZW51LmMgKi8KLWV4dGVybiB2b2lkIE1FTlVfVHJhY2tNb3VzZU1lbnVCYXIoIEhXTkQgaHduZCwgUE9JTlQgcHQgKTsgICAgICAgLyogbWVudS5jICovCi1leHRlcm4gdm9pZCBNRU5VX1RyYWNrS2JkTWVudUJhciggSFdORCBod25kLCBXT1JEIHdQYXJhbSApOyAgICAgIC8qIG1lbnUuYyAqLwotZXh0ZXJuIFdPUkQgTUVOVV9EcmF3TWVudUJhciggSERDIGhEQywgTFBSRUNUIGxwcmVjdCwKLQkJCSAgICAgIEhXTkQgaHduZCwgQk9PTCBzdXBwcmVzc19kcmF3ICk7ICAgLyogbWVudS5jICovCi1leHRlcm4gdm9pZCBTQ1JPTExfSGFuZGxlU2Nyb2xsRXZlbnQoIEhXTkQgaHduZCwgaW50IG5CYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPUkQgbXNnLCBQT0lOVCBwdCk7ICAgICAgIC8qIHNjcm9sbC5jICovCi0KLQogICAvKiBTb21lIHVzZWZ1bCBtYWNyb3MgKi8KICNkZWZpbmUgSEFTX0RMR0ZSQU1FKHN0eWxlLGV4U3R5bGUpIFwKICAgICAoKChzdHlsZSkgJiBXU19ETEdGUkFNRSkgJiYgXApkaWZmIC0tZ2l0IGEvd2luZG93cy9zY3JvbGwuYyBiL3dpbmRvd3Mvc2Nyb2xsLmMKaW5kZXggMzlmZWFkNi4uMjcxMGMzMCAxMDA2NDQKLS0tIGEvd2luZG93cy9zY3JvbGwuYworKysgYi93aW5kb3dzL3Njcm9sbC5jCkBAIC0xMCw5ICsxMCw5IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSAid2luZG93cy5oIgogI2luY2x1ZGUgImdkaS5oIgorI2luY2x1ZGUgInNjcm9sbC5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCi0vKiAjZGVmaW5lIERFQlVHX1NDUk9MTCAvKiAqLwotLyogI3VuZGVmICBERUJVR19TQ1JPTEwgLyogKi8KKy8qICNkZWZpbmUgREVCVUdfU0NST0xMICovCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogCmRpZmYgLS1naXQgYS93aW5kb3dzL3N5c2NvbG9yLmMgYi93aW5kb3dzL3N5c2NvbG9yLmMKaW5kZXggZGU5MmFmYy4uYmNmNTM5NyAxMDA2NDQKLS0tIGEvd2luZG93cy9zeXNjb2xvci5jCisrKyBiL3dpbmRvd3Mvc3lzY29sb3IuYwpAQCAtMTQsMTEgKzE0LDkgQEAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAic3lzY29sb3IuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgotLyogI2RlZmluZSBERUJVR19TWVNDT0xPUiAvKiAqLwotLyogI3VuZGVmICBERUJVR19TWVNDT0xPUiAvKiAqLworLyogI2RlZmluZSBERUJVR19TWVNDT0xPUiAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKLQogc3RydWN0IFN5c0NvbG9yT2JqZWN0cyBzeXNDb2xvck9iamVjdHMgPSB7IDAsIH07CiAKIHN0YXRpYyBjaGFyICogRGVmU3lzQ29sb3JzW10gPQpAQCAtMTM0LDcgKzEzMiw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgU1lTQ09MT1JfSW5pdAogICovCi12b2lkIFNZU0NPTE9SX0luaXQoKQordm9pZCBTWVNDT0xPUl9Jbml0KHZvaWQpCiB7CiAgICAgaW50IGksIHIsIGcsIGI7CiAgICAgY2hhciAqKnA7CkBAIC0xNTUsNyArMTUzLDcgQEAKIAogQ09MT1JSRUYgR2V0U3lzQ29sb3Ioc2hvcnQgbkluZGV4KQogewotICAgIGRwcmludGZfc3lzY29sb3Ioc3RkZGViLCJTeXN0ZW0gQ29sb3IgJWQgPSAlNnhcbiIsIAorICAgIGRwcmludGZfc3lzY29sb3Ioc3RkZGViLCJTeXN0ZW0gQ29sb3IgJWQgPSAlOGx4XG4iLCAKIAkJICAgIG5JbmRleCwgU3lzQ29sb3JzW25JbmRleF0pOwogICAgIHJldHVybiBTeXNDb2xvcnNbbkluZGV4XTsKIH0KZGlmZiAtLWdpdCBhL3dpbmRvd3Mvc3lzbWV0cmljcy5jIGIvd2luZG93cy9zeXNtZXRyaWNzLmMKaW5kZXggNzE0MTNjNy4uM2FhOWJiMyAxMDA2NDQKLS0tIGEvd2luZG93cy9zeXNtZXRyaWNzLmMKKysrIGIvd2luZG93cy9zeXNtZXRyaWNzLmMKQEAgLTIsMjYgKzIsMjIgQEAKICAqIFN5c3RlbSBtZXRyaWNzIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAxOTk0IEFsZXhhbmRyZSBKdWxsaWFyZAotICovCi0KKyAqCiBzdGF0aWMgY2hhciBDb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgIEFsZXhhbmRyZSBKdWxsaWFyZCwgMTk5NCI7CisqLwogCiAjaW5jbHVkZSA8WDExL1hsaWIuaD4KLQorI2luY2x1ZGUgImdkaS5oIgogI2luY2x1ZGUgInN5c21ldHJpY3MuaCIKIAotCiBzaG9ydCBzeXNNZXRyaWNzW1NNX0NNRVRSSUNTXTsKIAotZXh0ZXJuIERpc3BsYXkgKiBkaXNwbGF5OwotZXh0ZXJuIGludCBzY3JlZW5XaWR0aCwgc2NyZWVuSGVpZ2h0OwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBTWVNNRVRSSUNTX0luaXQKICAqCiAgKiBJbml0aWFsaXNhdGlvbiBvZiB0aGUgc3lzdGVtIG1ldHJpY3MgYXJyYXkuCiAgKi8KLXZvaWQgU1lTTUVUUklDU19Jbml0KCkKK3ZvaWQgU1lTTUVUUklDU19Jbml0KHZvaWQpCiB7CiAgICAgc3lzTWV0cmljc1tTTV9DWFNDUkVFTl0gPSBzY3JlZW5XaWR0aDsKICAgICBzeXNNZXRyaWNzW1NNX0NZU0NSRUVOXSA9IHNjcmVlbkhlaWdodDsKQEAgLTc3LDYgKzczLDMgQEAKICAgICBpZiAoaW5kZXggPj0gU01fQ01FVFJJQ1MpIHJldHVybiAwOwogICAgIGVsc2UgcmV0dXJuIHN5c01ldHJpY3NbaW5kZXhdOyAgICAKIH0KLQotCi0KZGlmZiAtLWdpdCBhL3dpbmRvd3MvdGltZXIuYyBiL3dpbmRvd3MvdGltZXIuYwppbmRleCBiOTViOTliLi45YzU0MjQwIDEwMDY0NAotLS0gYS93aW5kb3dzL3RpbWVyLmMKKysrIGIvd2luZG93cy90aW1lci5jCkBAIC05LDggKzksNyBAQAogI2luY2x1ZGUgIndpbmRvd3MuaCIKICNpbmNsdWRlICJtZXNzYWdlLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKLS8qICNkZWZpbmUgREVCVUdfVElNRVIgLyogKi8KLS8qICN1bmRlZiAgREVCVUdfVElNRVIgLyogKi8KKy8qICNkZWZpbmUgREVCVUdfVElNRVIgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAKZGlmZiAtLWdpdCBhL3dpbmRvd3MvdXRpbGl0eS5jIGIvd2luZG93cy91dGlsaXR5LmMKaW5kZXggNWY5ZmNhZC4uNzViNzc5ZCAxMDA2NDQKLS0tIGEvd2luZG93cy91dGlsaXR5LmMKKysrIGIvd2luZG93cy91dGlsaXR5LmMKQEAgLTE0LDggKzE0LDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKLS8qICNkZWZpbmUgREVCVUdfVVRJTElUWSAvKiAqLwotLyogI3VuZGVmICBERUJVR19VVElMSVRZIC8qICovCisvKiAjZGVmaW5lIERFQlVHX1VUSUxJVFkgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAKZGlmZiAtLWdpdCBhL3dpbmRvd3Mvd2luLmMgYi93aW5kb3dzL3dpbi5jCmluZGV4IDE0MmUyNzkuLjI4MTMxZWMgMTAwNjQ0Ci0tLSBhL3dpbmRvd3Mvd2luLmMKKysrIGIvd2luZG93cy93aW4uYwpAQCAtMTYsMjkgKzE2LDE4IEBACiAjaW5jbHVkZSAidXNlci5oIgogI2luY2x1ZGUgImRjZS5oIgogI2luY2x1ZGUgInN5c21ldHJpY3MuaCIKKyNpbmNsdWRlICJtZW51LmgiCiAjaW5jbHVkZSAiaWNvbi5oIgogI2luY2x1ZGUgImN1cnNvci5oIgorI2luY2x1ZGUgImV2ZW50LmgiCisjaW5jbHVkZSAid2lucG9zLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogI2luY2x1ZGUgImNhbGxiYWNrLmgiCi0vKiAjZGVmaW5lIERFQlVHX1dJTiAgLyogKi8gCi0vKiAjdW5kZWYgIERFQlVHX1dJTiAgLyogKi8KLS8qICNkZWZpbmUgREVCVUdfTUVOVSAvKiAqLwotLyogI3VuZGVmICBERUJVR19NRU5VIC8qICovCisvKiAjZGVmaW5lIERFQlVHX1dJTiAgKi8gCisvKiAjZGVmaW5lIERFQlVHX01FTlUgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCi1leHRlcm4gQ29sb3JtYXAgQ09MT1JfV2luQ29sb3JtYXA7Ci0KLWV4dGVybiB2b2lkIEVWRU5UX1JlZ2lzdGVyV2luZG93KCBXaW5kb3cgdywgSFdORCBod25kICk7ICAvKiBldmVudC5jICovCi1leHRlcm4gdm9pZCBXSU5QT1NfQ2hhbmdlQWN0aXZlV2luZG93KCBIV05EIGh3bmQsIEJPT0wgbW91c2VNc2cgKTsgLyp3aW5wb3MuYyovCi1leHRlcm4gTE9ORyBXSU5QT1NfU2VuZE5DQ2FsY1NpemUoIEhXTkQgaHduZCwgQk9PTCBjYWxjVmFsaWRSZWN0LAotCQkJCSAgIFJFQ1QgKm5ld1dpbmRvd1JlY3QsIFJFQ1QgKm9sZFdpbmRvd1JlY3QsCi0JCQkJICAgUkVDVCAqb2xkQ2xpZW50UmVjdCwgV0lORE9XUE9TICp3aW5wb3MsCi0JCQkJICAgUkVDVCAqbmV3Q2xpZW50UmVjdCApOyAgLyogd2lucG9zLmMgKi8KLQotZXh0ZXJuIEhNRU5VIENvcHlTeXNNZW51KCk7IC8qIG1lbnUuYyAqLwotZXh0ZXJuIExPTkcgTURJQ2xpZW50V25kUHJvYyhIV05EIGh3bmQsIFdPUkQgbWVzc2FnZSwgCi0JCQkgICAgIFdPUkQgd1BhcmFtLCBMT05HIGxQYXJhbSk7IC8qIG1kaS5jICovCi0KIHN0YXRpYyBIV05EIGh3bmREZXNrdG9wID0gMDsKIHN0YXRpYyBIV05EIGhXbmRTeXNNb2RhbCA9IDA7CiAKQEAgLTk4MSw4ICs5NzAsNiBAQAogICAgIGRwcmludGZfZW51bShzdGRkZWIsIkVudW1XaW5kb3dzXG4iKTsKIAogICAgIHdoaWxlIChod25kKSB7Ci0gICAgICBjaGFyICpwdHI7Ci0KICAgICAgICAgaWYgKCAhKHduZFB0cj1XSU5fRmluZFduZFB0cihod25kKSkgKSB7CiAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgfQpAQCAtMTAxNSwxMSArMTAwMiw4IEBACiBzdGF0aWMgQk9PTCBXSU5fRW51bUNoaWxkV2luKEhXTkQgaHduZCwgRkFSUFJPQyB3bmRlbnVtcHJjLCBMUEFSQU0gbFBhcmFtKQogewogICAgIFdORCAqd25kUHRyOwotICAgIGludCByZXN1bHQ7Ci0KIAogICAgIHdoaWxlIChod25kKSB7Ci0gICAgICBjaGFyICpwdHI7CiAgICAgICBpZiAoICEod25kUHRyPVdJTl9GaW5kV25kUHRyKGh3bmQpKSApIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CmRpZmYgLS1naXQgYS93aW5kb3dzL3dpbnBvcy5jIGIvd2luZG93cy93aW5wb3MuYwppbmRleCA4MGQzYmFkLi44YTFlYmQxIDEwMDY0NAotLS0gYS93aW5kb3dzL3dpbnBvcy5jCisrKyBiL3dpbmRvd3Mvd2lucG9zLmMKQEAgLTY4NywzMiArNjg3LDQyIEBACiAKICAgICBpZiAoIShmbGFncyAmIFNXUF9OT1NJWkUpKQogICAgIHsKLQluZXdXaW5kb3dSZWN0LnJpZ2h0ICA9IG5ld1dpbmRvd1JlY3QubGVmdCArIHdpbnBvcy0+Y3g7Ci0JbmV3V2luZG93UmVjdC5ib3R0b20gPSBuZXdXaW5kb3dSZWN0LnRvcCArIHdpbnBvcy0+Y3k7Ci0Jd2luQ2hhbmdlcy53aWR0aCAgICAgPSB3aW5wb3MtPmN4OwotCXdpbkNoYW5nZXMuaGVpZ2h0ICAgID0gd2lucG9zLT5jeTsKLQljaGFuZ2VNYXNrIHw9IENXV2lkdGggfCBDV0hlaWdodDsKKyAgICAgICAgaWYgKChuZXdXaW5kb3dSZWN0LnJpZ2h0ICE9IG5ld1dpbmRvd1JlY3QubGVmdCArIHdpbnBvcy0+Y3gpIHx8CisgICAgICAgICAgICAobmV3V2luZG93UmVjdC5ib3R0b20gIT0gbmV3V2luZG93UmVjdC50b3AgKyB3aW5wb3MtPmN5KSkKKyAgICAgICAgeworICAgICAgICAgICAgbmV3V2luZG93UmVjdC5yaWdodCAgPSBuZXdXaW5kb3dSZWN0LmxlZnQgKyB3aW5wb3MtPmN4OworICAgICAgICAgICAgbmV3V2luZG93UmVjdC5ib3R0b20gPSBuZXdXaW5kb3dSZWN0LnRvcCArIHdpbnBvcy0+Y3k7CisgICAgICAgICAgICB3aW5DaGFuZ2VzLndpZHRoICAgICA9IHdpbnBvcy0+Y3g7CisgICAgICAgICAgICB3aW5DaGFuZ2VzLmhlaWdodCAgICA9IHdpbnBvcy0+Y3k7CisgICAgICAgICAgICBjaGFuZ2VNYXNrIHw9IENXV2lkdGggfCBDV0hlaWdodDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGZsYWdzID0gd2lucG9zLT5mbGFncyB8PSBTV1BfTk9TSVpFOwogICAgIH0KICAgICBpZiAoIShmbGFncyAmIFNXUF9OT01PVkUpKQogICAgIHsKLQluZXdXaW5kb3dSZWN0LmxlZnQgICAgPSB3aW5wb3MtPng7Ci0JbmV3V2luZG93UmVjdC50b3AgICAgID0gd2lucG9zLT55OwotCW5ld1dpbmRvd1JlY3QucmlnaHQgICs9IHdpbnBvcy0+eCAtIHduZFB0ci0+cmVjdFdpbmRvdy5sZWZ0OwotCW5ld1dpbmRvd1JlY3QuYm90dG9tICs9IHdpbnBvcy0+eSAtIHduZFB0ci0+cmVjdFdpbmRvdy50b3A7Ci0JaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX0NISUxEKQotCXsKLQkgICAgV05EICpwYXJlbnRQdHIgPSBXSU5fRmluZFduZFB0cih3bmRQdHItPmh3bmRQYXJlbnQpOwotCSAgICB3aW5DaGFuZ2VzLnggPSB3aW5wb3MtPnggKyBwYXJlbnRQdHItPnJlY3RDbGllbnQubGVmdCAKLQkJICAgICAgICAgICAtIHBhcmVudFB0ci0+cmVjdFdpbmRvdy5sZWZ0OwotCSAgICB3aW5DaGFuZ2VzLnkgPSB3aW5wb3MtPnkgKyBwYXJlbnRQdHItPnJlY3RDbGllbnQudG9wCi0JCSAgICAgICAgICAgLSBwYXJlbnRQdHItPnJlY3RXaW5kb3cudG9wOwotCX0KLQllbHNlCi0JewotCSAgICB3aW5DaGFuZ2VzLnggPSB3aW5wb3MtPng7Ci0JICAgIHdpbkNoYW5nZXMueSA9IHdpbnBvcy0+eTsKLQl9Ci0JY2hhbmdlTWFzayB8PSBDV1ggfCBDV1k7CisgICAgICAgIGlmICgobmV3V2luZG93UmVjdC5sZWZ0ICE9IHdpbnBvcy0+eCkgfHwKKyAgICAgICAgICAgIChuZXdXaW5kb3dSZWN0LnRvcCAhPSB3aW5wb3MtPnkpKQorICAgICAgICB7CisgICAgICAgICAgICBuZXdXaW5kb3dSZWN0LmxlZnQgICAgPSB3aW5wb3MtPng7CisgICAgICAgICAgICBuZXdXaW5kb3dSZWN0LnRvcCAgICAgPSB3aW5wb3MtPnk7CisgICAgICAgICAgICBuZXdXaW5kb3dSZWN0LnJpZ2h0ICArPSB3aW5wb3MtPnggLSB3bmRQdHItPnJlY3RXaW5kb3cubGVmdDsKKyAgICAgICAgICAgIG5ld1dpbmRvd1JlY3QuYm90dG9tICs9IHdpbnBvcy0+eSAtIHduZFB0ci0+cmVjdFdpbmRvdy50b3A7CisgICAgICAgICAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfQ0hJTEQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgV05EICpwYXJlbnRQdHIgPSBXSU5fRmluZFduZFB0cih3bmRQdHItPmh3bmRQYXJlbnQpOworICAgICAgICAgICAgICAgIHdpbkNoYW5nZXMueCA9IHdpbnBvcy0+eCArIHBhcmVudFB0ci0+cmVjdENsaWVudC5sZWZ0IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHBhcmVudFB0ci0+cmVjdFdpbmRvdy5sZWZ0OworICAgICAgICAgICAgICAgIHdpbkNoYW5nZXMueSA9IHdpbnBvcy0+eSArIHBhcmVudFB0ci0+cmVjdENsaWVudC50b3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwYXJlbnRQdHItPnJlY3RXaW5kb3cudG9wOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdpbkNoYW5nZXMueCA9IHdpbnBvcy0+eDsKKyAgICAgICAgICAgICAgICB3aW5DaGFuZ2VzLnkgPSB3aW5wb3MtPnk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFuZ2VNYXNrIHw9IENXWCB8IENXWTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGZsYWdzID0gd2lucG9zLT5mbGFncyB8PSBTV1BfTk9NT1ZFOwogICAgIH0KIAogICAgICAgLyogUmVwb3NpdGlvbiB3aW5kb3cgaW4gWiBvcmRlciAqLwo=