ZGlmZiAtLWdpdCBhL2F1dG8vY2MvY29uZiBiL2F1dG8vY2MvY29uZgppbmRleCA0ZDE1MWRhLi4zN2YyZDJlIDEwMDY0NAotLS0gYS9hdXRvL2NjL2NvbmYKKysrIGIvYXV0by9jYy9jb25mCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIGdjYykKICAgICAgICAgICAgICMgZ2NjIDIuNy4yLjMsIDIuOC4xLCAyLjk1LjQsIGVnY3MtMS4xLjIKICAgICAgICAgICAgICMgICAgIDMuMC40LCAzLjEuMSwgMy4yLjMsIDMuMy4yLCAzLjMuMywgMy4zLjQsIDMuNC4wLCAzLjQuMgotICAgICAgICAgICAgIyAgICAgNC4wLjAKKyAgICAgICAgICAgICMgICAgIDQuMC4wLCA0LjAuMSwgNC4xLjAKIAogICAgICAgICAgICAgLiBhdXRvL2NjL2djYwogICAgICAgICA7OwpAQCAtNTUsNiArNTUsMTIgQEAKICAgICAgICAgICAgIC4gYXV0by9jYy9pY2MKICAgICAgICAgOzsKIAorICAgICAgICBzdW5jKQorICAgICAgICAgICAgIyBTdW4gQyA1LjcgUGF0Y2ggMTE3ODM3LTA0IDIwMDUvMDUvMTEKKworICAgICAgICAgICAgLiBhdXRvL2NjL3N1bmMKKyAgICAgICAgOzsKKwogICAgICAgICBjY2MpCiAgICAgICAgICAgICAjIENvbXBhcSBDIFY2LjUtMjA3CiAKZGlmZiAtLWdpdCBhL2F1dG8vY2MvZ2NjIGIvYXV0by9jYy9nY2MKaW5kZXggZDc2ZDRhMi4uYWYyNzlmYSAxMDA2NDQKLS0tIGEvYXV0by9jYy9nY2MKKysrIGIvYXV0by9jYy9nY2MKQEAgLTMzLDYgKzMzLDE3IEBACiAgICAgUElQRT0iLXBpcGUiCiBmaQogCisKK2Nhc2UgIiROR1hfUExBVEZPUk0iIGluCisKKyAgICAqOnN1bjR1KQorICAgICAgICAjICItbWNwdT12OSIgZW5hYmxlcyB0aGUgImNhc3hhIiBhc3NlbWJsZXIgaW5zdHJ1Y3Rpb24KKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PXY5IgorICAgIDs7CisKK2VzYWMKKworCiAjIG9wdGltaXphdGlvbnMKIAogI05HWF9HQ0NfT1BUPSItTzIiCkBAIC00OSw3ICs2MCw3IEBACiAgICAgICAgIENQVV9PUFQ9Ii1tYXJjaD1wZW50aXVtIgogICAgIDs7CiAKLSAgICBwZW50aXVtcHJvKQorICAgIHBlbnRpdW1wcm8gfCBwZW50aXVtMykKICAgICAgICAgIyBvcHRpbWl6ZSBmb3IgUGVudGl1bSBQcm8sIFBlbnRpdW0gSUkgYW5kIFBlbnRpdW0gSUlJCiAgICAgICAgIENQVV9PUFQ9Ii1tYXJjaD1wZW50aXVtcHJvIgogICAgIDs7CmRpZmYgLS1naXQgYS9hdXRvL2NjL2ljYyBiL2F1dG8vY2MvaWNjCmluZGV4IGNjYTI0Y2QuLjBhYTk3NWUgMTAwNjQ0Ci0tLSBhL2F1dG8vY2MvaWNjCisrKyBiL2F1dG8vY2MvaWNjCkBAIC05NCw2ICs5NCw4IEBACiBDRkxBR1M9IiRDRkxBR1MgLXdkMTQxOSIKICMgZXhwbGljaXQgY29udmVyc2lvbiBvZiBhIDY0LWJpdCBpbnRlZ3JhbCB0eXBlIHRvIGEgc21hbGxlciBpbnRlZ3JhbCB0eXBlCiBDRkxBR1M9IiRDRkxBR1MgLXdkMTY4MyIKKyMgY29udmVyc2lvbiBmcm9tIHBvaW50ZXIgdG8gc2FtZS1zaXplZCBpbnRlZ3JhbCB0eXBlLCB3YXJuaW5nIG9uIG9mZnNldG9mKCkKK0NGTEFHUz0iJENGTEFHUyAtd2QxNjg0IgogCiBjYXNlICIkTkdYX0lDQ19WRVIiIGluCiAgICAgOC4qIHwgOS4qKQpkaWZmIC0tZ2l0IGEvYXV0by9jYy9uYW1lIGIvYXV0by9jYy9uYW1lCmluZGV4IGM4OWNlNzkuLmZhYTMyOTAgMTAwNjQ0Ci0tLSBhL2F1dG8vY2MvbmFtZQorKysgYi9hdXRvL2NjL25hbWUKQEAgLTM5LDYgKzM5LDExIEBACiAgICAgZWNobyAiIHVzaW5nIEludGVsIEMrKyBjb21waWxlciIKIAogZWxzZQoraWYgYCRDQyAtViAyPiYxIHwgZ3JlcCAnU3VuIEMnIDI+JjEgPi9kZXYvbnVsbGA7IHRoZW4KKyAgICBOR1hfQ0NfTkFNRT1zdW5jCisgICAgZWNobyAiIHVzaW5nIFN1biBDIGNvbXBpbGVyIgorCitlbHNlCiBpZiBgJENDIC1WIDI+JjEgfCBncmVwICdeQ29tcGFxIEMnIDI+JjEgPi9kZXYvbnVsbGA7IHRoZW4KICAgICBOR1hfQ0NfTkFNRT1jY2MKICAgICBlY2hvICIgdXNpbmcgQ29tcGFxIEMgY29tcGlsZXIiCkBAIC01NCw2ICs1OSw3IEBACiAKIGZpICMgYWNjCiBmaSAjIGNjYworZmkgIyBzdW5jCiBmaSAjIGljYwogZmkgIyBnY2MKIGZpICMgYmNjCmRpZmYgLS1naXQgYS9hdXRvL2NjL3N1bmMgYi9hdXRvL2NjL3N1bmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0MDBhMgotLS0gL2Rldi9udWxsCisrKyBiL2F1dG8vY2Mvc3VuYwpAQCAtMCwwICsxLDk1IEBACisKKyMgQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorCisKKyMgU3VuIEMgNS43IFBhdGNoIDExNzgzNy0wNCAyMDA1LzA1LzExCisKK05HWF9TVU5DX1ZFUj1gJENDIC1WIDI+JjEgfCBncmVwICdTdW4gQycgMj4mMSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgJ3MvXi4qIFN1biBDIFwoLipcKS9cMS8nYAorCitlY2hvICIgKyBTdW4gQyB2ZXJzaW9uOiAkTkdYX1NVTkNfVkVSIgorCitoYXZlPU5HWF9DT01QSUxFUiB2YWx1ZT0iXCJTdW4gQyAkTkdYX1NVTkNfVkVSXCIiIC4gYXV0by9kZWZpbmUKKworCitjYXNlICIkTkdYX1BMQVRGT1JNIiBpbgorCisgICAgKjppODZwYykKKyAgICAgICAgTkdYX0FVWD0iIHNyYy9vcy91bml4L25neF9zdW5wcm9feDg2LmlsIgorICAgIDs7CisKKyAgICAqOnN1bjR1KQorICAgICAgICAjICIteGFyY2g9djkiIGVuYWJsZXMgdGhlICJjYXNhIiBhc3NlbWJsZXIgaW5zdHJ1Y3Rpb24KKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC14YXJjaD12OSIKKyAgICAgICAgQ09SRV9MSU5LPSIkQ09SRV9MSU5LIC14YXJjaD12OSIKKyAgICAgICAgTkdYX0FVWD0iIHNyYy9vcy91bml4L25neF9zdW5wcm9fc3BhcmM2NC5pbCIKKyAgICA7OworCitlc2FjCisKKworIyBvcHRpbWl6YXRpb25zCisKK0NGTEFHUz0iJENGTEFHUyAtZmFzdCIKKworCitjYXNlICRDUFUgaW4KKyAgICBwZW50aXVtKQorICAgICAgICAjIG9wdGltaXplIGZvciBQZW50aXVtIGFuZCBBdGhsb24KKyAgICAgICAgQ1BVX09QVD0iLXhjaGlwPXBlbnRpdW0iCisgICAgOzsKKworICAgIHBlbnRpdW1wcm8pCisgICAgICAgICMgb3B0aW1pemUgZm9yIFBlbnRpdW0gUHJvLCBQZW50aXVtIElJCisgICAgICAgIENQVV9PUFQ9Ii14Y2hpcD1wZW50aXVtX3BybyIKKyAgICA7OworCisgICAgcGVudGl1bTMpCisgICAgICAgICMgb3B0aW1pemUgZm9yIFBlbnRpdW0gSUlJCisgICAgICAgIENQVV9PUFQ9Ii14Y2hpcD1wZW50aXVtMyIKKyAgICAgICAgI0NQVV9PUFQ9IiRDUFVfT1BUIC14YXJjaD1zc2UiCisgICAgICAgIENQVV9PUFQ9IiRDUFVfT1BUIC14Y2FjaGU9MTYvMzIvNDoyNTYvMzIvNCIKKyAgICA7OworCisgICAgcGVudGl1bTQpCisgICAgICAgICMgb3B0aW1pemUgZm9yIFBlbnRpdW0gNAorICAgICAgICBDUFVfT1BUPSIteGNoaXA9cGVudGl1bTQiCisgICAgICAgICNDUFVfT1BUPSIkQ1BVX09QVCAteGFyY2g9c3NlMiIKKyAgICAgICAgQ1BVX09QVD0iJENQVV9PUFQgLXhjYWNoZT04LzY0LzQ6MjU2LzEyOC84IgorICAgIDs7CisKKyAgICBvcHRlcm9uKQorICAgICAgICAjIG9wdGltaXplIGZvciBPcHRlcm9uCisgICAgICAgIENQVV9PUFQ9Ii14Y2hpcD1vcHRlcm9uIgorICAgICAgICAjQ1BVX09QVD0iJENQVV9PUFQgLXhhcmNoPXNzZTIiCisgICAgICAgIENQVV9PUFQ9IiRDUFVfT1BUIC14Y2FjaGU9NjQvNjQvMjoxMDI0LzY0LzE2IgorICAgIDs7CisKKyAgICBhbWQ2NCkKKyAgICAgICAgIyBidWlsZCA2NC1iaXQgYW1kNjQgYmluYXJ5CisgICAgICAgIENQVV9PUFQ9Ii14YXJjaD1hbWQ2NCIKKyAgICAgICAgQ09SRV9MSU5LPSIkQ09SRV9MSU5LIC14YXJjaD1hbWQ2NCIKKyAgICAgICAgTkdYX0FVWD0iIHNyYy9vcy91bml4L25neF9zdW5wcm9fYW1kNjQuaWwiCisgICAgOzsKKworZXNhYworCisKK0NGTEFHUz0iJENGTEFHUyAkQ1BVX09QVCIKKworCitpZiBbICIuJFBDUkVfT1BUIiA9ICIuIiBdOyB0aGVuCisgICAgUENSRV9PUFQ9Ii1mYXN0ICRDUFVfT1BUIgorZmkKKworaWYgWyAiLiRNRDVfT1BUIiA9ICIuIiBdOyB0aGVuCisgICAgTUQ1X09QVD0iLWZhc3QgJENQVV9PUFQiCitmaQorCitpZiBbICIuJFpMSUJfT1BUIiA9ICIuIiBdOyB0aGVuCisgICAgWkxJQl9PUFQ9Ii1mYXN0ICRDUFVfT1BUIgorZmkKKworCisjIHN0b3Agb24gd2FybmluZworQ0ZMQUdTPSIkQ0ZMQUdTIC1lcnJ3YXJuPSVhbGwiCmRpZmYgLS1naXQgYS9hdXRvL2NvbmZpZ3VyZSBiL2F1dG8vY29uZmlndXJlCmluZGV4IGY1NGVmMjQuLmRhZmY0YmQgMTAwNzU1Ci0tLSBhL2F1dG8vY29uZmlndXJlCisrKyBiL2F1dG8vY29uZmlndXJlCkBAIC0yMyw4ICsyMyw4IEBACiAgICAgLiBhdXRvL2hlYWRlcnMKIGZpCiAKLS4gYXV0by9jYy9jb25mCiAuIGF1dG8vb3MvY29uZgorLiBhdXRvL2NjL2NvbmYKIAogaWYgWyAiJE5HWF9QTEFURk9STSIgIT0gd2luMzIgXTsgdGhlbgogICAgIC4gYXV0by9vcy9mZWF0dXJlcwpkaWZmIC0tZ2l0IGEvYXV0by9saWIvb3BlbnNzbC9jb25mIGIvYXV0by9saWIvb3BlbnNzbC9jb25mCmluZGV4IGM4YzQ3ZTIuLjAzNzBmZTAgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL29wZW5zc2wvY29uZgorKysgYi9hdXRvL2xpYi9vcGVuc3NsL2NvbmYKQEAgLTM2LDYgKzM2LDEyIEBACiAgICAgICAgIGlmIFsgJG5neF9mb3VuZCA9IHllcyBdOyB0aGVuCiAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJG5neF9mZWF0dXJlX2xpYnMiCiAgICAgICAgICAgICBPUEVOU1NMPVlFUworCisgICAgICAgICAgICBjYXNlICIkTkdYX1NZU1RFTSIgaW4KKyAgICAgICAgICAgICAgICBTdW5PUykKKyAgICAgICAgICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTIC1sZGwiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKICAgICAgICAgZmkKIAogICAgIGZpCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9wY3JlL2NvbmYgYi9hdXRvL2xpYi9wY3JlL2NvbmYKaW5kZXggMWI3OWY5NC4uOTQ2YjI2ZSAxMDA2NDQKLS0tIGEvYXV0by9saWIvcGNyZS9jb25mCisrKyBiL2F1dG8vbGliL3BjcmUvY29uZgpAQCAtMTcsNyArMTcsNyBAQAogICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTICRQQ1JFL3BjcmUubGliIgogICAgICAgICA7OwogCi0gICAgICAgIGljYyopCisgICAgICAgIGljYyogfCBzdW5jICkKICAgICAgICAgICAgIGhhdmU9TkdYX1BDUkUgLiBhdXRvL2hhdmUKICAgICAgICAgICAgIENPUkVfREVQUz0iJENPUkVfREVQUyAkUENSRS9wY3JlLmgiCiAKZGlmZiAtLWdpdCBhL2F1dG8vbWFrZSBiL2F1dG8vbWFrZQppbmRleCA4NjZmYjM0Li5mY2MwNWIxIDEwMDY0NAotLS0gYS9hdXRvL21ha2UKKysrIGIvYXV0by9tYWtlCkBAIC0yMDAsNyArMjAwLDcgQEAKIGNhdCA8PCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQogCiAkbmd4X21vZHVsZXNfb2JqOglcJChDT1JFX0RFUFMpJG5neF9jb250JG5neF9tb2R1bGVzX2MKLQkkbmd4X2NjJG5neF90YWIkbmd4X29iam91dCRuZ3hfbW9kdWxlc19vYmokbmd4X3RhYiRuZ3hfbW9kdWxlc19jCisJJG5neF9jYyRuZ3hfdGFiJG5neF9vYmpvdXQkbmd4X21vZHVsZXNfb2JqJG5neF90YWIkbmd4X21vZHVsZXNfYyROR1hfQVVYCiAKIEVORAogCkBAIC0yMTksNyArMjE5LDcgQEAKICAgICBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQogCiAkbmd4X29iajoJXCQoQ09SRV9ERVBTKSRuZ3hfY29udCRuZ3hfc3JjCi0JJG5neF9jYyRuZ3hfdGFiJG5neF9vYmpvdXQkbmd4X29iaiRuZ3hfdGFiJG5neF9zcmMKKwkkbmd4X2NjJG5neF90YWIkbmd4X29iam91dCRuZ3hfb2JqJG5neF90YWIkbmd4X3NyYyROR1hfQVVYCiAKIEVORAogCkBAIC0yNDgsNyArMjQ4LDcgQEAKICAgICAgICAgY2F0IDw8IEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQogCiAkbmd4X29iajoJXCQoQ09SRV9ERVBTKSBcJChIVFRQX0RFUFMpJG5neF9jb250JG5neF9zcmMKLQkkbmd4X2NjJG5neF90YWIkbmd4X29iam91dCRuZ3hfb2JqJG5neF90YWIkbmd4X3NyYworCSRuZ3hfY2Mkbmd4X3RhYiRuZ3hfb2Jqb3V0JG5neF9vYmokbmd4X3RhYiRuZ3hfc3JjJE5HWF9BVVgKIAogRU5ECiAgICAgIGRvbmUKQEAgLTI3OCw3ICsyNzgsNyBAQAogICAgICAgICBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01BS0VGSUxFCiAKICRuZ3hfb2JqOglcJChDT1JFX0RFUFMpIFwkKElNQVBfREVQUykkbmd4X2NvbnQkbmd4X3NyYwotCSRuZ3hfY2Mkbmd4X3RhYiRuZ3hfb2Jqb3V0JG5neF9vYmokbmd4X3RhYiRuZ3hfc3JjCisJJG5neF9jYyRuZ3hfdGFiJG5neF9vYmpvdXQkbmd4X29iaiRuZ3hfdGFiJG5neF9zcmMkTkdYX0FVWAogCiBFTkQKICAgICAgZG9uZQpAQCAtMzEwLDcgKzMxMCw3IEBACiAgICAgICAgIGNhdCA8PCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTUFLRUZJTEUKIAogJG5neF9vYmo6CVwkKEFERE9OX0RFUFMpJG5neF9jb250JG5neF9zcmMKLQkkbmd4X2NjJG5neF90YWIkbmd4X29iam91dCRuZ3hfb2JqJG5neF90YWIkbmd4X3NyYworCSRuZ3hfY2Mkbmd4X3RhYiRuZ3hfb2Jqb3V0JG5neF9vYmokbmd4X3RhYiRuZ3hfc3JjJE5HWF9BVVgKIAogRU5ECiAgICAgIGRvbmUKZGlmZiAtLWdpdCBhL2F1dG8vb3Mvc29sYXJpcyBiL2F1dG8vb3Mvc29sYXJpcwppbmRleCBjZjdmYzZjLi43M2M5MzcyIDEwMDY0NAotLS0gYS9hdXRvL29zL3NvbGFyaXMKKysrIGIvYXV0by9vcy9zb2xhcmlzCkBAIC0xMiwxNyArMTIsNyBAQAogIyBTb2xhcmlzJ3MgbWFrZSBkb2VzIG5vdCBzdXBwb3J0IGEgYmxhbmsgbGluZSBiZXR3ZWVuIHRhcmdldCBhbmQgcnVsZXMKIG5neF9zcGFjZXI9CiAKLUNDX0FVWF9GTEFHUz0iJENDX0FVWF9GTEFHUyAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1scnQiCi0KLQotY2FzZSAiJE5HWF9QTEFURk9STSIgaW4KLQotICAgICo6c3VuNHUpCi0gICAgICAgICMgIi1tY3B1PXY5IiBlbmFibGVzIHRoZSAiY2FzYSIgYXNzZW1ibGVyIGluc3RydWN0aW9uCi0gICAgICAgIENGTEFHUz0iJENGTEFHUyAtbWNwdT12OSIKLSAgICA7OwotCi1lc2FjCitDQ19BVVhfRkxBR1M9IiRDQ19BVVhfRkxBR1MgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbHNvY2tldCAtbG5zbCAtbHJ0IgogCiAKIGlmIFsgJFpMSUJfQVNNICE9IE5PIF07IHRoZW4KZGlmZiAtLWdpdCBhL2F1dG8vc291cmNlcyBiL2F1dG8vc291cmNlcwppbmRleCBiZjA0ODk0Li5iZDkyNTlhIDEwMDY0NAotLS0gYS9hdXRvL3NvdXJjZXMKKysrIGIvYXV0by9zb3VyY2VzCkBAIC0xMjMsMTIgKzEyMywyMyBAQAogICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuaCBcCiAgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfc2V0cHJvY3RpdGxlLmggXAogICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X2F0b21pYy5oIFwKKyAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3g4Ni5oIFwKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF90aHJlYWQuaCBcCiAgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfc29ja2V0LmggXAogICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X29zLmggXAogICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X3VzZXIuaCBcCiAgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5oIgogCisjIGFkZCB0byBVTklYX0RFUFMKKyMgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19hbWQ2NC5oIFwKKyMgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19zcGFyYzY0LmggXAorIyAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3BwYy5oIFwKKyMgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfc3VucHJvX2F0b21pY19zcGFyYzY0LmggXAorIyAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9zdW5wcm9feDg2LmlsIFwKKyMgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfc3VucHJvX2FtZDY0LmlsIFwKKyMgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfc3VucHJvX3NwYXJjNjQuaWwgXAorCisKIFVOSVhfU1JDUz0iJENPUkVfU1JDUyAkRVZFTlRfU1JDUyBcCiAgICAgICAgICAgICBzcmMvY29yZS9uZ3hfdW5peF9kb21haW4uYyBcCiAgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfdGltZS5jIFwKZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggMDcyNmExZi4uYjRiOTc1ZiAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSwzMiBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4zLjIiIGRhdGU9IjEyLjEwLjIwMDUiPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgor0M/ExMXS1svBIFN1biBTdHVkaW8gMTAgQyBjb21waWxlci4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBTdW4gU3R1ZGlvIDEwIEMgY29tcGlsZXIgc3VwcG9ydC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfZIHByb3h5X3Vwc3RyZWFtX21heF9mYWlscywgcHJveHlfdXBzdHJlYW1fZmFpbF90aW1lb3V0LAorZmFzdGNnaV91cHN0cmVhbV9tYXhfZmFpbHMgySBmYXN0Y2dpX3Vwc3RyZWFtX2ZhaWxfdGltZW91dC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAicHJveHlfdXBzdHJlYW1fbWF4X2ZhaWxzIiwgInByb3h5X3Vwc3RyZWFtX2ZhaWxfdGltZW91dCIsCisiZmFzdGNnaV91cHN0cmVhbV9tYXhfZmFpbHMiLCBhbmQgImZhc3RjZ2lfdXBzdHJlYW1fZmFpbF90aW1lb3V0IgorZGlyZWN0aXZlcy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8L2NoYW5nZXM+CisKKwogPGNoYW5nZXMgdmVyPSIwLjMuMSIgZGF0ZT0iMTAuMTAuMjAwNSI+CiAKIDxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IDIyYzYzMmYuLjY3ZThlNmIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4xIgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4yIgogCiAjZGVmaW5lIE5HSU5YX1ZBUiAgICAgICAgICAiTkdJTlgiCiAjZGVmaW5lIE5HWF9PTERQSURfRVhUICAgICAiLm9sZGJpbiIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYwppbmRleCAxMTBjOWUyLi4wZTY3MWVmIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMKKysrIGIvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jCkBAIC02NjAsNyArNjYwLDcgQEAKIAogICAgIG5hbWUtPmxlbiA9IGN5Y2xlLT5yb290LmxlbiArIG9sZC5sZW47CiAKLSAgICBpZiAoY3ljbGUtPmNvbm5lY3Rpb25zMCkgeworICAgIGlmIChjeWNsZS0+Y29ubmVjdGlvbnMpIHsKICAgICAgICAgbmFtZS0+ZGF0YSA9IG5neF9wYWxsb2MoY3ljbGUtPnBvb2wsIG5hbWUtPmxlbiArIDEpOwogICAgICAgICBpZiAobmFtZS0+ZGF0YSA9PSBOVUxMKSB7CiAgICAgICAgICAgICByZXR1cm4gIE5HWF9FUlJPUjsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25maWcuaCBiL3NyYy9jb3JlL25neF9jb25maWcuaAppbmRleCA0MDQ1ZTdhLi43YzU2ODdlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29uZmlnLmgKKysrIGIvc3JjL2NvcmUvbmd4X2NvbmZpZy5oCkBAIC0xMDYsNyArMTA2LDcgQEAKIAogLyogVE9ETzogYXV0b19jb25mOiBuZ3hfaW5saW5lICAgaW5saW5lIF9faW5saW5lIF9faW5saW5lX18gKi8KICNpZm5kZWYgbmd4X2lubGluZQotI2RlZmluZSBuZ3hfaW5saW5lICAgX19pbmxpbmUKKyNkZWZpbmUgbmd4X2lubGluZSAgIGlubGluZQogI2VuZGlmCiAKICNkZWZpbmUgTkdYX0FDQ0VQVF9USFJFU0hPTEQgICAxMDAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCmluZGV4IGE3MzcxYmYuLjNmMzZkMzEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKKysrIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYwpAQCAtMzcyLDcgKzM3Miw5IEBACiBuZ3hfY29ubmVjdGlvbl90ICoKIG5neF9nZXRfY29ubmVjdGlvbihuZ3hfc29ja2V0X3Qgcywgbmd4X2xvZ190ICpsb2cpCiB7Ci0gICAgbmd4X2Nvbm5lY3Rpb25fdCAqYzsKKyAgICBuZ3hfdWludF90ICAgICAgICAgaW5zdGFuY2U7CisgICAgbmd4X2V2ZW50X3QgICAgICAgKnJldiwgKndldjsKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAqYzsKIAogICAgIC8qIGRpc2FibGUgd2FybmluZzogV2luMzIgU09DS0VUIGlzIHVfaW50IHdoaWxlIFVOSVggc29ja2V0IGlzIGludCAqLwogCkBAIC00MDcsNiArNDA5LDMyIEBACiAgICAgICAgIG5neF9jeWNsZS0+ZmlsZXNbc10gPSBjOwogICAgIH0KIAorICAgIHJldiA9IGMtPnJlYWQ7CisgICAgd2V2ID0gYy0+d3JpdGU7CisKKyAgICBuZ3hfbWVtemVybyhjLCBzaXplb2Yobmd4X2Nvbm5lY3Rpb25fdCkpOworCisgICAgYy0+cmVhZCA9IHJldjsKKyAgICBjLT53cml0ZSA9IHdldjsKKyAgICBjLT5mZCA9IHM7CisgICAgYy0+bG9nID0gbG9nOworCisgICAgaW5zdGFuY2UgPSByZXYtPmluc3RhbmNlOworCisgICAgbmd4X21lbXplcm8ocmV2LCBzaXplb2Yobmd4X2V2ZW50X3QpKTsKKyAgICBuZ3hfbWVtemVybyh3ZXYsIHNpemVvZihuZ3hfZXZlbnRfdCkpOworCisgICAgcmV2LT5pbnN0YW5jZSA9ICFpbnN0YW5jZTsKKyAgICB3ZXYtPmluc3RhbmNlID0gIWluc3RhbmNlOworCisgICAgcmV2LT5pbmRleCA9IE5HWF9JTlZBTElEX0lOREVYOworICAgIHdldi0+aW5kZXggPSBOR1hfSU5WQUxJRF9JTkRFWDsKKworICAgIHJldi0+ZGF0YSA9IGM7CisgICAgd2V2LT5kYXRhID0gYzsKKworICAgIHdldi0+d3JpdGUgPSAxOworCiAgICAgcmV0dXJuIGM7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jeWNsZS5jIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKaW5kZXggODM5ODQzZi4uZDhmOTVmYSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKKysrIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKQEAgLTYyNyw3ICs2MjcsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9sZF9jeWNsZS0+Y29ubmVjdGlvbnMwID09IE5VTEwpIHsKKyAgICBpZiAob2xkX2N5Y2xlLT5jb25uZWN0aW9ucyA9PSBOVUxMKSB7CiAgICAgICAgIC8qIGFuIG9sZCBjeWNsZSBpcyBhbiBpbml0IGN5Y2xlICovCiAgICAgICAgIG5neF9kZXN0cm95X3Bvb2wob2xkX2N5Y2xlLT5wb29sKTsKICAgICAgICAgcmV0dXJuIGN5Y2xlOwpAQCAtOTU5LDcgKzk1OSw3IEBACiAgICAgICAgIGZvdW5kID0gMDsKIAogICAgICAgICBmb3IgKG4gPSAwOyBuIDwgY3ljbGVbaV0tPmNvbm5lY3Rpb25fbjsgbisrKSB7Ci0gICAgICAgICAgICBpZiAoY3ljbGVbaV0tPmNvbm5lY3Rpb25zMFtuXS5mZCAhPSAobmd4X3NvY2tldF90KSAtMSkgeworICAgICAgICAgICAgaWYgKGN5Y2xlW2ldLT5jb25uZWN0aW9uc1tuXS5mZCAhPSAobmd4X3NvY2tldF90KSAtMSkgewogICAgICAgICAgICAgICAgIGZvdW5kID0gMTsKIAogICAgICAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgbG9nLCAwLCAibGl2ZSBmZDolZCIsIG4pOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmggYi9zcmMvY29yZS9uZ3hfY3ljbGUuaAppbmRleCBiZjFkNDMwLi5hOTQ0NDRhIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY3ljbGUuaAorKysgYi9zcmMvY29yZS9uZ3hfY3ljbGUuaApAQCAtMzksOSArMzksOSBAQAogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgY29ubmVjdGlvbl9uOwogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgZmlsZXNfbjsKIAotICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgICAqY29ubmVjdGlvbnMwOwotICAgIG5neF9ldmVudF90ICAgICAgICAgICAgICAqcmVhZF9ldmVudHMwOwotICAgIG5neF9ldmVudF90ICAgICAgICAgICAgICAqd3JpdGVfZXZlbnRzMDsKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICAgKmNvbm5lY3Rpb25zOworICAgIG5neF9ldmVudF90ICAgICAgICAgICAgICAqcmVhZF9ldmVudHM7CisgICAgbmd4X2V2ZW50X3QgICAgICAgICAgICAgICp3cml0ZV9ldmVudHM7CiAKICAgICBuZ3hfY3ljbGVfdCAgICAgICAgICAgICAgKm9sZF9jeWNsZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2ZpbGUuYyBiL3NyYy9jb3JlL25neF9maWxlLmMKaW5kZXggZWZhYmQzOS4uNzZlNzFjNyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2ZpbGUuYworKysgYi9zcmMvY29yZS9uZ3hfZmlsZS5jCkBAIC0zNiw3ICszNiw3IEBACiAKIG5neF9pbnRfdAogbmd4X2NyZWF0ZV90ZW1wX2ZpbGUobmd4X2ZpbGVfdCAqZmlsZSwgbmd4X3BhdGhfdCAqcGF0aCwgbmd4X3Bvb2xfdCAqcG9vbCwKLSAgICBpbnQgcGVyc2lzdGVudCkKKyAgICBuZ3hfdWludF90IHBlcnNpc3RlbnQpCiB7CiAgICAgbmd4X2Vycl90ICAgICAgICAgICAgICAgICBlcnI7CiAgICAgbmd4X2F0b21pY191aW50X3QgICAgICAgICBuOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2ZpbGUuaCBiL3NyYy9jb3JlL25neF9maWxlLmgKaW5kZXggMWVmZWUyOS4uNTJjMWFlMiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2ZpbGUuaAorKysgYi9zcmMvY29yZS9uZ3hfZmlsZS5oCkBAIC01NSw3ICs1NSw3IEBACiAKIHNzaXplX3Qgbmd4X3dyaXRlX2NoYWluX3RvX3RlbXBfZmlsZShuZ3hfdGVtcF9maWxlX3QgKnRmLCBuZ3hfY2hhaW5fdCAqY2hhaW4pOwogbmd4X2ludF90IG5neF9jcmVhdGVfdGVtcF9maWxlKG5neF9maWxlX3QgKmZpbGUsIG5neF9wYXRoX3QgKnBhdGgsCi0gICAgbmd4X3Bvb2xfdCAqcG9vbCwgaW50IHBlcnNpc3RlbnQpOworICAgIG5neF9wb29sX3QgKnBvb2wsIG5neF91aW50X3QgcGVyc2lzdGVudCk7CiB2b2lkIG5neF9jcmVhdGVfaGFzaGVkX2ZpbGVuYW1lKG5neF9maWxlX3QgKmZpbGUsIG5neF9wYXRoX3QgKnBhdGgpOwogbmd4X2ludF90IG5neF9jcmVhdGVfcGF0aChuZ3hfZmlsZV90ICpmaWxlLCBuZ3hfcGF0aF90ICpwYXRoKTsKIG5neF9pbnRfdCBuZ3hfYWRkX3BhdGgobmd4X2NvbmZfdCAqY2YsIG5neF9wYXRoX3QgKipzbG90KTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9pbmV0LmMgYi9zcmMvY29yZS9uZ3hfaW5ldC5jCmluZGV4IDM3NmFhYWUuLjYwYTQwZWMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9pbmV0LmMKKysrIGIvc3JjL2NvcmUvbmd4X2luZXQuYwpAQCAtMzQzLDEwICszNDMsNiBAQAogICAgICAgICAgICAgcGVlcnMtPnBlZXJbaV0ubmFtZS5sZW4gPSBsZW4gKyB1LT5wb3J0X3RleHQubGVuOwogCiAgICAgICAgICAgICBwZWVycy0+cGVlcltpXS51cmlfc2VwYXJhdG9yID0gIiI7Ci0KLSAgICAgICAgICAgIHBlZXJzLT5wZWVyW2ldLndlaWdodCA9IDE7Ci0gICAgICAgICAgICBwZWVycy0+cGVlcltpXS5tYXhfZmFpbHMgPSAxOwotICAgICAgICAgICAgcGVlcnMtPnBlZXJbaV0uZmFpbF90aW1lb3V0ID0gMTA7CiAgICAgICAgIH0KIAogICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmMgYi9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKaW5kZXggOTM0NDlhYi4uMTE2NGNjNCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3N0cmluZy5jCisrKyBiL3NyYy9jb3JlL25neF9zdHJpbmcuYwpAQCAtMTE1LDYgKzExNSw3IEBACiAgICAgdWludDMyX3QgICAgICAgIHVpMzI7CiAgICAgaW50NjRfdCAgICAgICAgIGk2NDsKICAgICB1aW50NjRfdCAgICAgICAgdWk2NDsKKyAgICBuZ3hfbXNlY190ICAgICAgbXM7CiAgICAgbmd4X3N0cl90ICAgICAgKnM7CiAgICAgbmd4X3VpbnRfdCAgICAgIHdpZHRoLCBzaWduLCBoZXhhZGVjaW1hbCwgbWF4X3dpZHRoOwogICAgIHN0YXRpYyB1X2NoYXIgICBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKQEAgLTIyMSw4ICsyMjIsMTQgQEAKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAnTSc6Ci0gICAgICAgICAgICAgICAgdWk2NCA9ICh1aW50NjRfdCkgdmFfYXJnKGFyZ3MsIG5neF9tc2VjX3QpOwotICAgICAgICAgICAgICAgIHNpZ24gPSAwOworICAgICAgICAgICAgICAgIG1zID0gKG5neF9tc2VjX3QpIHZhX2FyZyhhcmdzLCBuZ3hfbXNlY190KTsKKyAgICAgICAgICAgICAgICBpZiAoKG5neF9tc2VjX2ludF90KSBtcyA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBzaWduID0gMTsKKyAgICAgICAgICAgICAgICAgICAgaTY0ID0gLTE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2lnbiA9IDA7CisgICAgICAgICAgICAgICAgICAgIHVpNjQgPSAodWludDY0X3QpIG1zOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAneic6CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfa3F1ZXVlX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2txdWV1ZV9tb2R1bGUuYwppbmRleCA5OTM0MmFiLi5lODBlMWFiIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfa3F1ZXVlX21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9rcXVldWVfbW9kdWxlLmMKQEAgLTUxMSw3ICs1MTEsNyBAQAogICAgIH0KIAogICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImtldmVudCB0aW1lcjogJWQsIGNoYW5nZXM6ICVkIiwgdGltZXIsIG4pOworICAgICAgICAgICAgICAgICAgICJrZXZlbnQgdGltZXI6ICVNLCBjaGFuZ2VzOiAlZCIsIHRpbWVyLCBuKTsKIAogICAgIGV2ZW50cyA9IGtldmVudChuZ3hfa3F1ZXVlLCBjaGFuZ2VfbGlzdCwgbiwgZXZlbnRfbGlzdCwgbmV2ZW50cywgdHApOwogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKaW5kZXggZWFjYTQ2Ny4uMmUyYTA2NSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuYwpAQCAtNDAsNyArNDAsNyBAQAogbmd4X2V2ZW50X2FjdGlvbnNfdCAgIG5neF9ldmVudF9hY3Rpb25zOwogCiAKLW5neF9hdG9taWNfdCAgICAgICAgICBjb25uZWN0aW9uX2NvdW50ZXI7CituZ3hfYXRvbWljX3QgICAgICAgICAgY29ubmVjdGlvbl9jb3VudGVyID0gMTsKIG5neF9hdG9taWNfdCAgICAgICAgICpuZ3hfY29ubmVjdGlvbl9jb3VudGVyID0gJmNvbm5lY3Rpb25fY291bnRlcjsKIAogCkBAIC00OSw2ICs0OSw3IEBACiBuZ3hfdWludF90ICAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF9oZWxkOwogbmd4X21zZWNfdCAgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfZGVsYXk7CiBuZ3hfaW50X3QgICAgICAgICAgICAgbmd4X2FjY2VwdF9kaXNhYmxlZDsKK25neF9maWxlX3QgICAgICAgICAgICBuZ3hfYWNjZXB0X211dGV4X2xvY2tfZmlsZTsKIAogCiAjaWYgKE5HWF9TVEFUX1NUVUIpCkBAIC0zNDksNyArMzUwLDcgQEAKIAogICAgIGVjZiA9ICgqY2YpW25neF9ldmVudF9jb3JlX21vZHVsZS5jdHhfaW5kZXhdOwogCi0gICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGN5Y2xlLT5sb2csIDAsCisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICJ1c2luZyB0aGUgXCIlc1wiIGV2ZW50IG1ldGhvZCIsIGVjZi0+bmFtZSk7CiAKICNpZiAhKE5HWF9XSU4zMikKQEAgLTUwMSwyMSArNTAyLDIxIEBACiAKICNlbmRpZgogCi0gICAgY3ljbGUtPmNvbm5lY3Rpb25zMCA9IG5neF9hbGxvYyhzaXplb2Yobmd4X2Nvbm5lY3Rpb25fdCkgKiBlY2YtPmNvbm5lY3Rpb25zLAorICAgIGN5Y2xlLT5jb25uZWN0aW9ucyA9IG5neF9hbGxvYyhzaXplb2Yobmd4X2Nvbm5lY3Rpb25fdCkgKiBlY2YtPmNvbm5lY3Rpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZS0+bG9nKTsKLSAgICBpZiAoY3ljbGUtPmNvbm5lY3Rpb25zMCA9PSBOVUxMKSB7CisgICAgaWYgKGN5Y2xlLT5jb25uZWN0aW9ucyA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgYyA9IGN5Y2xlLT5jb25uZWN0aW9uczA7CisgICAgYyA9IGN5Y2xlLT5jb25uZWN0aW9uczsKIAotICAgIGN5Y2xlLT5yZWFkX2V2ZW50czAgPSBuZ3hfYWxsb2Moc2l6ZW9mKG5neF9ldmVudF90KSAqIGVjZi0+Y29ubmVjdGlvbnMsCisgICAgY3ljbGUtPnJlYWRfZXZlbnRzID0gbmd4X2FsbG9jKHNpemVvZihuZ3hfZXZlbnRfdCkgKiBlY2YtPmNvbm5lY3Rpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZS0+bG9nKTsKLSAgICBpZiAoY3ljbGUtPnJlYWRfZXZlbnRzMCA9PSBOVUxMKSB7CisgICAgaWYgKGN5Y2xlLT5yZWFkX2V2ZW50cyA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgcmV2ID0gY3ljbGUtPnJlYWRfZXZlbnRzMDsKKyAgICByZXYgPSBjeWNsZS0+cmVhZF9ldmVudHM7CiAgICAgZm9yIChpID0gMDsgaSA8IGN5Y2xlLT5jb25uZWN0aW9uX247IGkrKykgewogICAgICAgICByZXZbaV0uY2xvc2VkID0gMTsKICAgICAgICAgcmV2W2ldLmluc3RhbmNlID0gMTsKQEAgLTUyNSwxMyArNTI2LDEzIEBACiAjZW5kaWYKICAgICB9CiAKLSAgICBjeWNsZS0+d3JpdGVfZXZlbnRzMCA9IG5neF9hbGxvYyhzaXplb2Yobmd4X2V2ZW50X3QpICogZWNmLT5jb25uZWN0aW9ucywKKyAgICBjeWNsZS0+d3JpdGVfZXZlbnRzID0gbmd4X2FsbG9jKHNpemVvZihuZ3hfZXZlbnRfdCkgKiBlY2YtPmNvbm5lY3Rpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUtPmxvZyk7Ci0gICAgaWYgKGN5Y2xlLT53cml0ZV9ldmVudHMwID09IE5VTEwpIHsKKyAgICBpZiAoY3ljbGUtPndyaXRlX2V2ZW50cyA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgd2V2ID0gY3ljbGUtPndyaXRlX2V2ZW50czA7CisgICAgd2V2ID0gY3ljbGUtPndyaXRlX2V2ZW50czsKICAgICBmb3IgKGkgPSAwOyBpIDwgY3ljbGUtPmNvbm5lY3Rpb25fbjsgaSsrKSB7CiAgICAgICAgIHdldltpXS5jbG9zZWQgPSAxOwogI2lmIChOR1hfVEhSRUFEUykKQEAgLTU0Nyw4ICs1NDgsOCBAQAogICAgICAgICBpLS07CiAKICAgICAgICAgY1tpXS5kYXRhID0gbmV4dDsKLSAgICAgICAgY1tpXS5yZWFkID0gJmN5Y2xlLT5yZWFkX2V2ZW50czBbaV07Ci0gICAgICAgIGNbaV0ud3JpdGUgPSAmY3ljbGUtPndyaXRlX2V2ZW50czBbaV07CisgICAgICAgIGNbaV0ucmVhZCA9ICZjeWNsZS0+cmVhZF9ldmVudHNbaV07CisgICAgICAgIGNbaV0ud3JpdGUgPSAmY3ljbGUtPndyaXRlX2V2ZW50c1tpXTsKICAgICAgICAgY1tpXS5mZCA9IChuZ3hfc29ja2V0X3QpIC0xOwogCiAgICAgICAgIG5leHQgPSAmY1tpXTsKQEAgLTU3MiwxNCArNTczLDYgQEAKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KIAotICAgICAgICByZXYgPSBjLT5yZWFkOwotICAgICAgICB3ZXYgPSBjLT53cml0ZTsKLQotICAgICAgICBuZ3hfbWVtemVybyhjLCBzaXplb2Yobmd4X2Nvbm5lY3Rpb25fdCkpOwotCi0gICAgICAgIGMtPnJlYWQgPSByZXY7Ci0gICAgICAgIGMtPndyaXRlID0gd2V2OwotICAgICAgICBjLT5mZCA9IGxzW2ldLmZkOwogICAgICAgICBjLT5sb2cgPSAmbHNbaV0ubG9nOwogCiAgICAgICAgIGMtPmxpc3RlbmluZyA9ICZsc1tpXTsKQEAgLTU4OCwxOCArNTgxLDkgQEAKICAgICAgICAgYy0+Y3R4ID0gbHNbaV0uY3R4OwogICAgICAgICBjLT5zZXJ2ZXJzID0gbHNbaV0uc2VydmVyczsKIAotICAgICAgICBuZ3hfbWVtemVybyhyZXYsIHNpemVvZihuZ3hfZXZlbnRfdCkpOwotICAgICAgICBuZ3hfbWVtemVybyh3ZXYsIHNpemVvZihuZ3hfZXZlbnRfdCkpOwotCi0gICAgICAgIC8qIHJlcXVpcmVkIGJ5IHBvbGwgKi8KLSAgICAgICAgd2V2LT5pbmRleCA9IE5HWF9JTlZBTElEX0lOREVYOworICAgICAgICByZXYgPSBjLT5yZWFkOwogCiAgICAgICAgIHJldi0+bG9nID0gYy0+bG9nOwotICAgICAgICByZXYtPmRhdGEgPSBjOwotICAgICAgICByZXYtPmluZGV4ID0gTkdYX0lOVkFMSURfSU5ERVg7Ci0KLSAgICAgICAgcmV2LT5hdmFpbGFibGUgPSAwOwotCiAgICAgICAgIHJldi0+YWNjZXB0ID0gMTsKIAogI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQpCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYwppbmRleCA0ZGY5ZGM2Li4yMzhhNDk0IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKQEAgLTIyLDcgKzIyLDYgQEAKICAgICBzb2NrbGVuX3QgICAgICAgICAgc2w7CiAgICAgbmd4X2Vycl90ICAgICAgICAgIGVycjsKICAgICBuZ3hfbG9nX3QgICAgICAgICAqbG9nOwotICAgIG5neF91aW50X3QgICAgICAgICBpbnN0YW5jZTsKICAgICBuZ3hfc29ja2V0X3QgICAgICAgczsKICAgICBuZ3hfZXZlbnRfdCAgICAgICAqcmV2LCAqd2V2OwogICAgIG5neF9saXN0ZW5pbmdfdCAgICpsczsKQEAgLTc2LDggKzc1LDggQEAKICAgICAgICAgfQogCiAjaWYgKE5HWF9TVEFUX1NUVUIpCi0gICAgICAgIG5neF9hdG9taWNfaW5jKG5neF9zdGF0X2FjY2VwdGVkKTsKLSAgICAgICAgbmd4X2F0b21pY19pbmMobmd4X3N0YXRfYWN0aXZlKTsKKyAgICAgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfYWNjZXB0ZWQsIDEpOworICAgICAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF9hY3RpdmUsIDEpOwogI2VuZGlmCiAKICAgICAgICAgbmd4X2FjY2VwdF9kaXNhYmxlZCA9IE5HWF9BQ0NFUFRfVEhSRVNIT0xECkBAIC05NCwxNiArOTMsNiBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgcmV2ID0gYy0+cmVhZDsKLSAgICAgICAgd2V2ID0gYy0+d3JpdGU7Ci0KLSAgICAgICAgbmd4X21lbXplcm8oYywgc2l6ZW9mKG5neF9jb25uZWN0aW9uX3QpKTsKLQotICAgICAgICBjLT5yZWFkID0gcmV2OwotICAgICAgICBjLT53cml0ZSA9IHdldjsKLSAgICAgICAgYy0+ZmQgPSBzOwotICAgICAgICBjLT5sb2cgPSBldi0+bG9nOwotCiAgICAgICAgIGMtPnBvb2wgPSBuZ3hfY3JlYXRlX3Bvb2wobHMtPnBvb2xfc2l6ZSwgZXYtPmxvZyk7CiAgICAgICAgIGlmIChjLT5wb29sID09IE5VTEwpIHsKICAgICAgICAgICAgIG5neF9jbG9zZV9hY2NlcHRlZF9jb25uZWN0aW9uKGMpOwpAQCAtMTY0LDIxICsxNTMsOSBAQAogICAgICAgICBjLT5jdHggPSBsYy0+Y3R4OwogICAgICAgICBjLT5zZXJ2ZXJzID0gbGMtPnNlcnZlcnM7CiAKLSAgICAgICAgaW5zdGFuY2UgPSByZXYtPmluc3RhbmNlOworICAgICAgICByZXYgPSBjLT5yZWFkOworICAgICAgICB3ZXYgPSBjLT53cml0ZTsKIAotICAgICAgICBuZ3hfbWVtemVybyhyZXYsIHNpemVvZihuZ3hfZXZlbnRfdCkpOwotICAgICAgICBuZ3hfbWVtemVybyh3ZXYsIHNpemVvZihuZ3hfZXZlbnRfdCkpOwotCi0gICAgICAgIHJldi0+aW5zdGFuY2UgPSAhaW5zdGFuY2U7Ci0gICAgICAgIHdldi0+aW5zdGFuY2UgPSAhaW5zdGFuY2U7Ci0KLSAgICAgICAgcmV2LT5pbmRleCA9IE5HWF9JTlZBTElEX0lOREVYOwotICAgICAgICB3ZXYtPmluZGV4ID0gTkdYX0lOVkFMSURfSU5ERVg7Ci0KLSAgICAgICAgcmV2LT5kYXRhID0gYzsKLSAgICAgICAgd2V2LT5kYXRhID0gYzsKLQotICAgICAgICB3ZXYtPndyaXRlID0gMTsKICAgICAgICAgd2V2LT5yZWFkeSA9IDE7CiAKICAgICAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIChOR1hfVVNFX0FJT19FVkVOVHxOR1hfVVNFX1JUU0lHX0VWRU5UKSkgewpAQCAtMTk3LDE4ICsxNzQsMTggQEAKICAgICAgICAgd2V2LT5sb2cgPSBsb2c7CiAKICAgICAgICAgLyoKLSAgICAgICAgICogVE9ETzogTVQ6IC0gYXRvbWljIGluY3JlbWVudCAoeDg2OiBsb2NrIHhhZGQpCisgICAgICAgICAqIFRPRE86IE1UOiAtIG5neF9hdG9taWNfZmV0Y2hfYWRkKCkKICAgICAgICAgICogICAgICAgICAgICAgb3IgcHJvdGVjdGlvbiBieSBjcml0aWNhbCBzZWN0aW9uIG9yIGxpZ2h0IG11dGV4CiAgICAgICAgICAqCiAgICAgICAgICAqIFRPRE86IE1QOiAtIGFsbG9jYXRlZCBpbiBhIHNoYXJlZCBtZW1vcnkKLSAgICAgICAgICogICAgICAgICAgIC0gYXRvbWljIGluY3JlbWVudCAoeDg2OiBsb2NrIHhhZGQpCisgICAgICAgICAqICAgICAgICAgICAtIG5neF9hdG9taWNfZmV0Y2hfYWRkKCkKICAgICAgICAgICogICAgICAgICAgICAgb3IgcHJvdGVjdGlvbiBieSBjcml0aWNhbCBzZWN0aW9uIG9yIGxpZ2h0IG11dGV4CiAgICAgICAgICAqLwogCi0gICAgICAgIGMtPm51bWJlciA9IG5neF9hdG9taWNfaW5jKG5neF9jb25uZWN0aW9uX2NvdW50ZXIpOworICAgICAgICBjLT5udW1iZXIgPSBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfY29ubmVjdGlvbl9jb3VudGVyLCAxKTsKIAogI2lmIChOR1hfU1RBVF9TVFVCKQotICAgICAgICBuZ3hfYXRvbWljX2luYyhuZ3hfc3RhdF9oYW5kbGVkKTsKKyAgICAgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfaGFuZGxlZCwgMSk7CiAjZW5kaWYKIAogI2lmIChOR1hfVEhSRUFEUykKQEAgLTM5MSw3ICszNjgsNyBAQAogICAgIH0KIAogI2lmIChOR1hfU1RBVF9TVFVCKQotICAgIG5neF9hdG9taWNfZGVjKG5neF9zdGF0X2FjdGl2ZSk7CisgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfYWN0aXZlLCAtMSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHRleC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHRleC5jCmluZGV4IDk2MTk3MTQuLmYyNjk4NDQgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0ZXguYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdGV4LmMKQEAgLTc1LDcgKzc1LDcgQEAKIAogICAgIG5neF9ldmVudF9wb3N0X2FjY2VwdGV4KGMtPmxpc3RlbmluZywgMSk7CiAKLSAgICBjLT5udW1iZXIgPSBuZ3hfYXRvbWljX2luYyhuZ3hfY29ubmVjdGlvbl9jb3VudGVyKTsKKyAgICBjLT5udW1iZXIgPSBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfY29ubmVjdGlvbl9jb3VudGVyLCAxKTsKIAogICAgIGMtPmxpc3RlbmluZy0+aGFuZGxlcihjKTsKIApAQCAtMTE3LDE2ICsxMTcsNiBAQAogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogCi0gICAgICAgIHJldiA9IGMtPnJlYWQ7Ci0gICAgICAgIHdldiA9IGMtPndyaXRlOwotCi0gICAgICAgIG5neF9tZW16ZXJvKGMsIHNpemVvZihuZ3hfY29ubmVjdGlvbl90KSk7Ci0KLSAgICAgICAgYy0+cmVhZCA9IHJldjsKLSAgICAgICAgYy0+d3JpdGUgPSB3ZXY7Ci0gICAgICAgIGMtPmZkID0gczsKLSAgICAgICAgYy0+bG9nID0gJmxzLT5sb2c7Ci0KICAgICAgICAgYy0+cG9vbCA9IG5neF9jcmVhdGVfcG9vbChscy0+cG9vbF9zaXplLCAmbHMtPmxvZyk7CiAgICAgICAgIGlmIChjLT5wb29sID09IE5VTEwpIHsKICAgICAgICAgICAgIG5neF9jbG9zZV9wb3N0ZWRfY29ubmVjdGlvbihjKTsKQEAgLTE3MiwyMSArMTYyLDE0IEBACiAKICAgICAgICAgYy0+bGlzdGVuaW5nID0gbHM7CiAKLSAgICAgICAgbmd4X21lbXplcm8ocmV2LCBzaXplb2Yobmd4X2V2ZW50X3QpKTsKLSAgICAgICAgbmd4X21lbXplcm8od2V2LCBzaXplb2Yobmd4X2V2ZW50X3QpKTsKLQotICAgICAgICByZXYtPmRhdGEgPSBjOwotICAgICAgICB3ZXYtPmRhdGEgPSBjOwotCi0gICAgICAgIHJldi0+aW5kZXggPSBOR1hfSU5WQUxJRF9JTkRFWDsKLSAgICAgICAgd2V2LT5pbmRleCA9IE5HWF9JTlZBTElEX0lOREVYOworICAgICAgICByZXYgPSBjLT5yZWFkOworICAgICAgICB3ZXYgPSBjLT53cml0ZTsKIAogICAgICAgICByZXYtPm92bHAuZXZlbnQgPSByZXY7CiAgICAgICAgIHdldi0+b3ZscC5ldmVudCA9IHdldjsKICAgICAgICAgcmV2LT5oYW5kbGVyID0gbmd4X2V2ZW50X2FjY2VwdGV4OwogCiAgICAgICAgIHJldi0+cmVhZHkgPSAxOwotICAgICAgICB3ZXYtPndyaXRlID0gMTsKICAgICAgICAgd2V2LT5yZWFkeSA9IDE7CiAKICAgICAgICAgcmV2LT5sb2cgPSBjLT5sb2c7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jCmluZGV4IDgwNDIyNmYuLjYxODJlZjAgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jCkBAIC0xNCw3ICsxNCw3IEBACiBuZ3hfZXZlbnRfY29ubmVjdF9wZWVyKG5neF9wZWVyX2Nvbm5lY3Rpb25fdCAqcGMpCiB7CiAgICAgaW50ICAgICAgICAgICAgICAgIHJjOwotICAgIG5neF91aW50X3QgICAgICAgICBpbnN0YW5jZSwgbGV2ZWwsIGk7CisgICAgbmd4X3VpbnRfdCAgICAgICAgIGxldmVsLCBpOwogICAgIHVfaW50ICAgICAgICAgICAgICBldmVudDsKICAgICB0aW1lX3QgICAgICAgICAgICAgbm93OwogICAgIG5neF9lcnJfdCAgICAgICAgICBlcnI7CkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgIGZvciAoIDs7ICkgewogICAgICAgICAgICAgcGVlciA9ICZwYy0+cGVlcnMtPnBlZXJbcGMtPmN1cl9wZWVyXTsKIAotICAgICAgICAgICAgaWYgKHBlZXItPmZhaWxzIDw9IHBlZXItPm1heF9mYWlscykgeworICAgICAgICAgICAgaWYgKHBlZXItPm1heF9mYWlscyA9PSAwIHx8IHBlZXItPmZhaWxzIDw9IHBlZXItPm1heF9mYWlscykgewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC0xMzksMTYgKzEzOSw2IEBACiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgcmV2ID0gYy0+cmVhZDsKLSAgICB3ZXYgPSBjLT53cml0ZTsKLQotICAgIG5neF9tZW16ZXJvKGMsIHNpemVvZihuZ3hfY29ubmVjdGlvbl90KSk7Ci0KLSAgICBjLT5yZWFkID0gcmV2OwotICAgIGMtPndyaXRlID0gd2V2OwotICAgIGMtPmZkID0gczsKLSAgICBjLT5sb2cgPSBwYy0+bG9nOwotCiAgICAgaWYgKHBjLT5yY3ZidWYpIHsKICAgICAgICAgaWYgKHNldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLAogICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAmcGMtPnJjdmJ1Ziwgc2l6ZW9mKGludCkpID09IC0xKSB7CkBAIC0xOTEsMjEgKzE4MSw4IEBACiAgICAgICAgIGMtPnRjcF9ub2RlbGF5ID0gTkdYX1RDUF9OT0RFTEFZX0RJU0FCTEVEOwogICAgIH0KIAotICAgIGluc3RhbmNlID0gcmV2LT5pbnN0YW5jZTsKLQotICAgIG5neF9tZW16ZXJvKHJldiwgc2l6ZW9mKG5neF9ldmVudF90KSk7Ci0gICAgbmd4X21lbXplcm8od2V2LCBzaXplb2Yobmd4X2V2ZW50X3QpKTsKLQotICAgIHJldi0+aW5zdGFuY2UgPSAhaW5zdGFuY2U7Ci0gICAgd2V2LT5pbnN0YW5jZSA9ICFpbnN0YW5jZTsKLQotICAgIHJldi0+aW5kZXggPSBOR1hfSU5WQUxJRF9JTkRFWDsKLSAgICB3ZXYtPmluZGV4ID0gTkdYX0lOVkFMSURfSU5ERVg7Ci0KLSAgICByZXYtPmRhdGEgPSBjOwotICAgIHdldi0+ZGF0YSA9IGM7Ci0KLSAgICB3ZXYtPndyaXRlID0gMTsKKyAgICByZXYgPSBjLT5yZWFkOworICAgIHdldiA9IGMtPndyaXRlOwogCiAgICAgcmV2LT5sb2cgPSBwYy0+bG9nOwogICAgIHdldi0+bG9nID0gcGMtPmxvZzsKQEAgLTIxMywxNSArMTkwLDE1IEBACiAgICAgcGMtPmNvbm5lY3Rpb24gPSBjOwogCiAgICAgLyoKLSAgICAgKiBUT0RPOiBNVDogLSBhdG9taWMgaW5jcmVtZW50ICh4ODY6IGxvY2sgeGFkZCkKKyAgICAgKiBUT0RPOiBNVDogLSBuZ3hfYXRvbWljX2ZldGNoX2FkZCgpCiAgICAgICogICAgICAgICAgICAgb3IgcHJvdGVjdGlvbiBieSBjcml0aWNhbCBzZWN0aW9uIG9yIG11dGV4CiAgICAgICoKICAgICAgKiBUT0RPOiBNUDogLSBhbGxvY2F0ZWQgaW4gYSBzaGFyZWQgbWVtb3J5Ci0gICAgICogICAgICAgICAgIC0gYXRvbWljIGluY3JlbWVudCAoeDg2OiBsb2NrIHhhZGQpCisgICAgICogICAgICAgICAgIC0gbmd4X2F0b21pY19mZXRjaF9hZGQoKQogICAgICAqICAgICAgICAgICAgIG9yIHByb3RlY3Rpb24gYnkgY3JpdGljYWwgc2VjdGlvbiBvciBtdXRleAogICAgICAqLwogCi0gICAgYy0+bnVtYmVyID0gbmd4X2F0b21pY19pbmMobmd4X2Nvbm5lY3Rpb25fY291bnRlcik7CisgICAgYy0+bnVtYmVyID0gbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X2Nvbm5lY3Rpb25fY291bnRlciwgMSk7CiAKICNpZiAoTkdYX1RIUkVBRFMpCiAgICAgcmV2LT5sb2NrID0gcGMtPmxvY2s7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmMKaW5kZXggNjU2ZjYyYi4uMTc0Y2M2NSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuYwpAQCAtNDUsOCArNDUsOCBAQAogbmd4X21zZWNfdAogbmd4X2V2ZW50X2ZpbmRfdGltZXIodm9pZCkKIHsKLSAgICBuZ3hfcmJ0cmVlX2tleV9pbnRfdCAgIHRpbWVyOwotICAgIG5neF9yYnRyZWVfbm9kZV90ICAgICAqbm9kZSwgKnJvb3QsICpzZW50aW5lbDsKKyAgICBuZ3hfbXNlY19pbnRfdCAgICAgIHRpbWVyOworICAgIG5neF9yYnRyZWVfbm9kZV90ICAqbm9kZSwgKnJvb3QsICpzZW50aW5lbDsKIAogICAgIGlmIChuZ3hfZXZlbnRfdGltZXJfcmJ0cmVlLnJvb3QgPT0gJm5neF9ldmVudF90aW1lcl9zZW50aW5lbCkgewogICAgICAgICByZXR1cm4gTkdYX1RJTUVSX0lORklOSVRFOwpAQCAtNjMsOCArNjMsNyBAQAogCiAgICAgbmd4X211dGV4X3VubG9jayhuZ3hfZXZlbnRfdGltZXJfbXV0ZXgpOwogCi0gICAgdGltZXIgPSAobmd4X3JidHJlZV9rZXlfaW50X3QpIG5vZGUtPmtleQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKG5neF9yYnRyZWVfa2V5X2ludF90KSBuZ3hfY3VycmVudF90aW1lOworICAgIHRpbWVyID0gKG5neF9tc2VjX2ludF90KSBub2RlLT5rZXkgLSAobmd4X21zZWNfaW50X3QpIG5neF9jdXJyZW50X3RpbWU7CiAKICAgICByZXR1cm4gKG5neF9tc2VjX3QpICh0aW1lciA+IDAgPyB0aW1lciA6IDApOwogfQpAQCAtOTQsOSArOTMsNyBAQAogCiAgICAgICAgIC8qIG5vZGUtPmtleSA8PSBuZ3hfY3VycmVudF90aW1lICovCiAKLSAgICAgICAgaWYgKChuZ3hfcmJ0cmVlX2tleV9pbnRfdCkgbm9kZS0+a2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKG5neF9yYnRyZWVfa2V5X2ludF90KSBuZ3hfY3VycmVudF90aW1lCi0gICAgICAgICAgICA8PSAwKQorICAgICAgICBpZiAoKG5neF9tc2VjX2ludF90KSBub2RlLT5rZXkgLSAobmd4X21zZWNfaW50X3QpIG5neF9jdXJyZW50X3RpbWUgPD0gMCkKICAgICAgICAgewogICAgICAgICAgICAgZXYgPSAobmd4X2V2ZW50X3QgKikgKChjaGFyICopIG5vZGUgLSBvZmZzZXRvZihuZ3hfZXZlbnRfdCwgdGltZXIpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5oIGIvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5oCmluZGV4IDEzYjVjMGEuLmY5ODAyMzQgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuaAorKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmgKQEAgLTYwLDggKzYwLDggQEAKIHN0YXRpYyBuZ3hfaW5saW5lIHZvaWQKIG5neF9ldmVudF9hZGRfdGltZXIobmd4X2V2ZW50X3QgKmV2LCBuZ3hfbXNlY190IHRpbWVyKQogewotICAgIG5neF9yYnRyZWVfa2V5X3QgICAgICBrZXk7Ci0gICAgbmd4X3JidHJlZV9rZXlfaW50X3QgIGRpZmY7CisgICAgbmd4X21zZWNfdCAgICAgIGtleTsKKyAgICBuZ3hfbXNlY19pbnRfdCAgZGlmZjsKIAogICAgIGtleSA9IG5neF9jdXJyZW50X3RpbWUgKyB0aW1lcjsKIApAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgKiB0aGUgcmJ0cmVlIG9wZXJhdGlvbnMgZm9yIHRoZSBmYXN0IGNvbm5lY3Rpb25zLgogICAgICAgICAgKi8KIAotICAgICAgICBkaWZmID0gKG5neF9yYnRyZWVfa2V5X2ludF90KSAoa2V5IC0gZXYtPnRpbWVyLmtleSk7CisgICAgICAgIGRpZmYgPSAobmd4X21zZWNfaW50X3QpIChrZXkgLSBldi0+dGltZXIua2V5KTsKIAogICAgICAgICBpZiAobmd4X2FicyhkaWZmKSA8IE5HWF9USU1FUl9MQVpZX0RFTEFZKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBldi0+bG9nLCAwLApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCmluZGV4IGM1NDE4MDcuLmQ1OGM3YzYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKQEAgLTE1MSwxMCArMTUxLDYgQEAKIHN0YXRpYyBuZ3hfY29uZl9wb3N0X3QgIG5neF9odHRwX2Zhc3RjZ2lfbG93YXRfcG9zdCA9CiAgICAgeyBuZ3hfaHR0cF9mYXN0Y2dpX2xvd2F0X2NoZWNrIH07CiAKLXN0YXRpYyBuZ3hfY29uZl9lbnVtX3QgIG5neF9odHRwX2Zhc3RjZ2lfc2V0X21ldGhvZHNbXSA9IHsKLSAgICB7IG5neF9zdHJpbmcoImdldCIpLCBOR1hfSFRUUF9HRVQgfSwKLSAgICB7IG5neF9udWxsX3N0cmluZywgMCB9Ci19OwogCiBzdGF0aWMgbmd4X2NvbmZfYml0bWFza190ICBuZ3hfaHR0cF9mYXN0Y2dpX25leHRfdXBzdHJlYW1fbWFza3NbXSA9IHsKICAgICB7IG5neF9zdHJpbmcoImVycm9yIiksIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0VSUk9SIH0sCkBAIC0yMTAsMTMgKzIwNiw2IEBACiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9mYXN0Y2dpX2xvY19jb25mX3QsIHVwc3RyZWFtLmhlYWRlcl9idWZmZXJfc2l6ZSksCiAgICAgICBOVUxMIH0sCiAKLSAgICB7IG5neF9zdHJpbmcoImZhc3RjZ2lfbWV0aG9kIiksCi0gICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCi0gICAgICBuZ3hfY29uZl9zZXRfZW51bV9zbG90LAotICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAotICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfZmFzdGNnaV9sb2NfY29uZl90LCB1cHN0cmVhbS5tZXRob2QpLAotICAgICAgbmd4X2h0dHBfZmFzdGNnaV9zZXRfbWV0aG9kcyB9LAotCiAgICAgeyBuZ3hfc3RyaW5nKCJmYXN0Y2dpX3Bhc3NfcmVxdWVzdF9oZWFkZXJzIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKICAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCkBAIC0yOTQsNiArMjgzLDIwIEBACiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9mYXN0Y2dpX2xvY19jb25mX3QsIHVwc3RyZWFtLm5leHRfdXBzdHJlYW0pLAogICAgICAgJm5neF9odHRwX2Zhc3RjZ2lfbmV4dF91cHN0cmVhbV9tYXNrcyB9LAogCisgICAgeyBuZ3hfc3RyaW5nKCJmYXN0Y2dpX3Vwc3RyZWFtX21heF9mYWlscyIpLAorICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2NvbmZfc2V0X251bV9zbG90LAorICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfZmFzdGNnaV9sb2NfY29uZl90LCB1cHN0cmVhbS5tYXhfZmFpbHMpLAorICAgICAgTlVMTCB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJmYXN0Y2dpX3Vwc3RyZWFtX2ZhaWxfdGltZW91dCIpLAorICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2NvbmZfc2V0X3NlY19zbG90LAorICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfZmFzdGNnaV9sb2NfY29uZl90LCB1cHN0cmVhbS5mYWlsX3RpbWVvdXQpLAorICAgICAgTlVMTCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJmYXN0Y2dpX3BhcmFtIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTIsCiAgICAgICBuZ3hfY29uZl9zZXRfdGFibGVfZWx0X3Nsb3QsCkBAIC0xNDQzLDcgKzE0NDYsOSBAQAogICAgIGNvbmYtPnVwc3RyZWFtLm1heF90ZW1wX2ZpbGVfc2l6ZV9jb25mID0gTkdYX0NPTkZfVU5TRVRfU0laRTsgCiAgICAgY29uZi0+dXBzdHJlYW0udGVtcF9maWxlX3dyaXRlX3NpemVfY29uZiA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CiAKLSAgICBjb25mLT51cHN0cmVhbS5tZXRob2QgPSBOR1hfQ09ORl9VTlNFVF9VSU5UOworICAgIGNvbmYtPnVwc3RyZWFtLm1heF9mYWlscyA9IE5HWF9DT05GX1VOU0VUX1VJTlQ7CisgICAgY29uZi0+dXBzdHJlYW0uZmFpbF90aW1lb3V0ID0gTkdYX0NPTkZfVU5TRVQ7CisKICAgICBjb25mLT51cHN0cmVhbS5wYXNzX3JlcXVlc3RfaGVhZGVycyA9IE5HWF9DT05GX1VOU0VUOwogICAgIGNvbmYtPnVwc3RyZWFtLnBhc3NfcmVxdWVzdF9ib2R5ID0gTkdYX0NPTkZfVU5TRVQ7CiAKQEAgLTE1OTEsMTUgKzE1OTYsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8TkdYX0hUVFBfVVBTVFJFQU1fRlRfRVJST1IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8TkdYX0hUVFBfVVBTVFJFQU1fRlRfVElNRU9VVCkpOwogCisgICAgbmd4X2NvbmZfbWVyZ2VfdW5zaWduZWRfdmFsdWUoY29uZi0+dXBzdHJlYW0ubWF4X2ZhaWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0ubWF4X2ZhaWxzLCAxKTsKKworICAgIG5neF9jb25mX21lcmdlX3NlY192YWx1ZShjb25mLT51cHN0cmVhbS5mYWlsX3RpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5mYWlsX3RpbWVvdXQsIDEwKTsKKworICAgIGlmIChjb25mLT5wZWVycyAmJiBjb25mLT5wZWVycy0+bnVtYmVyID4gMSkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZi0+cGVlcnMtPm51bWJlcjsgaSsrKSB7CisgICAgICAgICAgICBjb25mLT5wZWVycy0+cGVlcltpXS53ZWlnaHQgPSAxOworICAgICAgICAgICAgY29uZi0+cGVlcnMtPnBlZXJbaV0ubWF4X2ZhaWxzID0gY29uZi0+dXBzdHJlYW0ubWF4X2ZhaWxzOworICAgICAgICAgICAgY29uZi0+cGVlcnMtPnBlZXJbaV0uZmFpbF90aW1lb3V0ID0gY29uZi0+dXBzdHJlYW0uZmFpbF90aW1lb3V0OworICAgICAgICB9CisgICAgfQorCiAgICAgbmd4X2NvbmZfbWVyZ2VfcGF0aF92YWx1ZShjb25mLT51cHN0cmVhbS50ZW1wX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS50ZW1wX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfSFRUUF9GQVNUQ0dJX1RFTVBfUEFUSCwgMSwgMiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9nYXJiYWdlX2NvbGxlY3Rvcl90ZW1wX2hhbmRsZXIsIGNmKTsKIAotICAgIGlmIChjb25mLT51cHN0cmVhbS5tZXRob2QgPT0gTkdYX0NPTkZfVU5TRVRfVUlOVCkgewotICAgICAgICBjb25mLT51cHN0cmVhbS5tZXRob2QgPSBwcmV2LT51cHN0cmVhbS5tZXRob2Q7IAotICAgIH0KLQogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLnBhc3NfcmVxdWVzdF9oZWFkZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0ucGFzc19yZXF1ZXN0X2hlYWRlcnMsIDEpOwogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLnBhc3NfcmVxdWVzdF9ib2R5LApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKaW5kZXggZTFlZTdiNC4uOGM0MjMxYSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCkBAIC00Niw2ICs0Niw3IEBACiAKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgKnJlZGlyZWN0czsKIAorICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgbWV0aG9kOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgaG9zdF9oZWFkZXI7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICBwb3J0X3RleHQ7CiAKQEAgLTEwMCwxMCArMTAxLDYgQEAKIHN0YXRpYyBuZ3hfY29uZl9wb3N0X3QgIG5neF9odHRwX3Byb3h5X2xvd2F0X3Bvc3QgPQogICAgIHsgbmd4X2h0dHBfcHJveHlfbG93YXRfY2hlY2sgfTsKIAotc3RhdGljIG5neF9jb25mX2VudW1fdCAgbmd4X2h0dHBfcHJveHlfc2V0X21ldGhvZHNbXSA9IHsKLSAgICB7IG5neF9zdHJpbmcoImdldCIpLCBOR1hfSFRUUF9HRVQgfSwKLSAgICB7IG5neF9udWxsX3N0cmluZywgMCB9Ci19OwogCiBzdGF0aWMgbmd4X2NvbmZfYml0bWFza190ICBuZ3hfaHR0cF9wcm94eV9uZXh0X3Vwc3RyZWFtX21hc2tzW10gPSB7CiAgICAgeyBuZ3hfc3RyaW5nKCJlcnJvciIpLCBOR1hfSFRUUF9VUFNUUkVBTV9GVF9FUlJPUiB9LApAQCAtMTY4LDEwICsxNjUsMTAgQEAKIAogICAgIHsgbmd4X3N0cmluZygicHJveHlfbWV0aG9kIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCi0gICAgICBuZ3hfY29uZl9zZXRfZW51bV9zbG90LAorICAgICAgbmd4X2NvbmZfc2V0X3N0cl9zbG90LAogICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAotICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcHJveHlfbG9jX2NvbmZfdCwgdXBzdHJlYW0ubWV0aG9kKSwKLSAgICAgIG5neF9odHRwX3Byb3h5X3NldF9tZXRob2RzIH0sCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCBtZXRob2QpLAorICAgICAgTlVMTCB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9wYXNzX3JlcXVlc3RfaGVhZGVycyIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX0ZMQUcsCkBAIC0yNDMsNiArMjQwLDIwIEBACiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCB1cHN0cmVhbS5uZXh0X3Vwc3RyZWFtKSwKICAgICAgICZuZ3hfaHR0cF9wcm94eV9uZXh0X3Vwc3RyZWFtX21hc2tzIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoInByb3h5X3Vwc3RyZWFtX21heF9mYWlscyIpLAorICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2NvbmZfc2V0X251bV9zbG90LAorICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcHJveHlfbG9jX2NvbmZfdCwgdXBzdHJlYW0ubWF4X2ZhaWxzKSwKKyAgICAgIE5VTEwgfSwKKworICAgIHsgbmd4X3N0cmluZygicHJveHlfdXBzdHJlYW1fZmFpbF90aW1lb3V0IiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfc2VjX3Nsb3QsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCB1cHN0cmVhbS5mYWlsX3RpbWVvdXQpLAorICAgICAgTlVMTCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9wYXNzX3hfcG93ZXJlZF9ieSIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX0ZMQUcsCiAgICAgICBuZ3hfY29uZl9zZXRfZmxhZ19zbG90LApAQCAtMjk5LDEzICszMTAsNiBAQAogfTsKIAogCi1zdGF0aWMgbmd4X3N0cl90IG5neF9odHRwX3Byb3h5X21ldGhvZHNbXSA9IHsKLSAgICBuZ3hfc3RyaW5nKCJHRVQgIiksCi0gICAgbmd4X3N0cmluZygiSEVBRCAiKSwKLSAgICBuZ3hfc3RyaW5nKCJQT1NUICIpCi19OwotCi0KIHN0YXRpYyBjaGFyICBuZ3hfaHR0cF9wcm94eV92ZXJzaW9uW10gPSAiIEhUVFAvMS4wIiBDUkxGOwogCiAKQEAgLTM5NCw3ICszOTgsNyBAQAogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgIGksIGtleTsKICAgICB1aW50cHRyX3QgICAgICAgICAgICAgICAgICAgICBlc2NhcGU7CiAgICAgbmd4X2J1Zl90ICAgICAgICAgICAgICAgICAgICAqYjsKLSAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICpoaDsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICpoaCwgbWV0aG9kOwogICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgICAgKmNsLCAqYm9keTsKICAgICBuZ3hfbGlzdF9wYXJ0X3QgICAgICAgICAgICAgICpwYXJ0OwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgKmhlYWRlcjsKQEAgLTQxMCwxMiArNDE0LDIxIEBACiAKICAgICBsZW4gPSBzaXplb2Yobmd4X2h0dHBfcHJveHlfdmVyc2lvbikgLSAxICsgc2l6ZW9mKENSTEYpIC0gMTsKIAotICAgIGlmICh1LT5tZXRob2QpIHsKLSAgICAgICAgbGVuICs9IG5neF9odHRwX3Byb3h5X21ldGhvZHNbdS0+bWV0aG9kIC0gMV0ubGVuICsgdS0+Y29uZi0+dXJpLmxlbjsKKyAgICBpZiAodS0+bWV0aG9kLmxlbikgeworICAgICAgICAvKiBIRUFEIHdhcyBjaGFuZ2VkIHRvIEdFVCB0byBjYWNoZSByZXNwb25zZSAqLworICAgICAgICBtZXRob2QgPSB1LT5tZXRob2Q7CisgICAgICAgIG1ldGhvZC5sZW4rKzsKKworICAgIH0gZWxzZSBpZiAocGxjZi0+bWV0aG9kLmxlbikgeworICAgICAgICBtZXRob2QgPSBwbGNmLT5tZXRob2Q7CisKICAgICB9IGVsc2UgewotICAgICAgICBsZW4gKz0gci0+bWV0aG9kX25hbWUubGVuICsgMSArIHUtPmNvbmYtPnVyaS5sZW47CisgICAgICAgIG1ldGhvZCA9IHItPm1ldGhvZF9uYW1lOworICAgICAgICBtZXRob2QubGVuKys7CiAgICAgfQogCisgICAgbGVuICs9IG1ldGhvZC5sZW4gKyB1LT5jb25mLT51cmkubGVuOworCiAgICAgZXNjYXBlID0gMDsKIAogICAgIGxvY19sZW4gPSByLT52YWxpZF9sb2NhdGlvbiA/IHUtPmNvbmYtPmxvY2F0aW9uLT5sZW4gOiAwOwpAQCAtNDkzLDE0ICs1MDYsNyBAQAogCiAgICAgLyogdGhlIHJlcXVlc3QgbGluZSAqLwogCi0gICAgaWYgKHUtPm1ldGhvZCkgewotICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9wcm94eV9tZXRob2RzW3UtPm1ldGhvZCAtIDFdLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Byb3h5X21ldGhvZHNbdS0+bWV0aG9kIC0gMV0ubGVuKTsKLSAgICB9IGVsc2UgewotICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCByLT5tZXRob2RfbmFtZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5tZXRob2RfbmFtZS5sZW4gKyAxKTsKLSAgICB9CisgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgbWV0aG9kLmRhdGEsIG1ldGhvZC5sZW4pOwogCiAgICAgdS0+dXJpLmRhdGEgPSBiLT5sYXN0OwogCkBAIC0xMjg4LDYgKzEyOTQsNyBAQAogICAgICAqICAgICBjb25mLT51cHN0cmVhbS51cmkgPSB7IDAsIE5VTEwgfTsKICAgICAgKiAgICAgY29uZi0+dXBzdHJlYW0ubG9jYXRpb24gPSBOVUxMOwogICAgICAqCisgICAgICogICAgIGNvbmYtPm1ldGhvZCA9IE5VTEw7CiAgICAgICogICAgIGNvbmYtPmhlYWRlcnNfc291cmNlID0gTlVMTDsKICAgICAgKiAgICAgY29uZi0+aGVhZGVyc19zZXRfbGVuID0gTlVMTDsKICAgICAgKiAgICAgY29uZi0+aGVhZGVyc19zZXQgPSBOVUxMOwpAQCAtMTMwNiwxMCArMTMxMywxMiBAQAogICAgIGNvbmYtPnVwc3RyZWFtLm1heF90ZW1wX2ZpbGVfc2l6ZV9jb25mID0gTkdYX0NPTkZfVU5TRVRfU0laRTsgIAogICAgIGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplX2NvbmYgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwogCi0gICAgY29uZi0+dXBzdHJlYW0ubWV0aG9kID0gTkdYX0NPTkZfVU5TRVRfVUlOVDsKKyAgICBjb25mLT51cHN0cmVhbS5tYXhfZmFpbHMgPSBOR1hfQ09ORl9VTlNFVF9VSU5UOworICAgIGNvbmYtPnVwc3RyZWFtLmZhaWxfdGltZW91dCA9IE5HWF9DT05GX1VOU0VUOworCiAgICAgY29uZi0+dXBzdHJlYW0ucGFzc19yZXF1ZXN0X2hlYWRlcnMgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBjb25mLT51cHN0cmVhbS5wYXNzX3JlcXVlc3RfYm9keSA9IE5HWF9DT05GX1VOU0VUOwotICAgIAorCiAgICAgY29uZi0+dXBzdHJlYW0ucmVkaXJlY3RfZXJyb3JzID0gTkdYX0NPTkZfVU5TRVQ7CiAKICAgICAvKiAicHJveHlfY3ljbGljX3RlbXBfZmlsZSIgaXMgZGlzYWJsZWQgKi8KQEAgLTE0NDAsMTAgKzE0NDksMTAgQEAKICAgICAgICAgJiYgY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplIDwgc2l6ZSkKICAgICB7CiAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKLSAgICAgICAgICAgICAiXCJmYXN0Y2dpX21heF90ZW1wX2ZpbGVfc2l6ZVwiIG11c3QgYmUgZXF1YWwgdG8gemVybyB0byBkaXNhYmxlICIKKyAgICAgICAgICAgICAiXCJwcm94eV9tYXhfdGVtcF9maWxlX3NpemVcIiBtdXN0IGJlIGVxdWFsIHRvIHplcm8gdG8gZGlzYWJsZSAiCiAgICAgICAgICAgICAgInRoZSB0ZW1wb3JhcnkgZmlsZXMgdXNhZ2Ugb3IgbXVzdCBiZSBlcXVhbCBvciBiaWdnZXIgdGhhbiAiCi0gICAgICAgICAgICAgIm1heGltdW0gb2YgdGhlIHZhbHVlIG9mIFwiZmFzdGNnaV9oZWFkZXJfYnVmZmVyX3NpemVcIiBhbmQgIgotICAgICAgICAgICAgICJvbmUgb2YgdGhlIFwiZmFzdGNnaV9idWZmZXJzXCIiKTsKKyAgICAgICAgICAgICAibWF4aW11bSBvZiB0aGUgdmFsdWUgb2YgXCJwcm94eV9oZWFkZXJfYnVmZmVyX3NpemVcIiBhbmQgIgorICAgICAgICAgICAgICJvbmUgb2YgdGhlIFwicHJveHlfYnVmZmVyc1wiIik7CiAKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KQEAgLTE0NTUsMTMgKzE0NjQsMzEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8TkdYX0hUVFBfVVBTVFJFQU1fRlRfRVJST1IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8TkdYX0hUVFBfVVBTVFJFQU1fRlRfVElNRU9VVCkpOwogCisgICAgbmd4X2NvbmZfbWVyZ2VfdW5zaWduZWRfdmFsdWUoY29uZi0+dXBzdHJlYW0ubWF4X2ZhaWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0ubWF4X2ZhaWxzLCAxKTsKKworICAgIG5neF9jb25mX21lcmdlX3NlY192YWx1ZShjb25mLT51cHN0cmVhbS5mYWlsX3RpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5mYWlsX3RpbWVvdXQsIDEwKTsKKworICAgIGlmIChjb25mLT5wZWVycyAmJiBjb25mLT5wZWVycy0+bnVtYmVyID4gMSkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZi0+cGVlcnMtPm51bWJlcjsgaSsrKSB7CisgICAgICAgICAgICBjb25mLT5wZWVycy0+cGVlcltpXS53ZWlnaHQgPSAxOworICAgICAgICAgICAgY29uZi0+cGVlcnMtPnBlZXJbaV0ubWF4X2ZhaWxzID0gY29uZi0+dXBzdHJlYW0ubWF4X2ZhaWxzOworICAgICAgICAgICAgY29uZi0+cGVlcnMtPnBlZXJbaV0uZmFpbF90aW1lb3V0ID0gY29uZi0+dXBzdHJlYW0uZmFpbF90aW1lb3V0OworICAgICAgICB9CisgICAgfQorCiAgICAgbmd4X2NvbmZfbWVyZ2VfcGF0aF92YWx1ZShjb25mLT51cHN0cmVhbS50ZW1wX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS50ZW1wX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfSFRUUF9QUk9YWV9URU1QX1BBVEgsIDEsIDIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZ2FyYmFnZV9jb2xsZWN0b3JfdGVtcF9oYW5kbGVyLCBjZik7CiAKLSAgICBpZiAoY29uZi0+dXBzdHJlYW0ubWV0aG9kID09IE5HWF9DT05GX1VOU0VUX1VJTlQpIHsKLSAgICAgICAgY29uZi0+dXBzdHJlYW0ubWV0aG9kID0gcHJldi0+dXBzdHJlYW0ubWV0aG9kOworICAgIGlmIChjb25mLT5tZXRob2QubGVuID09IDApIHsKKyAgICAgICAgY29uZi0+bWV0aG9kID0gcHJldi0+bWV0aG9kOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uZi0+bWV0aG9kLmRhdGFbY29uZi0+bWV0aG9kLmxlbl0gPSAnICc7CisgICAgICAgIGNvbmYtPm1ldGhvZC5sZW4rKzsKICAgICB9CiAKICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT51cHN0cmVhbS5wYXNzX3JlcXVlc3RfaGVhZGVycywKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cC5jCmluZGV4IDU0NzAyY2MuLmRjYjM5NTYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHAuYwpAQCAtNzIxLDEwICs3MjEsMTAgQEAKICAgICAgICAgfQogICAgIH0KIAotI2lmIChOR1hfREVCVUcpCisjaWYgKE5HWF9ERUJVRzApCiAgICAgewogICAgIHVfY2hhciAgICAgIGFkZHJlc3NbMjBdOwotICAgIG5neF91aW50X3QgIHAsIGEsIG47CisgICAgbmd4X3VpbnRfdCAgcCwgYSwgbm47CiAKICAgICBpbl9wb3J0ID0gaW5fcG9ydHMuZWx0czsKICAgICBmb3IgKHAgPSAwOyBwIDwgaW5fcG9ydHMubmVsdHM7IHArKykgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCmluZGV4IDE5YmMyMzkuLjJmYjE3NjQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKQEAgLTE3NCwxMyArMTc0LDEzIEBACiAgICAgICAgICAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKIAogI2lmIChOR1hfU1RBVF9TVFVCKQotICAgICAgICAgICAgbmd4X2F0b21pY19pbmMobmd4X3N0YXRfcmVhZGluZyk7CisgICAgICAgICAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF9yZWFkaW5nLCAxKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICNpZiAoTkdYX1NUQVRfU1RVQikKLSAgICAgICAgbmd4X2F0b21pY19pbmMobmd4X3N0YXRfcmVhZGluZyk7CisgICAgICAgIG5neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9zdGF0X3JlYWRpbmcsIDEpOwogI2VuZGlmCiAKICAgICAgICAgbmd4X2h0dHBfaW5pdF9yZXF1ZXN0KHJldik7CkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICB9CiAKICNpZiAoTkdYX1NUQVRfU1RVQikKLSAgICBuZ3hfYXRvbWljX2luYyhuZ3hfc3RhdF9yZWFkaW5nKTsKKyAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF9yZWFkaW5nLCAxKTsKICNlbmRpZgogCiB9CkBAIC0yMjYsNyArMjI2LDcgQEAKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgTkdYX0VUSU1FRE9VVCwgImNsaWVudCB0aW1lZCBvdXQiKTsKIAogI2lmIChOR1hfU1RBVF9TVFVCKQotICAgICAgICBuZ3hfYXRvbWljX2RlYyhuZ3hfc3RhdF9yZWFkaW5nKTsKKyAgICAgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfcmVhZGluZywgLTEpOwogI2VuZGlmCiAKICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKQEAgLTIzOCw3ICsyMzgsNyBAQAogICAgIGlmIChoYykgewogCiAjaWYgKE5HWF9TVEFUX1NUVUIpCi0gICAgICAgIG5neF9hdG9taWNfaW5jKG5neF9zdGF0X3JlYWRpbmcpOworICAgICAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF9yZWFkaW5nLCAxKTsKICNlbmRpZgogCiAgICAgfSBlbHNlIHsKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgICAgICBpZiAoaGMgPT0gTlVMTCkgewogCiAjaWYgKE5HWF9TVEFUX1NUVUIpCi0gICAgICAgICAgICBuZ3hfYXRvbWljX2RlYyhuZ3hfc3RhdF9yZWFkaW5nKTsKKyAgICAgICAgICAgIG5neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9zdGF0X3JlYWRpbmcsIC0xKTsKICNlbmRpZgogCiAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOwpAQCAtMjcwLDcgKzI3MCw3IEBACiAgICAgICAgIGlmIChyID09IE5VTEwpIHsKIAogI2lmIChOR1hfU1RBVF9TVFVCKQotICAgICAgICAgICAgbmd4X2F0b21pY19kZWMobmd4X3N0YXRfcmVhZGluZyk7CisgICAgICAgICAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF9yZWFkaW5nLCAtMSk7CiAjZW5kaWYKIAogICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKQEAgLTI4MSw3ICsyODEsNyBAQAogICAgIH0KIAogI2lmIChOR1hfU1RBVF9TVFVCKQotICAgIG5neF9hdG9taWNfZGVjKG5neF9zdGF0X3JlYWRpbmcpOworICAgIG5neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9zdGF0X3JlYWRpbmcsIC0xKTsKICNlbmRpZgogCiAgICAgYy0+ZGF0YSA9IHI7CkBAIC00MzksOSArNDM5LDkgQEAKICAgICByLT5sb2dfaGFuZGxlciA9IG5neF9odHRwX2xvZ19lcnJvcl9oYW5kbGVyOwogCiAjaWYgKE5HWF9TVEFUX1NUVUIpCi0gICAgbmd4X2F0b21pY19pbmMobmd4X3N0YXRfcmVhZGluZyk7CisgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfcmVhZGluZywgMSk7CiAgICAgci0+c3RhdF9yZWFkaW5nID0gMTsKLSAgICBuZ3hfYXRvbWljX2luYyhuZ3hfc3RhdF9yZXF1ZXN0cyk7CisgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfcmVxdWVzdHMsIDEpOwogI2VuZGlmCiAKICAgICByZXYtPmhhbmRsZXIocmV2KTsKQEAgLTY2OSw5ICs2NjksOSBAQAogICAgICAgICAgICAgICAgIH0KIAogI2lmIChOR1hfU1RBVF9TVFVCKQotICAgICAgICAgICAgICAgIG5neF9hdG9taWNfZGVjKG5neF9zdGF0X3JlYWRpbmcpOworICAgICAgICAgICAgICAgIG5neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9zdGF0X3JlYWRpbmcsIC0xKTsKICAgICAgICAgICAgICAgICByLT5zdGF0X3JlYWRpbmcgPSAwOwotICAgICAgICAgICAgICAgIG5neF9hdG9taWNfaW5jKG5neF9zdGF0X3dyaXRpbmcpOworICAgICAgICAgICAgICAgIG5neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9zdGF0X3dyaXRpbmcsIDEpOwogICAgICAgICAgICAgICAgIHItPnN0YXRfd3JpdGluZyA9IDE7CiAjZW5kaWYKIApAQCAtODk5LDkgKzg5OSw5IEBACiAgICAgICAgICAgICB9CiAKICNpZiAoTkdYX1NUQVRfU1RVQikKLSAgICAgICAgICAgIG5neF9hdG9taWNfZGVjKG5neF9zdGF0X3JlYWRpbmcpOworICAgICAgICAgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfcmVhZGluZywgLTEpOwogICAgICAgICAgICAgci0+c3RhdF9yZWFkaW5nID0gMDsKLSAgICAgICAgICAgIG5neF9hdG9taWNfaW5jKG5neF9zdGF0X3dyaXRpbmcpOworICAgICAgICAgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfd3JpdGluZywgMSk7CiAgICAgICAgICAgICByLT5zdGF0X3dyaXRpbmcgPSAxOwogI2VuZGlmCiAKQEAgLTIzOTYsMTEgKzIzOTYsMTEgQEAKIAogI2lmIChOR1hfU1RBVF9TVFVCKQogICAgIGlmIChyLT5zdGF0X3JlYWRpbmcpIHsKLSAgICAgICAgbmd4X2F0b21pY19kZWMobmd4X3N0YXRfcmVhZGluZyk7CisgICAgICAgIG5neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9zdGF0X3JlYWRpbmcsIC0xKTsKICAgICB9CiAKICAgICBpZiAoci0+c3RhdF93cml0aW5nKSB7Ci0gICAgICAgIG5neF9hdG9taWNfZGVjKG5neF9zdGF0X3dyaXRpbmcpOworICAgICAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF93cml0aW5nLCAtMSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTI0NTcsNyArMjQ1Nyw3IEBACiAjZW5kaWYKIAogI2lmIChOR1hfU1RBVF9TVFVCKQotICAgIG5neF9hdG9taWNfZGVjKG5neF9zdGF0X2FjdGl2ZSk7CisgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfYWN0aXZlLCAtMSk7CiAjZW5kaWYKIAogICAgIHBvb2wgPSBjLT5wb29sOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKaW5kZXggZGQzMmY2My4uYTFjNmEyZSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCkBAIC0yNTEsMTMgKzI1MSw2IEBACiAgICAgICAgIHUtPnJlcXVlc3RfYnVmcyA9IHItPnJlcXVlc3RfYm9keS0+YnVmczsKICAgICB9CiAKLSAgICBpZiAodS0+Y29uZi0+bWV0aG9kID09IE5HWF9DT05GX1VOU0VUX1VJTlQpIHsKLSAgICAgICAgdS0+bWV0aG9kID0gci0+bWV0aG9kOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgdS0+bWV0aG9kID0gdS0+Y29uZi0+bWV0aG9kOwotICAgIH0KLQogICAgIGlmICh1LT5jcmVhdGVfcmVxdWVzdChyKSAhPSBOR1hfT0spIHsKICAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uaAppbmRleCA2ZDk2NzM3Li5kZDdiM2MxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmgKQEAgLTYyLDcgKzYyLDkgQEAKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfZmlsZV93cml0ZV9zaXplX2NvbmY7CiAKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgIG5leHRfdXBzdHJlYW07Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICBtYXhfZmFpbHM7CisKKyAgICB0aW1lX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxfdGltZW91dDsKIAogICAgIG5neF9idWZzX3QgICAgICAgICAgICAgICAgICAgICAgYnVmczsKIApAQCAtMTU2LDcgKzE1OCw3IEBACiAKICAgICBuZ3hfbXNlY190ICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7CiAKLSAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDsKIAogICAgIG5neF9odHRwX2xvZ19oYW5kbGVyX3B0ICAgICAgICAgc2F2ZWRfbG9nX2hhbmRsZXI7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKaW5kZXggN2IwZDIzMS4uN2U0YTc5ZiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKQEAgLTMzLDYgKzMzLDggQEAKIHN0YXRpYyBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICoKICAgICBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0X2ZpbGVuYW1lKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdWludHB0cl90IGRhdGEpOwogc3RhdGljIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKgorICAgIG5neF9odHRwX3ZhcmlhYmxlX3JlcXVlc3RfbWV0aG9kKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdWludHB0cl90IGRhdGEpOworc3RhdGljIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKgogICAgIG5neF9odHRwX3ZhcmlhYmxlX3JlbW90ZV91c2VyKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdWludHB0cl90IGRhdGEpOwogCiAKQEAgLTEwNyw4ICsxMDksNyBAQAogICAgIHsgbmd4X3N0cmluZygic2VydmVyX25hbWUiKSwgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdCwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3JlcXVlc3RfdCwgc2VydmVyX25hbWUpLCAwLCAwIH0sCiAKLSAgICB7IG5neF9zdHJpbmcoInJlcXVlc3RfbWV0aG9kIiksIG5neF9odHRwX3ZhcmlhYmxlX3JlcXVlc3QsCi0gICAgICBvZmZzZXRvZihuZ3hfaHR0cF9yZXF1ZXN0X3QsIG1ldGhvZF9uYW1lKSwgMCwgMCB9LAorICAgIHsgbmd4X3N0cmluZygicmVxdWVzdF9tZXRob2QiKSwgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdF9tZXRob2QsIDAsIDAsIDAgfSwKIAogICAgIHsgbmd4X3N0cmluZygicmVtb3RlX3VzZXIiKSwgbmd4X2h0dHBfdmFyaWFibGVfcmVtb3RlX3VzZXIsIDAsIDAsIDAgfSwKIApAQCAtNjQxLDYgKzY0MiwzMyBAQAogCiAKIHN0YXRpYyBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICoKK25neF9odHRwX3ZhcmlhYmxlX3JlcXVlc3RfbWV0aG9kKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdWludHB0cl90IGRhdGEpCit7CisgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAgKnZ2OworCisgICAgaWYgKHItPm1ldGhvZF9uYW1lLmRhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0hUVFBfVkFSX05PVF9GT1VORDsKKyAgICB9CisKKyAgICB2diA9IG5neF9wYWxsb2Moci0+cG9vbCwgc2l6ZW9mKG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QpKTsKKyAgICBpZiAodnYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB2di0+dmFsdWUgPSAwOworCisgICAgaWYgKHItPnVwc3RyZWFtICYmIHItPnVwc3RyZWFtLT5tZXRob2QubGVuKSB7CisgICAgICAgIHZ2LT50ZXh0ID0gci0+dXBzdHJlYW0tPm1ldGhvZDsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHZ2LT50ZXh0ID0gci0+bWV0aG9kX25hbWU7CisgICAgfQorCisgICAgcmV0dXJuIHZ2OworfQorCisKK3N0YXRpYyBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICoKIG5neF9odHRwX3ZhcmlhYmxlX3JlbW90ZV91c2VyKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdWludHB0cl90IGRhdGEpCiB7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgIHJjOwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2F0b21pYy5oIGIvc3JjL29zL3VuaXgvbmd4X2F0b21pYy5oCmluZGV4IGIzZDMwMDMuLjU4NTYxMDMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9hdG9taWMuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfYXRvbWljLmgKQEAgLTE0LDI3NSArMTQsOTkgQEAKIAogI2lmICggX19pMzg2X18gfHwgX19pMzg2ICkKIAordHlwZWRlZiBpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgbmd4X2F0b21pY19pbnRfdDsKK3R5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIG5neF9hdG9taWNfdWludF90OwordHlwZWRlZiB2b2xhdGlsZSBuZ3hfYXRvbWljX3VpbnRfdCAgbmd4X2F0b21pY190OworI2RlZmluZSBOR1hfQVRPTUlDX1RfTEVOICAgICAgICAgICAgc2l6ZW9mKCItMjE0NzQ4MzY0OCIpIC0gMQorCisKKyNpZiAoIF9fU1VOUFJPX0MgKQorCiAjZGVmaW5lIE5HWF9IQVZFX0FUT01JQ19PUFMgIDEKIAotdHlwZWRlZiBpbnQzMl90ICBuZ3hfYXRvbWljX2ludF90OwotdHlwZWRlZiB1aW50MzJfdCAgbmd4X2F0b21pY191aW50X3Q7Ci10eXBlZGVmIHZvbGF0aWxlIG5neF9hdG9taWNfdWludF90ICBuZ3hfYXRvbWljX3Q7Ci0jZGVmaW5lIE5HWF9BVE9NSUNfVF9MRU4gIHNpemVvZigiLTIxNDc0ODM2NDgiKSAtIDEKLQotCi0jaWYgKE5HWF9TTVApCi0jZGVmaW5lIE5HWF9TTVBfTE9DSyAgImxvY2s7IgotI2Vsc2UKLSNkZWZpbmUgTkdYX1NNUF9MT0NLCi0jZW5kaWYKLQotLyoKLSAqIHRoZSAiPXEiIGlzIGFueSBvZiB0aGUgJWVheCwgJWVieCwgJWVjeCwgb3IgJWVkeCByZWdpc3RlcnMuCi0gKiB0aGUgJyIwIiAoMSknIHBhcmFtZXRlciBwcmVsb2FkcyAxIGludG8gJTAuCi0gKiB0aGUgImNjIiBtZWFucyB0aGF0IGZsYWdzIHdlcmUgY2hhbmdlZC4KLSAqCi0gKiAieGFkZCAgciwgW21dIjoKLSAqCi0gKiAgICAgdGVtcCA9IFttXTsKLSAqICAgICBbbV0gKz0gcjsKLSAqICAgICByID0gdGVtcDsKLSAqLwotCi1zdGF0aWMgbmd4X2lubGluZSBuZ3hfYXRvbWljX3VpbnRfdAotbmd4X2F0b21pY19pbmMobmd4X2F0b21pY190ICp2YWx1ZSkKLXsKLSAgICBuZ3hfYXRvbWljX3VpbnRfdCAgb2xkOwotCi0gICAgX19hc21fXyB2b2xhdGlsZSAoCi0KLSAgICAgICAgIE5HWF9TTVBfTE9DSwotICAgICIgICAgeGFkZGwgICUwLCAlMjsgICAiCi0gICAgIiAgICBpbmNsICAgJTA7ICAgICAgICIKLQotICAgIDogIj1xIiAob2xkKSA6ICIwIiAoMSksICJtIiAoKnZhbHVlKSA6ICJjYyIsICJtZW1vcnkiKTsKLQotICAgIHJldHVybiBvbGQ7Ci19Ci0KLQotc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY191aW50X3QKLW5neF9hdG9taWNfZGVjKG5neF9hdG9taWNfdCAqdmFsdWUpCi17Ci0gICAgbmd4X2F0b21pY191aW50X3QgIG9sZDsKLQotICAgIF9fYXNtX18gdm9sYXRpbGUgKAotCi0gICAgICAgICBOR1hfU01QX0xPQ0sKLSAgICAiICAgIHhhZGRsICAlMCwgJTI7ICAgIgotICAgICIgICAgZGVjbCAgICUwOyAgICAgICAiCi0KLSAgICA6ICI9cSIgKG9sZCkgOiAiMCIgKC0xKSwgIm0iICgqdmFsdWUpIDogImNjIiwgIm1lbW9yeSIpOwotCi0gICAgcmV0dXJuIG9sZDsKLX0KLQotCi0vKgotICogdGhlICJxIiBpcyBhbnkgb2YgdGhlICVlYXgsICVlYngsICVlY3gsIG9yICVlZHggcmVnaXN0ZXJzLgotICogdGhlICI9YSIgYW5kICJhIiBhcmUgdGhlICVlYXggcmVnaXN0ZXIuICBBbHRob3VnaCB3ZSBjYW4gcmV0dXJuIHJlc3VsdAotICogaW4gYW55IHJlZ2lzdGVyLCB3ZSB1c2UgJWVheCBiZWNhdXNlIGl0IGlzIHVzZWQgaW4gY21weGNoZyBhbnl3YXkuCi0gKgotICogImNtcHhjaGcgIHIsIFttXSI6Ci0gKgotICogICAgIGlmIChlYXggPT0gW21dKSB7Ci0gKiAgICAgICAgIHpmID0gMTsKLSAqICAgICAgICAgW21dID0gcjsKLSAqICAgICB9IGVsc2UgewotICogICAgICAgICB6ZiA9IDA7Ci0gKiAgICAgICAgIGVheCA9IFttXTsKLSAqICAgICB9Ci0gKi8KLQotc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY191aW50X3QKK25neF9hdG9taWNfdWludF90CiBuZ3hfYXRvbWljX2NtcF9zZXQobmd4X2F0b21pY190ICpsb2NrLCBuZ3hfYXRvbWljX3VpbnRfdCBvbGQsCi0gICAgbmd4X2F0b21pY191aW50X3Qgc2V0KQotewotICAgIG5neF9hdG9taWNfdWludF90ICByZXM7CisgICAgbmd4X2F0b21pY191aW50X3Qgc2V0KTsKIAotICAgIF9fYXNtX18gdm9sYXRpbGUgKAorbmd4X2F0b21pY19pbnRfdAorbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X2F0b21pY190ICp2YWx1ZSwgbmd4X2F0b21pY19pbnRfdCBhZGQpOwogCi0gICAgICAgICBOR1hfU01QX0xPQ0sKLSAgICAiICAgIGNtcHhjaGdsICAlMywgJTE7ICAgIgotICAgICIgICAgc2V0eiAgICAgICViMDsgICAgICAiCi0gICAgIiAgICBtb3Z6YmwgICAgJWIwLCAlMDsgICIKKy8qIHRoZSBjb2RlIGluIHNyYy9vcy91bml4L25neF9zdW5wcm9feDg2LmlsICovCiAKLSAgICA6ICI9YSIgKHJlcykgOiAibSIgKCpsb2NrKSwgImEiIChvbGQpLCAicSIgKHNldCkgOiAiY2MiLCAibWVtb3J5Iik7CiAKLSAgICByZXR1cm4gcmVzOwotfQorI2Vsc2UgLyogKCBfX0dOVUNfXyB8fCBfX0lOVEVMX0NPTVBJTEVSICkgKi8KKworI2RlZmluZSBOR1hfSEFWRV9BVE9NSUNfT1BTICAxCisKKyNpbmNsdWRlICJuZ3hfZ2NjX2F0b21pY194ODYuaCIKKworI2VuZGlmCiAKIAogI2VsaWYgKCBfX2FtZDY0X18gfHwgX19hbWQ2NCApCiAKK3R5cGVkZWYgaW50NjRfdCAgICAgICAgICAgICAgICAgICAgIG5neF9hdG9taWNfaW50X3Q7Cit0eXBlZGVmIHVpbnQ2NF90ICAgICAgICAgICAgICAgICAgICBuZ3hfYXRvbWljX3VpbnRfdDsKK3R5cGVkZWYgdm9sYXRpbGUgbmd4X2F0b21pY191aW50X3QgIG5neF9hdG9taWNfdDsKKyNkZWZpbmUgTkdYX0FUT01JQ19UX0xFTiAgICAgICAgICAgIHNpemVvZigiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSAtIDEKKworCisjaWYgKCBfX1NVTlBST19DICkKKwogI2RlZmluZSBOR1hfSEFWRV9BVE9NSUNfT1BTICAxCiAKLXR5cGVkZWYgaW50NjRfdCAgbmd4X2F0b21pY19pbnRfdDsKLXR5cGVkZWYgdWludDY0X3QgIG5neF9hdG9taWNfdWludF90OwotdHlwZWRlZiB2b2xhdGlsZSBuZ3hfYXRvbWljX3VpbnRfdCAgbmd4X2F0b21pY190OwotI2RlZmluZSBOR1hfQVRPTUlDX1RfTEVOICBzaXplb2YoIi05MjIzMzcyMDM2ODU0Nzc1ODA4IikgLSAxCi0KLQotI2lmIChOR1hfU01QKQotI2RlZmluZSBOR1hfU01QX0xPQ0sgICJsb2NrOyIKLSNlbHNlCi0jZGVmaW5lIE5HWF9TTVBfTE9DSwotI2VuZGlmCi0KLQotc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY191aW50X3QKLW5neF9hdG9taWNfaW5jKG5neF9hdG9taWNfdCAqdmFsdWUpCi17Ci0gICAgbmd4X2F0b21pY191aW50X3QgIG9sZDsKLQotICAgIF9fYXNtX18gdm9sYXRpbGUgKAotCi0gICAgICAgICBOR1hfU01QX0xPQ0sKLSAgICAiICAgIHhhZGRxICAlMCwgJTI7ICAgIgotICAgICIgICAgaW5jcSAgICUwOyAgICAgICAiCi0KLSAgICA6ICI9ciIgKG9sZCkgOiAiMCIgKDEpLCAibSIgKCp2YWx1ZSkgOiAiY2MiLCAibWVtb3J5Iik7Ci0KLSAgICByZXR1cm4gb2xkOwotfQotCi0KLS8qIHRoZSAnIjAiICgtMUxMKScgcGFyYW1ldGVyIHByZWxvYWRzIC0xIGludG8gdGhlIDY0LWJpdCAlMCByZWdpc3RlciAqLwotCi1zdGF0aWMgbmd4X2lubGluZSBuZ3hfYXRvbWljX3VpbnRfdAotbmd4X2F0b21pY19kZWMobmd4X2F0b21pY190ICp2YWx1ZSkKLXsKLSAgICBuZ3hfYXRvbWljX3VpbnRfdCAgb2xkOwotCi0gICAgX19hc21fXyB2b2xhdGlsZSAoCi0KLSAgICAgICAgIE5HWF9TTVBfTE9DSwotICAgICIgICAgeGFkZHEgICUwLCAlMjsgICAiCi0gICAgIiAgICBkZWNxICAgJTA7ICAgICAgICIKLQotICAgIDogIj1yIiAob2xkKSA6ICIwIiAoLTFMTCksICJtIiAoKnZhbHVlKSA6ICJjYyIsICJtZW1vcnkiKTsKLQotICAgIHJldHVybiBvbGQ7Ci19Ci0KLQotLyogdGhlICI9YSIgYW5kICJhIiBhcmUgdGhlICVyYXggcmVnaXN0ZXIuICovCi0KLXN0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfdWludF90CituZ3hfYXRvbWljX3VpbnRfdAogbmd4X2F0b21pY19jbXBfc2V0KG5neF9hdG9taWNfdCAqbG9jaywgbmd4X2F0b21pY191aW50X3Qgb2xkLAotICAgIG5neF9hdG9taWNfdWludF90IHNldCkKLXsKLSAgICBuZ3hfYXRvbWljX3VpbnRfdCAgcmVzOworICAgIG5neF9hdG9taWNfdWludF90IHNldCk7CiAKLSAgICBfX2FzbV9fIHZvbGF0aWxlICgKK25neF9hdG9taWNfaW50X3QKK25neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9hdG9taWNfdCAqdmFsdWUsIG5neF9hdG9taWNfaW50X3QgYWRkKTsKIAotICAgICAgICAgTkdYX1NNUF9MT0NLCi0gICAgIiAgICBjbXB4Y2hncSAgJTMsICUxOyAgICIKLSAgICAiICAgIHNldHogICAgICAlYjA7ICAgICAgIgotICAgICIgICAgbW92emJxICAgICViMCwgJTA7ICAiCisvKiB0aGUgY29kZSBpbiBzcmMvb3MvdW5peC9uZ3hfc3VucHJvX2FtZDY0LmlsICovCiAKLSAgICA6ICI9YSIgKHJlcykgOiAibSIgKCpsb2NrKSwgImEiIChvbGQpLCAiciIgKHNldCkgOiAiY2MiLCAibWVtb3J5Iik7CiAKLSAgICByZXR1cm4gcmVzOwotfQorI2Vsc2UgLyogKCBfX0dOVUNfXyB8fCBfX0lOVEVMX0NPTVBJTEVSICkgKi8KKworI2RlZmluZSBOR1hfSEFWRV9BVE9NSUNfT1BTICAxCisKKyNpbmNsdWRlICJuZ3hfZ2NjX2F0b21pY19hbWQ2NC5oIgorCisjZW5kaWYKIAogCiAjZWxpZiAoIF9fc3BhcmNfXyB8fCBfX3NwYXJjdjkgKQogCi0jZGVmaW5lIE5HWF9IQVZFX0FUT01JQ19PUFMgIDEKLQogI2lmIChOR1hfUFRSX1NJWkUgPT0gOCkKLXR5cGVkZWYgaW50NjRfdCAgbmd4X2F0b21pY19pbnRfdDsKLXR5cGVkZWYgdWludDY0X3QgIG5neF9hdG9taWNfdWludF90OwotI2RlZmluZSBOR1hfQVRPTUlDX1RfTEVOICBzaXplb2YoIi05MjIzMzcyMDM2ODU0Nzc1ODA4IikgLSAxCi0jZGVmaW5lIE5HWF9DQVNYQSAgICAgICAgICJjYXN4YSIKKwordHlwZWRlZiBpbnQ2NF90ICAgICAgICAgICAgICAgICAgICAgbmd4X2F0b21pY19pbnRfdDsKK3R5cGVkZWYgdWludDY0X3QgICAgICAgICAgICAgICAgICAgIG5neF9hdG9taWNfdWludF90OworI2RlZmluZSBOR1hfQVRPTUlDX1RfTEVOICAgICAgICAgICAgc2l6ZW9mKCItOTIyMzM3MjAzNjg1NDc3NTgwOCIpIC0gMQorCiAjZWxzZQotdHlwZWRlZiBpbnQzMl90ICBuZ3hfYXRvbWljX2ludF90OwotdHlwZWRlZiB1aW50MzJfdCAgbmd4X2F0b21pY191aW50X3Q7Ci0jZGVmaW5lIE5HWF9BVE9NSUNfVF9MRU4gIHNpemVvZigiLTIxNDc0ODM2NDgiKSAtIDEKLSNkZWZpbmUgTkdYX0NBU1hBICAgICAgICAgImNhc2EiCisKK3R5cGVkZWYgaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIG5neF9hdG9taWNfaW50X3Q7Cit0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBuZ3hfYXRvbWljX3VpbnRfdDsKKyNkZWZpbmUgTkdYX0FUT01JQ19UX0xFTiAgICAgICAgICAgIHNpemVvZigiLTIxNDc0ODM2NDgiKSAtIDEKKwogI2VuZGlmCiAKIHR5cGVkZWYgdm9sYXRpbGUgbmd4X2F0b21pY191aW50X3QgIG5neF9hdG9taWNfdDsKIAogCi0vKgotICogdGhlICIrciIgbWVhbnMgdGhlIGdlbmVyYWwgcmVnaXN0ZXIgdXNlZCBmb3IgYm90aCBpbnB1dCBhbmQgb3V0cHV0LgotICoKLSAqICJjYXNhICAgW3IxXSAweDgwLCByMiwgcjAiICBhbmQKLSAqICJjYXN4YSAgW3IxXSAweDgwLCByMiwgcjAiICBkbyB0aGUgZm9sbG93aW5nOgotICoKLSAqICAgICBpZiAoW3IxXSA9PSByMikgewotICogICAgICAgICBzd2FwKHIwLCBbcjFdKTsKLSAqICAgICB9IGVsc2UgewotICogICAgICAgICByMCA9IFtyMV07Ci0gKiAgICAgfQotICoKLSAqIHNvICJyMCA9PSByMiIgbWVhbnMgdGhhdCB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsbC4KLSAqLworI2lmICggX19TVU5QUk9fQyApCiAKLXN0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfdWludF90Ci1uZ3hfYXRvbWljX2luYyhuZ3hfYXRvbWljX3QgKnZhbHVlKQotewotICAgIG5neF9hdG9taWNfdWludF90ICBvbGQsIG5ldywgcmVzOworI2RlZmluZSBOR1hfSEFWRV9BVE9NSUNfT1BTICAxCiAKLSAgICBvbGQgPSAqdmFsdWU7Ci0KLSAgICBmb3IgKCA7OyApIHsKLQotICAgICAgICBuZXcgPSBvbGQgKyAxOwotICAgICAgICByZXMgPSBuZXc7Ci0KLSAgICAgICAgX19hc21fXyB2b2xhdGlsZSAoCi0KLSAgICAgICAgTkdYX0NBU1hBICIgWyUxXSAweDgwLCAlMiwgJTAiCi0KLSAgICAgICAgOiAiK3IiIChyZXMpIDogInIiICh2YWx1ZSksICJyIiAob2xkKSA6ICJtZW1vcnkiKTsKLQotICAgICAgICBpZiAocmVzID09IG9sZCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldzsKLSAgICAgICAgfQotCi0gICAgICAgIG9sZCA9IHJlczsKLSAgICB9Ci19CisjaW5jbHVkZSAibmd4X3N1bnByb19hdG9taWNfc3BhcmM2NC5oIgogCiAKLXN0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfdWludF90Ci1uZ3hfYXRvbWljX2RlYyhuZ3hfYXRvbWljX3QgKnZhbHVlKQotewotICAgIG5neF9hdG9taWNfdWludF90ICBvbGQsIG5ldywgcmVzOworI2Vsc2UgLyogKCBfX0dOVUNfXyB8fCBfX0lOVEVMX0NPTVBJTEVSICkgKi8KIAotICAgIG9sZCA9ICp2YWx1ZTsKKyNkZWZpbmUgTkdYX0hBVkVfQVRPTUlDX09QUyAgMQogCi0gICAgZm9yICggOzsgKSB7CisjaW5jbHVkZSAibmd4X2djY19hdG9taWNfc3BhcmM2NC5oIgogCi0gICAgICAgIG5ldyA9IG9sZCAtIDE7Ci0gICAgICAgIHJlcyA9IG5ldzsKLQotICAgICAgICBfX2FzbV9fIHZvbGF0aWxlICgKLQotICAgICAgICBOR1hfQ0FTWEEgIiBbJTFdIDB4ODAsICUyLCAlMCIKLQotICAgICAgICA6ICIrciIgKHJlcykgOiAiciIgKHZhbHVlKSwgInIiIChvbGQpIDogIm1lbW9yeSIpOwotCi0gICAgICAgIGlmIChyZXMgPT0gb2xkKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3OwotICAgICAgICB9Ci0KLSAgICAgICAgb2xkID0gcmVzOwotICAgIH0KLX0KLQotCi1zdGF0aWMgbmd4X2lubGluZSBuZ3hfYXRvbWljX3VpbnRfdAotbmd4X2F0b21pY19jbXBfc2V0KG5neF9hdG9taWNfdCAqbG9jaywgbmd4X2F0b21pY191aW50X3Qgb2xkLAotICAgIG5neF9hdG9taWNfdWludF90IHNldCkKLXsKLSAgICBfX2FzbV9fIHZvbGF0aWxlICgKLQotICAgIE5HWF9DQVNYQSAiIFslMV0gMHg4MCwgJTIsICUwIgotCi0gICAgOiAiK3IiIChzZXQpIDogInIiIChsb2NrKSwgInIiIChvbGQpIDogIm1lbW9yeSIpOwotCi0gICAgcmV0dXJuIChzZXQgPT0gb2xkKTsKLX0KKyNlbmRpZgogCiAKICNlbGlmICggX19wcGNfXyB8fCBfX3Bvd2VycGNfXyApCkBAIC0yOTAsMTE2ICsxMTQsNjAgQEAKICNkZWZpbmUgTkdYX0hBVkVfQVRPTUlDX09QUyAgMQogCiAjaWYgKE5HWF9QVFJfU0laRSA9PSA4KQotdHlwZWRlZiBpbnQ2NF90ICBuZ3hfYXRvbWljX2ludF90OwotdHlwZWRlZiB1aW50NjRfdCAgbmd4X2F0b21pY191aW50X3Q7Ci0jZGVmaW5lIE5HWF9BVE9NSUNfVF9MRU4gIHNpemVvZigiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSAtIDEKKwordHlwZWRlZiBpbnQ2NF90ICAgICAgICAgICAgICAgICAgICAgbmd4X2F0b21pY19pbnRfdDsKK3R5cGVkZWYgdWludDY0X3QgICAgICAgICAgICAgICAgICAgIG5neF9hdG9taWNfdWludF90OworI2RlZmluZSBOR1hfQVRPTUlDX1RfTEVOICAgICAgICAgICAgc2l6ZW9mKCItOTIyMzM3MjAzNjg1NDc3NTgwOCIpIC0gMQorCiAjZWxzZQotdHlwZWRlZiBpbnQzMl90ICBuZ3hfYXRvbWljX2ludF90OwotdHlwZWRlZiB1aW50MzJfdCAgbmd4X2F0b21pY191aW50X3Q7Ci0jZGVmaW5lIE5HWF9BVE9NSUNfVF9MRU4gIHNpemVvZigiLTIxNDc0ODM2NDgiKSAtIDEKKwordHlwZWRlZiBpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgbmd4X2F0b21pY19pbnRfdDsKK3R5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIG5neF9hdG9taWNfdWludF90OworI2RlZmluZSBOR1hfQVRPTUlDX1RfTEVOICAgICAgICAgICAgc2l6ZW9mKCItMjE0NzQ4MzY0OCIpIC0gMQorCiAjZW5kaWYKIAogdHlwZWRlZiB2b2xhdGlsZSBuZ3hfYXRvbWljX3VpbnRfdCAgbmd4X2F0b21pY190OwogCiAKLS8qCi0gKiB0aGUgcHBjIGFzc2VtYmxlciB0cmVhdHMgIjsiIGFzIGNvbW1lbnQsIHNvIHdlIGhhdmUgdG8gdXNlICJcbiIuCi0gKiB0aGUgbWludXMgaW4gImJuZS0iIGlzIGEgaGludCBmb3IgdGhlIGJyYW5jaCBwcmVkaWN0aW9uIHVuaXQgdGhhdAotICogdGhpcyBicmFuY2ggaXMgdW5saWtlbHkgdG8gYmUgdGFrZW4uCi0gKgotICogdGhlICI9JnIiIG1lYW5zIHRoYXQgbm8gaW5wdXQgcmVnaXN0ZXJzIGNhbiBiZSB1c2VkLgotICogdGhlICI9JmIiIG1lYW5zIHRoYXQgdGhlIGJhc2UgcmVnaXN0ZXJzIGNhbiBiZSB1c2VkIG9ubHksIGkuZS4KLSAqIGFueSByZWdpc3RlciBleGNlcHQgcjAuICB0aGUgcjAgcmVnaXN0ZXIgYWx3YXlzIGhhcyBhIHplcm8gdmFsdWUgYW5kCi0gKiBjb3VsZCBub3QgYmUgdXNlZCBpbiAiYWRkaSAgcjAsIHIwLCAxIi4KLSAqIHRoZSAiMWIiIG1lYW5zIHRoZSBuZWFyZXN0IGJhY2t3YXJkIGxhYmVsICIxIiBhbmQgdGhlICIxZiIgbWVhbnMKLSAqIHRoZSBuZWFyZXN0IGZvcndhcmQgbGFiZWwgIjEiLgotICovCi0KLXN0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfdWludF90Ci1uZ3hfYXRvbWljX2luYyhuZ3hfYXRvbWljX3QgKnZhbHVlKQotewotICAgIG5neF9hdG9taWNfdWludF90ICByZXM7Ci0KLSAgICBfX2FzbV9fIHZvbGF0aWxlICgKLQotICAgICIxOiAgbHdhcnggICAlMCwgMCwgJTEgIFxuIiAvKiBsb2FkIGZyb20gW3ZhbHVlXSBpbnRvICJyZXMiICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgYW5kIHN0b3JlIHJlc2VydmF0aW9uICAgICAgICAgICAgICAgICAgKi8KLSAgICAiICAgIGFkZGkgICAgJTAsICUwLCAxICBcbiIgLyogYWRkICIxIiB0byAicmVzIiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICIgICAgc3R3Y3guICAlMCwgMCwgJTEgIFxuIiAvKiBzdG9yZSAicmVzIiBpbnRvIFt2YWx1ZV0gaWYgcmVzZXJ2YXRpb24gICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIGlzIG5vdCBjbGVhcmVkICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAiICAgIGJuZS0gICAgMWIgICAgICAgICBcbiIgLyogdHJ5IGFnYWluIGlmIHJlc2VydmF0aW9uIHdhcyBjbGVhcmVkICAgICAqLwotCi0gICAgOiAiPSZiIiAocmVzKSA6ICJyIiAodmFsdWUpIDogImNjIiwgIm1lbW9yeSIpOwotCi0gICAgcmV0dXJuIHJlczsKLX0KKyNpbmNsdWRlICJuZ3hfZ2NjX2F0b21pY19wcGMuaCIKIAogCi1zdGF0aWMgbmd4X2lubGluZSBuZ3hfYXRvbWljX3VpbnRfdAotbmd4X2F0b21pY19kZWMobmd4X2F0b21pY190ICp2YWx1ZSkKLXsKLSAgICBuZ3hfYXRvbWljX3VpbnRfdCAgcmVzOwotCi0gICAgX19hc21fXyB2b2xhdGlsZSAoCi0KLSAgICAiMTogIGx3YXJ4ICAgJTAsIDAsICUxICBcbiIgLyogbG9hZCBmcm9tIFt2YWx1ZV0gaW50byAicmVzIiAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIGFuZCBzdG9yZSByZXNlcnZhdGlvbiAgICAgICAgICAgICAgICAgICovCi0gICAgIiAgICBhZGRpICAgICUwLCAlMCwgLTEgXG4iIC8qIHN1YiAiMSIgZnJvbSAicmVzIiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAiICAgIHN0d2N4LiAgJTAsIDAsICUxICBcbiIgLyogc3RvcmUgInJlcyIgaW50byBbdmFsdWVdIGlmIHJlc2VydmF0aW9uICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICBpcyBub3QgY2xlYXJlZCAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgIiAgICBibmUtICAgIDFiICAgICAgICAgXG4iIC8qIHRyeSBhZ2FpbiBpZiByZXNlcnZhdGlvbiB3YXMgY2xlYXJlZCAgICAgKi8KLQotICAgIDogIj0mYiIgKHJlcykgOiAiciIgKHZhbHVlKSA6ICJjYyIsICJtZW1vcnkiKTsKLQotICAgIHJldHVybiByZXM7Ci19CisjZW5kaWYKIAogCi1zdGF0aWMgbmd4X2lubGluZSBuZ3hfYXRvbWljX3VpbnRfdAotbmd4X2F0b21pY19jbXBfc2V0KG5neF9hdG9taWNfdCAqbG9jaywgbmd4X2F0b21pY191aW50X3Qgb2xkLAotICAgIG5neF9hdG9taWNfdWludF90IHNldCkKLXsKLSAgICBuZ3hfYXRvbWljX3VpbnRfdCAgcmVzLCB0ZW1wOwotCi0gICAgX19hc21fXyB2b2xhdGlsZSAoCi0KLSAgICAiICAgIGxpICAgICAgJTAsIDAgICAgICBcbiIgLyogcHJlc2V0ICIwIiB0byAicmVzIiAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICIgICAgbHdhcnggICAlMSwgMCwgJTIgIFxuIiAvKiBsb2FkIGZyb20gW2xvY2tdIGludG8gInRlbXAiICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgYW5kIHN0b3JlIHJlc2VydmF0aW9uICAgICAgICAgICAgICAgICAgKi8KLSAgICAiICAgIGNtcHcgICAgJTEsICUzICAgICBcbiIgLyogY29tcGFyZSAidGVtcCIgYW5kICJvbGQiICAgICAgICAgICAgICAgICAqLwotICAgICIgICAgYm5lLSAgICAxZiAgICAgICAgIFxuIiAvKiBub3QgZXF1YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgIiAgICBzdHdjeC4gICU0LCAwLCAlMiAgXG4iIC8qIHN0b3JlICJzZXQiIGludG8gW2xvY2tdIGlmIHJlc2VydmF0aW9uICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgaXMgbm90IGNsZWFyZWQgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICIgICAgYm5lLSAgICAxZiAgICAgICAgIFxuIiAvKiB0aGUgcmVzZXJ2YXRpb24gd2FzIGNsZWFyZWQgICAgICAgICAgICAgICovCi0gICAgIiAgICBsaSAgICAgICUwLCAxICAgICAgXG4iIC8qIHNldCAiMSIgdG8gInJlcyIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAiMTogICAgICAgICAgICAgICAgICAgICBcbiIKLQotICAgIDogIj0mciIgKHJlcyksICI9JnIiICh0ZW1wKQotICAgIDogInIiIChsb2NrKSwgInIiIChvbGQpLCAiciIgKHNldCkKLSAgICA6ICJjYyIsICJtZW1vcnkiKTsKLQotICAgIHJldHVybiByZXM7Ci19Ci0KLQotI2Vsc2UKKyNpZiAhKE5HWF9IQVZFX0FUT01JQ19PUFMpCiAKICNkZWZpbmUgTkdYX0hBVkVfQVRPTUlDX09QUyAgMAogCi10eXBlZGVmIGludDMyX3QgIG5neF9hdG9taWNfaW50X3Q7Ci10eXBlZGVmIHVpbnQzMl90ICBuZ3hfYXRvbWljX3VpbnRfdDsKK3R5cGVkZWYgaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIG5neF9hdG9taWNfaW50X3Q7Cit0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBuZ3hfYXRvbWljX3VpbnRfdDsKIHR5cGVkZWYgdm9sYXRpbGUgbmd4X2F0b21pY191aW50X3QgIG5neF9hdG9taWNfdDsKLSNkZWZpbmUgTkdYX0FUT01JQ19UX0xFTiAgc2l6ZW9mKCItMjE0NzQ4MzY0OCIpIC0gMQorI2RlZmluZSBOR1hfQVRPTUlDX1RfTEVOICAgICAgICAgICAgc2l6ZW9mKCItMjE0NzQ4MzY0OCIpIC0gMQogCi0jZGVmaW5lIG5neF9hdG9taWNfaW5jKHgpICArKygqKHgpKQotI2RlZmluZSBuZ3hfYXRvbWljX2RlYyh4KSAgLS0oKih4KSkKIAogc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY191aW50X3QKIG5neF9hdG9taWNfY21wX3NldChuZ3hfYXRvbWljX3QgKmxvY2ssIG5neF9hdG9taWNfdWludF90IG9sZCwKICAgICAgbmd4X2F0b21pY191aW50X3Qgc2V0KQogewotICAgICAqbG9jayA9IHNldDsKLSAgICAgcmV0dXJuIDE7CisgICAgIGlmICgqbG9jayA9PSBvbGQgeworICAgICAgICAgKmxvY2sgPSBzZXQ7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgfQorCisgICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfaW50X3QKK25neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9hdG9taWNfdCAqdmFsdWUsIG5neF9hdG9taWNfaW50X3QgYWRkKQoreworICAgICBuZ3hfYXRvbWljX2ludF90ICBvbGQ7CisKKyAgICAgb2xkID0gKnZhbHVlOworICAgICAqdmFsdWUgKz0gYWRkOworCisgICAgIHJldHVybiBvbGQ7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2NoYW5uZWwuYyBiL3NyYy9vcy91bml4L25neF9jaGFubmVsLmMKaW5kZXggMDFhMDUxNC4uMDUxZjQ2NiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2NoYW5uZWwuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfY2hhbm5lbC5jCkBAIC0xOTIsMzAgKzE5MiwxNCBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAorICAgIGMtPnBvb2wgPSBjeWNsZS0+cG9vbDsKKwogICAgIHJldiA9IGMtPnJlYWQ7CiAgICAgd2V2ID0gYy0+d3JpdGU7CiAKLSAgICBuZ3hfbWVtemVybyhjLCBzaXplb2Yobmd4X2Nvbm5lY3Rpb25fdCkpOwotCi0gICAgYy0+cmVhZCA9IHJldjsKLSAgICBjLT53cml0ZSA9IHdldjsKLSAgICBjLT5mZCA9IGZkOwotICAgIGMtPmxvZyA9IGN5Y2xlLT5sb2c7Ci0KLSAgICBjLT5wb29sID0gY3ljbGUtPnBvb2w7Ci0KLSAgICBuZ3hfbWVtemVybyhyZXYsIHNpemVvZihuZ3hfZXZlbnRfdCkpOwotICAgIG5neF9tZW16ZXJvKHdldiwgc2l6ZW9mKG5neF9ldmVudF90KSk7Ci0KICAgICByZXYtPmxvZyA9IGN5Y2xlLT5sb2c7CiAgICAgd2V2LT5sb2cgPSBjeWNsZS0+bG9nOwogCi0gICAgcmV2LT5pbmRleCA9IE5HWF9JTlZBTElEX0lOREVYOwotICAgIHdldi0+aW5kZXggPSBOR1hfSU5WQUxJRF9JTkRFWDsKLQotICAgIHJldi0+ZGF0YSA9IGM7Ci0gICAgd2V2LT5kYXRhID0gYzsKLQogI2lmIChOR1hfVEhSRUFEUykKICAgICByZXYtPmxvY2sgPSAmYy0+bG9jazsKICAgICB3ZXYtPmxvY2sgPSAmYy0+bG9jazsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9maWxlcy5jIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmMKaW5kZXggZjhmOThjNy4uNjdjYWQxYSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmMKQEAgLTgsOSArOCwxMCBAQAogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAKIAotc3NpemVfdCBuZ3hfcmVhZF9maWxlKG5neF9maWxlX3QgKmZpbGUsIHVfY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgb2ZmX3Qgb2Zmc2V0KQorc3NpemVfdAorbmd4X3JlYWRfZmlsZShuZ3hfZmlsZV90ICpmaWxlLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIG9mZl90IG9mZnNldCkKIHsKLSAgICBzc2l6ZV90IG47CisgICAgc3NpemVfdCAgbjsKIAogICAgIG5neF9sb2dfZGVidWc0KE5HWF9MT0dfREVCVUdfQ09SRSwgZmlsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJyZWFkOiAlZCwgJXAsICV1eiwgJU8iLCBmaWxlLT5mZCwgYnVmLCBzaXplLCBvZmZzZXQpOwpAQCAtNTMsOSArNTQsMTAgQEAKIH0KIAogCi1zc2l6ZV90IG5neF93cml0ZV9maWxlKG5neF9maWxlX3QgKmZpbGUsIHVfY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgb2ZmX3Qgb2Zmc2V0KQorc3NpemVfdAorbmd4X3dyaXRlX2ZpbGUobmd4X2ZpbGVfdCAqZmlsZSwgdV9jaGFyICpidWYsIHNpemVfdCBzaXplLCBvZmZfdCBvZmZzZXQpCiB7Ci0gICAgc3NpemVfdCBuOworICAgIHNzaXplX3QgIG47CiAKICAgICBuZ3hfbG9nX2RlYnVnNChOR1hfTE9HX0RFQlVHX0NPUkUsIGZpbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAid3JpdGU6ICVkLCAlcCwgJXV6LCAlTyIsIGZpbGUtPmZkLCBidWYsIHNpemUsIG9mZnNldCk7CkBAIC0xMDksNyArMTExLDggQEAKIH0KIAogCi1uZ3hfZmRfdCBuZ3hfb3Blbl90ZW1wZmlsZSh1X2NoYXIgKm5hbWUsIG5neF91aW50X3QgcGVyc2lzdGVudCkKK25neF9mZF90CituZ3hfb3Blbl90ZW1wZmlsZSh1X2NoYXIgKm5hbWUsIG5neF91aW50X3QgcGVyc2lzdGVudCkKIHsKICAgICBuZ3hfZmRfdCAgZmQ7CiAKQEAgLTEyNSw4ICsxMjgsOSBAQAogCiAjZGVmaW5lIE5HWF9JT1ZTICA4CiAKLXNzaXplX3Qgbmd4X3dyaXRlX2NoYWluX3RvX2ZpbGUobmd4X2ZpbGVfdCAqZmlsZSwgbmd4X2NoYWluX3QgKmNsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBvZmZzZXQsIG5neF9wb29sX3QgKnBvb2wpCitzc2l6ZV90CituZ3hfd3JpdGVfY2hhaW5fdG9fZmlsZShuZ3hfZmlsZV90ICpmaWxlLCBuZ3hfY2hhaW5fdCAqY2wsIG9mZl90IG9mZnNldCwKKyAgICBuZ3hfcG9vbF90ICpwb29sKQogewogICAgIHVfY2hhciAgICAgICAgKnByZXY7CiAgICAgc2l6ZV90ICAgICAgICAgc2l6ZTsKQEAgLTIxNiw3ICsyMjAsOCBAQAogfQogCiAKLW5neF9pbnRfdCBuZ3hfb3Blbl9kaXIobmd4X3N0cl90ICpuYW1lLCBuZ3hfZGlyX3QgKmRpcikKK25neF9pbnRfdAorbmd4X29wZW5fZGlyKG5neF9zdHJfdCAqbmFtZSwgbmd4X2Rpcl90ICpkaXIpCiB7CiAgICAgZGlyLT5kaXIgPSBvcGVuZGlyKChjb25zdCBjaGFyICopIG5hbWUtPmRhdGEpOwogCkBAIC0yMjgsMyArMjMzLDYxIEBACiAKICAgICByZXR1cm4gTkdYX09LOwogfQorCisKK25neF9pbnRfdAorbmd4X2xvY2tfZmlsZShuZ3hfZmlsZV90ICpmaWxlKQoreworICAgIG5neF9lcnJfdCAgICAgZXJyOworICAgIHN0cnVjdCBmbG9jayAgZmw7CisKKyAgICBmbC5sX3doZW5jZSA9IFNFRUtfU0VUOworICAgIGZsLmxfbGVuID0gMDsKKyAgICBmbC5sX3BpZCA9IDA7CisgICAgZmwubF90eXBlID0gRl9XUkxDSzsKKyAgICBmbC5sX3N0YXJ0ID0gMDsKKworICAgIGlmIChmY250bChmaWxlLT5mZCwgRl9TRVRMSywgJmZsKSA9PSAtMSkgeworICAgICAgICBlcnIgPSBuZ3hfZXJybm87CisKKyAgICAgICAgaWYgKGVyciA9PSBOR1hfRUFHQUlOKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0JVU1k7CisgICAgICAgIH0KKworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGZpbGUtPmxvZywgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICJmY250bCglcywgRl9TRVRMSywgRl9XUkxDSykgZmFpbGVkIiwgZmlsZS0+bmFtZS5kYXRhKTsKKworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBOR1hfT0s7Cit9CisKKworbmd4X2ludF90CituZ3hfdW5sb2NrX2ZpbGUobmd4X2ZpbGVfdCAqZmlsZSkKK3sKKyAgICBuZ3hfZXJyX3QgICAgIGVycjsKKyAgICBzdHJ1Y3QgZmxvY2sgIGZsOworCisgICAgZmwubF93aGVuY2UgPSBTRUVLX1NFVDsKKyAgICBmbC5sX2xlbiA9IDA7CisgICAgZmwubF9waWQgPSAwOworICAgIGZsLmxfdHlwZSA9IEZfVU5MQ0s7CisgICAgZmwubF9zdGFydCA9IDA7CisKKyAgICBpZiAoZmNudGwoZmlsZS0+ZmQsIEZfU0VUTEssICZmbCkgPT0gLTEpIHsKKyAgICAgICAgZXJyID0gbmd4X2Vycm5vOworCisgICAgICAgIGlmIChlcnIgPT0gTkdYX0VBR0FJTikgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9CVVNZOworICAgICAgICB9CisKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBmaWxlLT5sb2csIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAiZmNudGwoJXMsIEZfU0VUTEssIEZfVU5MQ0spIGZhaWxlZCIsIGZpbGUtPm5hbWUuZGF0YSk7CisKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX09LOworfQpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfYW1kNjQuaCBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX2FtZDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdiMmQ1MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX2FtZDY0LmgKQEAgLTAsMCArMSw3NCBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorICovCisKKworI2lmIChOR1hfU01QKQorI2RlZmluZSBOR1hfU01QX0xPQ0sgICJsb2NrOyIKKyNlbHNlCisjZGVmaW5lIE5HWF9TTVBfTE9DSworI2VuZGlmCisKKworLyoKKyAqICJjbXB4Y2hncSAgciwgW21dIjoKKyAqCisgKiAgICAgaWYgKHJheCA9PSBbbV0pIHsKKyAqICAgICAgICAgemYgPSAxOworICogICAgICAgICBbbV0gPSByOworICogICAgIH0gZWxzZSB7CisgKiAgICAgICAgIHpmID0gMDsKKyAqICAgICAgICAgcmF4ID0gW21dOworICogICAgIH0KKyAqCisgKgorICogVGhlICJyIiBpcyBhbnkgcmVnaXN0ZXIsICVyYXggKCVyMCkgLSAlcjE2LgorICogVGhlICI9YSIgYW5kICJhIiBhcmUgdGhlICVyYXggcmVnaXN0ZXIuICBBbHRob3VnaCB3ZSBjYW4gcmV0dXJuIHJlc3VsdAorICogaW4gYW55IHJlZ2lzdGVyLCB3ZSB1c2UgJXJheCBiZWNhdXNlIGl0IGlzIHVzZWQgaW4gY21weGNoZ3EgYW55d2F5LgorICogVGhlICJjYyIgbWVhbnMgdGhhdCBmbGFncyB3ZXJlIGNoYW5nZWQuCisgKi8KKworc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY191aW50X3QKK25neF9hdG9taWNfY21wX3NldChuZ3hfYXRvbWljX3QgKmxvY2ssIG5neF9hdG9taWNfdWludF90IG9sZCwKKyAgICBuZ3hfYXRvbWljX3VpbnRfdCBzZXQpCit7ICAgCisgICAgbmd4X2F0b21pY191aW50X3QgIHJlczsKKworICAgIF9fYXNtX18gdm9sYXRpbGUgKAorCisgICAgICAgICBOR1hfU01QX0xPQ0sKKyAgICAiICAgIGNtcHhjaGdxICAlMywgJTE7ICAgIgorICAgICIgICAgc2V0eiAgICAgICViMDsgICAgICAiCisgICAgIiAgICBtb3Z6YnEgICAgJWIwLCAlMDsgICIKKworICAgIDogIj1hIiAocmVzKSA6ICJtIiAoKmxvY2spLCAiYSIgKG9sZCksICJyIiAoc2V0KSA6ICJjYyIsICJtZW1vcnkiKTsKKworICAgIHJldHVybiByZXM7Cit9CisKKworLyoKKyAqICJ4YWRkcSAgciwgW21dIjoKKyAqCisgKiAgICAgdGVtcCA9IFttXTsKKyAqICAgICBbbV0gKz0gcjsKKyAqICAgICByID0gdGVtcDsKKyAqCisgKgorICogVGhlICIrciIgaXMgYW55IHJlZ2lzdGVyLCAlcmF4ICglcjApIC0gJXIxNi4KKyAqIFRoZSAiY2MiIG1lYW5zIHRoYXQgZmxhZ3Mgd2VyZSBjaGFuZ2VkLgorICovCisKK3N0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfaW50X3QKK25neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9hdG9taWNfdCAqdmFsdWUsIG5neF9hdG9taWNfaW50X3QgYWRkKQoreworICAgIF9fYXNtX18gdm9sYXRpbGUgKAorCisgICAgICAgICBOR1hfU01QX0xPQ0sKKyAgICAiICAgIHhhZGRxICAlMCwgJTE7ICAgIgorCisgICAgOiAiK3EiIChhZGQpIDogIm0iICgqdmFsdWUpIDogImNjIiwgIm1lbW9yeSIpOworCisgICAgcmV0dXJuIGFkZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3BwYy5oIGIvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfcHBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjM2JjMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3BwYy5oCkBAIC0wLDAgKzEsNjYgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKKyAqLworCisKKy8qCisgKiBUaGUgcHBjIGFzc2VtYmxlciB0cmVhdHMgIjsiIGFzIGNvbW1lbnQsIHNvIHdlIGhhdmUgdG8gdXNlICJcbiIuCisgKiBUaGUgbWludXMgaW4gImJuZS0iIGlzIGEgaGludCBmb3IgdGhlIGJyYW5jaCBwcmVkaWN0aW9uIHVuaXQgdGhhdAorICogdGhpcyBicmFuY2ggaXMgdW5saWtlbHkgdG8gYmUgdGFrZW4uCisgKiBUaGUgIjFiIiBtZWFucyB0aGUgbmVhcmVzdCBiYWNrd2FyZCBsYWJlbCAiMSIgYW5kIHRoZSAiMWYiIG1lYW5zCisgKiB0aGUgbmVhcmVzdCBmb3J3YXJkIGxhYmVsICIxIi4KKyAqICAKKyAqIFRoZSAiYiIgbWVhbnMgdGhhdCB0aGUgYmFzZSByZWdpc3RlcnMgY2FuIGJlIHVzZWQgb25seSwgaS5lLgorICogYW55IHJlZ2lzdGVyIGV4Y2VwdCByMC4gIFRoZSByMCByZWdpc3RlciBhbHdheXMgaGFzIGEgemVybyB2YWx1ZSBhbmQKKyAqIGNvdWxkIG5vdCBiZSB1c2VkIGluICJhZGRpICByMCwgcjAsIDEiLgorICogVGhlICI9JmIiIG1lYW5zIHRoYXQgbm8gaW5wdXQgcmVnaXN0ZXJzIGNhbiBiZSB1c2VkLgorICovCisKK3N0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfdWludF90CituZ3hfYXRvbWljX2NtcF9zZXQobmd4X2F0b21pY190ICpsb2NrLCBuZ3hfYXRvbWljX3VpbnRfdCBvbGQsCisgICAgbmd4X2F0b21pY191aW50X3Qgc2V0KQoreworICAgIG5neF9hdG9taWNfdWludF90ICByZXMsIHRlbXA7CisKKyAgICBfX2FzbV9fIHZvbGF0aWxlICgKKworICAgICIgICAgbGkgICAgICAlMCwgMCAgICAgICBcbiIgLyogcHJlc2V0ICIwIiB0byAicmVzIiAgICAgICAgICAgICAgICAgICAgICAqLworICAgICIgICAgbHdhcnggICAlMSwgMCwgJTIgICBcbiIgLyogbG9hZCBmcm9tIFtsb2NrXSBpbnRvICJ0ZW1wIiAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBhbmQgc3RvcmUgcmVzZXJ2YXRpb24gICAgICAgICAgICAgICAgICAqLworICAgICIgICAgY21wdyAgICAlMSwgJTMgICAgICBcbiIgLyogY29tcGFyZSAidGVtcCIgYW5kICJvbGQiICAgICAgICAgICAgICAgICAqLworICAgICIgICAgYm5lLSAgICAxZiAgICAgICAgICBcbiIgLyogbm90IGVxdWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICIgICAgc3R3Y3guICAlNCwgMCwgJTIgICBcbiIgLyogc3RvcmUgInNldCIgaW50byBbbG9ja10gaWYgcmVzZXJ2YXRpb24gICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBpcyBub3QgY2xlYXJlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICIgICAgYm5lLSAgICAxZiAgICAgICAgICBcbiIgLyogdGhlIHJlc2VydmF0aW9uIHdhcyBjbGVhcmVkICAgICAgICAgICAgICAqLworICAgICIgICAgbGkgICAgICAlMCwgMSAgICAgICBcbiIgLyogc2V0ICIxIiB0byAicmVzIiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICIxOiAgICAgICAgICAgICAgICAgICAgICBcbiIKKworICAgIDogIj0mYiIgKHJlcyksICI9JmIiICh0ZW1wKQorICAgIDogImIiIChsb2NrKSwgImIiIChvbGQpLCAiYiIgKHNldCkKKyAgICA6ICJjYyIsICJtZW1vcnkiKTsKKworICAgIHJldHVybiByZXM7Cit9CisKKworc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY19pbnRfdAorbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X2F0b21pY190ICp2YWx1ZSwgbmd4X2F0b21pY19pbnRfdCBhZGQpCit7CisgICAgbmd4X2F0b21pY191aW50X3QgIHJlcywgdGVtcDsKKworICAgIF9fYXNtX18gdm9sYXRpbGUgKAorCisgICAgIjE6ICBsd2FyeCAgICUwLCAwLCAlMiAgIFxuIiAvKiBsb2FkIGZyb20gW3ZhbHVlXSBpbnRvICJyZXMiICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIGFuZCBzdG9yZSByZXNlcnZhdGlvbiAgICAgICAgICAgICAgICAgICovCisgICAgIiAgICBhZGQgICAgICUxLCAlMCwgJTMgIFxuIiAvKiAicmVzIiArICJhZGQiIHN0b3JlIGluICJ0ZW1wIiAgICAgICAgICAgICovCisgICAgIiAgICBzdHdjeC4gICUxLCAwLCAlMiAgIFxuIiAvKiBzdG9yZSAidGVtcCIgaW50byBbdmFsdWVdIGlmIHJlc2VydmF0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIGlzIG5vdCBjbGVhcmVkICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgIiAgICBibmUtICAgIDFiICAgICAgICAgIFxuIiAvKiB0cnkgYWdhaW4gaWYgcmVzZXJ2YXRpb24gd2FzIGNsZWFyZWQgICAgICovCisKKyAgICA6ICI9JmIiIChyZXMpLCAiPSZiIiAodGVtcCkKKyAgICA6ICJiIiAodmFsdWUpLCAiYiIgKGFkZCkKKyAgICA6ICJjYyIsICJtZW1vcnkiKTsKKworICAgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19zcGFyYzY0LmggYi9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19zcGFyYzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwMjJhOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3NwYXJjNjQuaApAQCAtMCwwICsxLDY5IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisgKi8KKworCisvKgorICogImNhc2EgICBbcjFdIDB4ODAsIHIyLCByMCIgIGFuZAorICogImNhc3hhICBbcjFdIDB4ODAsIHIyLCByMCIgIGRvIHRoZSBmb2xsb3dpbmc6CisgKgorICogICAgIGlmIChbcjFdID09IHIyKSB7CisgKiAgICAgICAgIHN3YXAocjAsIFtyMV0pOworICogICAgIH0gZWxzZSB7CisgKiAgICAgICAgIHIwID0gW3IxXTsKKyAqICAgICB9CisgKgorICogc28gInIwID09IHIyIiBtZWFucyB0aGF0IHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWxsLgorICoKKyAqCisgKiBUaGUgInIiIG1lYW5zIHRoZSBnZW5lcmFsIHJlZ2lzdGVyLgorICogVGhlICIrciIgbWVhbnMgdGhlIGdlbmVyYWwgcmVnaXN0ZXIgdXNlZCBmb3IgYm90aCBpbnB1dCBhbmQgb3V0cHV0LgorICovCisKKworI2lmIChOR1hfUFRSX1NJWkUgPT0gNCkKKyNkZWZpbmUgTkdYX0NBU0EgICJjYXNhIgorI2Vsc2UKKyNkZWZpbmUgTkdYX0NBU0EgICJjYXN4YSIKKyNlbmRpZgorCisKK3N0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfdWludF90CituZ3hfYXRvbWljX2NtcF9zZXQobmd4X2F0b21pY190ICpsb2NrLCBuZ3hfYXRvbWljX3VpbnRfdCBvbGQsCisgICAgbmd4X2F0b21pY191aW50X3Qgc2V0KQoreworICAgIF9fYXNtX18gdm9sYXRpbGUgKAorCisgICAgTkdYX0NBU0EgIiBbJTFdIDB4ODAsICUyLCAlMCIKKworICAgIDogIityIiAoc2V0KSA6ICJyIiAobG9jayksICJyIiAob2xkKSA6ICJtZW1vcnkiKTsKKworICAgIHJldHVybiAoc2V0ID09IG9sZCk7Cit9ICAgCisKKworc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY19pbnRfdAorbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X2F0b21pY190ICp2YWx1ZSwgbmd4X2F0b21pY19pbnRfdCBhZGQpCit7CisgICAgbmd4X2F0b21pY191aW50X3QgIG9sZCwgcmVzOworCisgICAgb2xkID0gKnZhbHVlOworCisgICAgZm9yICggOzsgKSB7CisKKyAgICAgICAgcmVzID0gb2xkICsgYWRkOworCisgICAgICAgIF9fYXNtX18gdm9sYXRpbGUgKAorCisgICAgICAgIE5HWF9DQVNBICIgWyUxXSAweDgwLCAlMiwgJTAiCisKKyAgICAgICAgOiAiK3IiIChyZXMpIDogInIiICh2YWx1ZSksICJyIiAob2xkKSA6ICJtZW1vcnkiKTsKKworICAgICAgICBpZiAocmVzID09IG9sZCkgeworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQorCisgICAgICAgIG9sZCA9IHJlczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY194ODYuaCBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3g4Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYzBjOTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY194ODYuaApAQCAtMCwwICsxLDEwMyBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorICovCisKKworI2lmIChOR1hfU01QKQorI2RlZmluZSBOR1hfU01QX0xPQ0sgICJsb2NrOyIKKyNlbHNlCisjZGVmaW5lIE5HWF9TTVBfTE9DSworI2VuZGlmCisKKworLyoKKyAqICJjbXB4Y2hnbCAgciwgW21dIjoKKyAqCisgKiAgICAgaWYgKGVheCA9PSBbbV0pIHsKKyAqICAgICAgICAgemYgPSAxOworICogICAgICAgICBbbV0gPSByOworICogICAgIH0gZWxzZSB7CisgKiAgICAgICAgIHpmID0gMDsKKyAqICAgICAgICAgZWF4ID0gW21dOworICogICAgIH0KKyAqCisgKiAKKyAqIFRoZSAicSIgaXMgYW55IG9mIHRoZSAlZWF4LCAlZWJ4LCAlZWN4LCBvciAlZWR4IHJlZ2lzdGVycy4KKyAqIFRoZSAiPWEiIGFuZCAiYSIgYXJlIHRoZSAlZWF4IHJlZ2lzdGVyLiAgQWx0aG91Z2ggd2UgY2FuIHJldHVybiByZXN1bHQKKyAqIGluIGFueSByZWdpc3Rlciwgd2UgdXNlICVlYXggYmVjYXVzZSBpdCBpcyB1c2VkIGluIGNtcHhjaGdsIGFueXdheS4KKyAqIFRoZSAiY2MiIG1lYW5zIHRoYXQgZmxhZ3Mgd2VyZSBjaGFuZ2VkLgorICovCisKK3N0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfdWludF90CituZ3hfYXRvbWljX2NtcF9zZXQobmd4X2F0b21pY190ICpsb2NrLCBuZ3hfYXRvbWljX3VpbnRfdCBvbGQsCisgICAgbmd4X2F0b21pY191aW50X3Qgc2V0KQoreworICAgIG5neF9hdG9taWNfdWludF90ICByZXM7CisKKyAgICBfX2FzbV9fIHZvbGF0aWxlICgKKworICAgICAgICAgTkdYX1NNUF9MT0NLCisgICAgIiAgICBjbXB4Y2hnbCAgJTMsICUxOyAgICIKKyAgICAiICAgIHNldHogICAgICAlYjA7ICAgICAgIgorICAgICIgICAgbW92emJsICAgICViMCwgJTA7ICAiCisKKyAgICA6ICI9YSIgKHJlcykgOiAibSIgKCpsb2NrKSwgImEiIChvbGQpLCAicSIgKHNldCkgOiAiY2MiLCAibWVtb3J5Iik7CisKKyAgICByZXR1cm4gcmVzOworfQorCisKKy8qCisgKiAieGFkZGwgIHIsIFttXSI6CisgKgorICogICAgIHRlbXAgPSBbbV07CisgKiAgICAgW21dICs9IHI7CisgKiAgICAgciA9IHRlbXA7CisgKgorICoKKyAqIFRoZSAiK3EiIGlzIGFueSBvZiB0aGUgJWVheCwgJWVieCwgJWVjeCwgb3IgJWVkeCByZWdpc3RlcnMuCisgKiBUaGUgImNjIiBtZWFucyB0aGF0IGZsYWdzIHdlcmUgY2hhbmdlZC4KKyAqLworCisKKyNpZiAhKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPD0gNykKKworc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY19pbnRfdAorbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X2F0b21pY190ICp2YWx1ZSwgbmd4X2F0b21pY19pbnRfdCBhZGQpCit7CisgICAgX19hc21fXyB2b2xhdGlsZSAoCisKKyAgICAgICAgIE5HWF9TTVBfTE9DSworICAgICIgICAgeGFkZGwgICUwLCAlMTsgICAiCisKKyAgICA6ICIrcSIgKGFkZCkgOiAibSIgKCp2YWx1ZSkgOiAiY2MiLCAibWVtb3J5Iik7CisKKyAgICByZXR1cm4gYWRkOworfQorCisKKyNlbHNlIC8qIChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDw9IDcpICovCisKKy8qCisgKiBnY2MgMi43IGRvZXMgbm90IHN1cHBvcnQgIitxIiwgc28gd2UgaGF2ZSB0byB1c2UgdGhlIGZpeGVkICVlYXggKCI9YSIgYW5kCisgKiAiYSIpIGFuZCB0aGlzIGFkZHMgdHdvIHN1cGVyZmx1b3VzIGluc3RydWN0aW9ucyBpbiB0aGUgZW5kIG9mIGNvZGUsCisgKiBzb21ldGhpbmcgbGlrZSB0aGlzOiAibW92ICVlYXgsICVlZHggLyBtb3YgJWVkeCwgJWVheCIuCisgKi8KKworc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY19pbnRfdAorbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X2F0b21pY190ICp2YWx1ZSwgbmd4X2F0b21pY19pbnRfdCBhZGQpCit7CisgICAgbmd4X2F0b21pY191aW50X3QgIG9sZDsKKworICAgIF9fYXNtX18gdm9sYXRpbGUgKAorCisgICAgICAgICBOR1hfU01QX0xPQ0sKKyAgICAiICAgIHhhZGRsICAlMiwgJTE7ICAgIgorCisgICAgOiAiPWEiIChvbGQpIDogIm0iICgqdmFsdWUpLCAiYSIgKGFkZCkgOiAiY2MiLCAibWVtb3J5Iik7CisKKyAgICByZXR1cm4gb2xkOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9yZWFkdl9jaGFpbi5jIGIvc3JjL29zL3VuaXgvbmd4X3JlYWR2X2NoYWluLmMKaW5kZXggNDdkOGYzYi4uMDhiNWNjMCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3JlYWR2X2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3JlYWR2X2NoYWluLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlvdi0+aW92X2Jhc2UgPSBjaGFpbi0+YnVmLT5sYXN0OworICAgICAgICAgICAgaW92LT5pb3ZfYmFzZSA9ICh2b2lkICopIGNoYWluLT5idWYtPmxhc3Q7CiAgICAgICAgICAgICBpb3YtPmlvdl9sZW4gPSBjaGFpbi0+YnVmLT5lbmQgLSBjaGFpbi0+YnVmLT5sYXN0OwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9zdW5wcm9fYW1kNjQuaWwgYi9zcmMvb3MvdW5peC9uZ3hfc3VucHJvX2FtZDY0LmlsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZDk0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3MvdW5peC9uZ3hfc3VucHJvX2FtZDY0LmlsCkBAIC0wLDAgKzEsMzAgQEAKKy8KKy8gQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorLworCisvIG5neF9hdG9taWNfdWludF90IG5neF9hdG9taWNfY21wX3NldChuZ3hfYXRvbWljX3QgKmxvY2ssCisvICAgICBuZ3hfYXRvbWljX3VpbnRfdCBvbGQsIG5neF9hdG9taWNfdWludF90IHNldCk7CisvCisvIHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiAlcmRpLCAlcnNpLCAlcmR4CisvIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQgaW4gdGhlICVyYXgKKworICAgICAgICAuaW5saW5lIG5neF9hdG9taWNfY21wX3NldCwwCisgICAgICAgIG1vdnEgICAgICAlcnNpLCAlcmF4CisgICAgICAgIGxvY2sKKyAgICAgICAgY21weGNoZ3EgICVyZHgsICglcmRpKQorICAgICAgICBzZXR6ICAgICAgJWFsCisgICAgICAgIG1vdnpicSAgICAlYWwsICVyYXgKKyAgICAgICAgLmVuZAorCisKKy8gbmd4X2F0b21pY19pbnRfdCBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfYXRvbWljX3QgKnZhbHVlLAorLyAgICAgbmd4X2F0b21pY19pbnRfdCBhZGQpOworLworLyB0aGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gJXJkaSwgJXJzaQorLyB0aGUgcmVzdWx0IGlzIHJldHVybmVkIGluIHRoZSAlcmF4CisKKyAgICAgICAgLmlubGluZSBuZ3hfYXRvbWljX2ZldGNoX2FkZCwwCisgICAgICAgIG1vdnEgICAgICAlcnNpLCAlcmF4CisgICAgICAgIGxvY2sKKyAgICAgICAgeGFkZHEgICAgICVyYXgsICglcmRpKQorICAgICAgICAuZW5kCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc3VucHJvX2F0b21pY19zcGFyYzY0LmggYi9zcmMvb3MvdW5peC9uZ3hfc3VucHJvX2F0b21pY19zcGFyYzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYzNDQxNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy91bml4L25neF9zdW5wcm9fYXRvbWljX3NwYXJjNjQuaApAQCAtMCwwICsxLDUyIEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisgKi8KKworCisjaWYgKE5HWF9QVFJfU0laRSA9PSA0KQorI2RlZmluZSBOR1hfQ0FTQSAgbmd4X2Nhc2EKKyNlbHNlCisjZGVmaW5lIE5HWF9DQVNBICBuZ3hfY2FzeGEKKyNlbmRpZgorCisKK25neF9hdG9taWNfdWludF90CituZ3hfY2FzYShuZ3hfYXRvbWljX3VpbnRfdCBzZXQsIG5neF9hdG9taWNfdWludF90IG9sZCwgbmd4X2F0b21pY190ICpsb2NrKTsKKworbmd4X2F0b21pY191aW50X3QKK25neF9jYXN4YShuZ3hfYXRvbWljX3VpbnRfdCBzZXQsIG5neF9hdG9taWNfdWludF90IG9sZCwgbmd4X2F0b21pY190ICpsb2NrKTsKKworLyogdGhlIGNvZGUgaW4gc3JjL29zL3VuaXgvbmd4X3N1bnByb19zcGFyYzY0LmlsICovCisKKworc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY191aW50X3QKK25neF9hdG9taWNfY21wX3NldChuZ3hfYXRvbWljX3QgKmxvY2ssIG5neF9hdG9taWNfdWludF90IG9sZCwKKyAgICBuZ3hfYXRvbWljX3VpbnRfdCBzZXQpCit7CisgICAgTkdYX0NBU0Eoc2V0LCBvbGQsIGxvY2spOworCisgICAgcmV0dXJuIChzZXQgPT0gb2xkKTsKK30gICAKKworCitzdGF0aWMgbmd4X2lubGluZSBuZ3hfYXRvbWljX2ludF90CituZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfYXRvbWljX3QgKnZhbHVlLCBuZ3hfYXRvbWljX2ludF90IGFkZCkKK3sKKyAgICBuZ3hfYXRvbWljX3VpbnRfdCAgb2xkLCByZXM7CisKKyAgICBvbGQgPSAqdmFsdWU7CisKKyAgICBmb3IgKCA7OyApIHsKKworICAgICAgICByZXMgPSBvbGQgKyBhZGQ7CisKKyAgICAgICAgTkdYX0NBU0EocmVzLCBvbGQsIHZhbHVlKTsKKworICAgICAgICBpZiAocmVzID09IG9sZCkgeworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQorCisgICAgICAgIG9sZCA9IHJlczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc3VucHJvX3NwYXJjNjQuaWwgYi9zcmMvb3MvdW5peC9uZ3hfc3VucHJvX3NwYXJjNjQuaWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI3MDhlZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy91bml4L25neF9zdW5wcm9fc3BhcmM2NC5pbApAQCAtMCwwICsxLDM1IEBACisvCisvIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKKy8KKworCisvICAiY2FzYSAgIFslbzJdIDB4ODAsICVvMSwgJW8wIiAgYW5kCisvICAiY2FzeGEgIFslbzJdIDB4ODAsICVvMSwgJW8wIiAgZG8gdGhlIGZvbGxvd2luZzoKKy8gCisvICAgICAgIGlmIChbJW8yXSA9PSAlbzEpIHsKKy8gICAgICAgICAgIHN3YXAoJW8wLCBbJW8yXSk7CisvICAgICAgIH0gZWxzZSB7CisvICAgICAgICAgICAlbzAgPSBbJW8yXTsKKy8gICAgICAgfQorCisKKy8gbmd4X2F0b21pY191aW50X3Qgbmd4X2Nhc2Eobmd4X2F0b21pY191aW50X3Qgc2V0LCBuZ3hfYXRvbWljX3VpbnRfdCBvbGQsCisvICAgICAgbmd4X2F0b21pY190ICpsb2NrKTsKKy8KKy8gdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluIHRoZSAlbzAsICVvMSwgJW8yCisvIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQgaW4gdGhlICVvMAorCisgICAgICAgIC5pbmxpbmUgbmd4X2Nhc2EsMAorICAgICAgICBjYXNhICAgIFslbzJdIDB4ODAsICVvMSwgJW8wCisgICAgICAgIC5lbmQKKworCisvIG5neF9hdG9taWNfdWludF90IG5neF9jYXN4YShuZ3hfYXRvbWljX3VpbnRfdCBzZXQsIG5neF9hdG9taWNfdWludF90IG9sZCwKKy8gICAgICBuZ3hfYXRvbWljX3QgKmxvY2spOworLworLyB0aGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gdGhlICVvMCwgJW8xLCAlbzIKKy8gdGhlIHJlc3VsdCBpcyByZXR1cm5lZCBpbiB0aGUgJW8wCisKKyAgICAgICAgLmlubGluZSBuZ3hfY2FzeGEsMAorICAgICAgICBjYXN4YSAgIFslbzJdIDB4ODAsICVvMSwgJW8wCisgICAgICAgIC5lbmQKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9zdW5wcm9feDg2LmlsIGIvc3JjL29zL3VuaXgvbmd4X3N1bnByb194ODYuaWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2NTY4YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy91bml4L25neF9zdW5wcm9feDg2LmlsCkBAIC0wLDAgKzEsMzEgQEAKKy8KKy8gQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorLworCisvIG5neF9hdG9taWNfdWludF90IG5neF9hdG9taWNfY21wX3NldChuZ3hfYXRvbWljX3QgKmxvY2ssCisvICAgICBuZ3hfYXRvbWljX3VpbnRfdCBvbGQsIG5neF9hdG9taWNfdWludF90IHNldCk7CisvCisvIHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBvbiB0aGUgc3RhY2sgKCVlc3ApLCA0KCVlc3ApLCA4KCVlc3ApCisKKyAgICAgICAgLmlubGluZSBuZ3hfYXRvbWljX2NtcF9zZXQsMAorICAgICAgICBtb3ZsICAgICAgKCVlc3ApLCAlZWN4CisgICAgICAgIG1vdmwgICAgICA0KCVlc3ApLCAlZWF4CisgICAgICAgIG1vdmwgICAgICA4KCVlc3ApLCAlZWR4CisgICAgICAgIGxvY2sKKyAgICAgICAgY21weGNoZ2wgICVlZHgsICglZWN4KQorICAgICAgICBzZXR6ICAgICAgJWFsCisgICAgICAgIG1vdnpibCAgICAlYWwsICVlYXgKKyAgICAgICAgLmVuZAorCisKKy8gbmd4X2F0b21pY19pbnRfdCBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfYXRvbWljX3QgKnZhbHVlLAorLyAgICAgbmd4X2F0b21pY19pbnRfdCBhZGQpOworLworLyB0aGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgb24gdGhlIHN0YWNrICglZXNwKSwgNCglZXNwKQorCisgICAgICAgIC5pbmxpbmUgbmd4X2F0b21pY19mZXRjaF9hZGQsMAorICAgICAgICBtb3ZsICAgICAgKCVlc3ApLCAlZWN4CisgICAgICAgIG1vdmwgICAgICA0KCVlc3ApLCAlZWF4CisgICAgICAgIGxvY2sKKyAgICAgICAgeGFkZGwgICAgICVlYXgsICglZWN4KQorICAgICAgICAuZW5kCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfdGltZS5oIGIvc3JjL29zL3VuaXgvbmd4X3RpbWUuaAppbmRleCA2M2EwYWQ5Li5mOWZlM2M1IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfdGltZS5oCisrKyBiL3NyYy9vcy91bml4L25neF90aW1lLmgKQEAgLTEyLDMxICsxMiwzMiBAQAogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAKIAotdHlwZWRlZiBuZ3hfcmJ0cmVlX2tleV90ICBuZ3hfbXNlY190OwordHlwZWRlZiBuZ3hfcmJ0cmVlX2tleV90ICAgICAgbmd4X21zZWNfdDsKK3R5cGVkZWYgbmd4X3JidHJlZV9rZXlfaW50X3QgIG5neF9tc2VjX2ludF90OwogCi10eXBlZGVmIHN0cnVjdCB0bSAgICAgICAgIG5neF90bV90OwordHlwZWRlZiBzdHJ1Y3QgdG0gICAgICAgICAgICAgbmd4X3RtX3Q7CiAKLSNkZWZpbmUgbmd4X3RtX3NlYyAgICAgICAgdG1fc2VjCi0jZGVmaW5lIG5neF90bV9taW4gICAgICAgIHRtX21pbgotI2RlZmluZSBuZ3hfdG1faG91ciAgICAgICB0bV9ob3VyCi0jZGVmaW5lIG5neF90bV9tZGF5ICAgICAgIHRtX21kYXkKLSNkZWZpbmUgbmd4X3RtX21vbiAgICAgICAgdG1fbW9uCi0jZGVmaW5lIG5neF90bV95ZWFyICAgICAgIHRtX3llYXIKLSNkZWZpbmUgbmd4X3RtX3dkYXkgICAgICAgdG1fd2RheQotI2RlZmluZSBuZ3hfdG1faXNkc3QgICAgICB0bV9pc2RzdAorI2RlZmluZSBuZ3hfdG1fc2VjICAgICAgICAgICAgdG1fc2VjCisjZGVmaW5lIG5neF90bV9taW4gICAgICAgICAgICB0bV9taW4KKyNkZWZpbmUgbmd4X3RtX2hvdXIgICAgICAgICAgIHRtX2hvdXIKKyNkZWZpbmUgbmd4X3RtX21kYXkgICAgICAgICAgIHRtX21kYXkKKyNkZWZpbmUgbmd4X3RtX21vbiAgICAgICAgICAgIHRtX21vbgorI2RlZmluZSBuZ3hfdG1feWVhciAgICAgICAgICAgdG1feWVhcgorI2RlZmluZSBuZ3hfdG1fd2RheSAgICAgICAgICAgdG1fd2RheQorI2RlZmluZSBuZ3hfdG1faXNkc3QgICAgICAgICAgdG1faXNkc3QKIAotI2RlZmluZSBuZ3hfdG1fc2VjX3QgICAgICBpbnQKLSNkZWZpbmUgbmd4X3RtX21pbl90ICAgICAgaW50Ci0jZGVmaW5lIG5neF90bV9ob3VyX3QgICAgIGludAotI2RlZmluZSBuZ3hfdG1fbWRheV90ICAgICBpbnQKLSNkZWZpbmUgbmd4X3RtX21vbl90ICAgICAgaW50Ci0jZGVmaW5lIG5neF90bV95ZWFyX3QgICAgIGludAotI2RlZmluZSBuZ3hfdG1fd2RheV90ICAgICBpbnQKKyNkZWZpbmUgbmd4X3RtX3NlY190ICAgICAgICAgIGludAorI2RlZmluZSBuZ3hfdG1fbWluX3QgICAgICAgICAgaW50CisjZGVmaW5lIG5neF90bV9ob3VyX3QgICAgICAgICBpbnQKKyNkZWZpbmUgbmd4X3RtX21kYXlfdCAgICAgICAgIGludAorI2RlZmluZSBuZ3hfdG1fbW9uX3QgICAgICAgICAgaW50CisjZGVmaW5lIG5neF90bV95ZWFyX3QgICAgICAgICBpbnQKKyNkZWZpbmUgbmd4X3RtX3dkYXlfdCAgICAgICAgIGludAogCiAKICNpZiAoTkdYX0hBVkVfR01UT0ZGKQotI2RlZmluZSBuZ3hfdG1fZ210b2ZmICAgICB0bV9nbXRvZmYKLSNkZWZpbmUgbmd4X3RtX3pvbmUgICAgICAgdG1fem9uZQorI2RlZmluZSBuZ3hfdG1fZ210b2ZmICAgICAgICAgdG1fZ210b2ZmCisjZGVmaW5lIG5neF90bV96b25lICAgICAgICAgICB0bV96b25lCiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMKaW5kZXggOWJhZWIxZi4uZjk1YzJjYSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3dyaXRldl9jaGFpbi5jCisrKyBiL3NyYy9vcy91bml4L25neF93cml0ZXZfY2hhaW4uYwpAQCAtODEsNyArODEsNyBAQAogICAgICAgICAgICAgc2l6ZSA9IGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3M7CiAKICAgICAgICAgICAgIGlmIChzZW5kICsgc2l6ZSA+IGxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IChzc2l6ZV90KSBsaW1pdCAtIHNlbmQ7CisgICAgICAgICAgICAgICAgc2l6ZSA9IChzc2l6ZV90KSAobGltaXQgLSBzZW5kKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHByZXYgPT0gY2wtPmJ1Zi0+cG9zKSB7CmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X2F0b21pYy5oIGIvc3JjL29zL3dpbjMyL25neF9hdG9taWMuaAppbmRleCAwMWVmOThlLi44N2RlNTdkIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X2F0b21pYy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfYXRvbWljLmgKQEAgLTE0LDE0ICsxNCwxMCBAQAogCiAjZGVmaW5lIE5HWF9IQVZFX0FUT01JQ19PUFMgICAxCiAKLXR5cGVkZWYgaW50MzJfdCAgbmd4X2F0b21pY19pbnRfdDsKLXR5cGVkZWYgdWludDMyX3QgIG5neF9hdG9taWNfdWludF90OwordHlwZWRlZiBpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgbmd4X2F0b21pY19pbnRfdDsKK3R5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIG5neF9hdG9taWNfdWludF90OwogdHlwZWRlZiB2b2xhdGlsZSBuZ3hfYXRvbWljX3VpbnRfdCAgbmd4X2F0b21pY190OwotI2RlZmluZSBOR1hfQVRPTUlDX1RfTEVOICBzaXplb2YoIi0yMTQ3NDgzNjQ4IikgLSAxCi0KLQotI2RlZmluZSBuZ3hfYXRvbWljX2luYyhwKSAgICAgICBJbnRlcmxvY2tlZEluY3JlbWVudCgobG9uZyAqKSBwKQotI2RlZmluZSBuZ3hfYXRvbWljX2RlYyhwKSAgICAgICBJbnRlcmxvY2tlZERlY3JlbWVudCgobG9uZyAqKSBwKQorI2RlZmluZSBOR1hfQVRPTUlDX1RfTEVOICAgICAgICAgICAgc2l6ZW9mKCItMjE0NzQ4MzY0OCIpIC0gMQogCiAKICNpZiBkZWZpbmVkKCBfX1dBVENPTUNfXyApIHx8IGRlZmluZWQoIF9fQk9STEFORENfXyApIHx8ICggX01TQ19WRVIgPj0gMTMwMCApCkBAIC00Miw2ICszOCw5IEBACiAjZW5kaWYKIAogCisjZGVmaW5lIG5neF9hdG9taWNfZmV0Y2hfYWRkKHAsIGFkZCkgSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgobG9uZyAqKSBwLCBhZGQpCisKKwogdm9pZCBuZ3hfc3BpbmxvY2sobmd4X2F0b21pY190ICpsb2NrLCBuZ3hfdWludF90IHNwaW4pOwogCiAjZGVmaW5lIG5neF90cnlsb2NrKGxvY2spICAoKihsb2NrKSA9PSAwICYmIG5neF9hdG9taWNfY21wX3NldChsb2NrLCAwLCAxKSkKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuYyBiL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuYwppbmRleCBiZWE1ODBiLi43OGI3Zjk1IDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmMKKysrIGIvc3JjL29zL3dpbjMyL25neF9maWxlcy5jCkBAIC04LDcgKzgsOCBAQAogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAKIAotc3NpemVfdCBuZ3hfcmVhZF9maWxlKG5neF9maWxlX3QgKmZpbGUsIHVfY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgb2ZmX3Qgb2Zmc2V0KQorc3NpemVfdAorbmd4X3JlYWRfZmlsZShuZ3hfZmlsZV90ICpmaWxlLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIG9mZl90IG9mZnNldCkKIHsKICAgICBsb25nICAgICAgICBoaWdoX29mZnNldDsKICAgICB1X2xvbmcgICAgICBuOwpAQCAtNzIsNyArNzMsOCBAQAogfQogCiAKLXNzaXplX3Qgbmd4X3dyaXRlX2ZpbGUobmd4X2ZpbGVfdCAqZmlsZSwgdV9jaGFyICpidWYsIHNpemVfdCBzaXplLCBvZmZfdCBvZmZzZXQpCitzc2l6ZV90CituZ3hfd3JpdGVfZmlsZShuZ3hfZmlsZV90ICpmaWxlLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIG9mZl90IG9mZnNldCkKIHsKICAgICBsb25nICAgICAgICBoaWdoX29mZnNldDsKICAgICB1X2xvbmcgICAgICBuOwpAQCAtMTM1LDggKzEzNyw5IEBACiB9CiAKIAotc3NpemVfdCBuZ3hfd3JpdGVfY2hhaW5fdG9fZmlsZShuZ3hfZmlsZV90ICpmaWxlLCBuZ3hfY2hhaW5fdCAqY2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IG9mZnNldCwgbmd4X3Bvb2xfdCAqcG9vbCkKK3NzaXplX3QKK25neF93cml0ZV9jaGFpbl90b19maWxlKG5neF9maWxlX3QgKmZpbGUsIG5neF9jaGFpbl90ICpjbCwgb2ZmX3Qgb2Zmc2V0LAorICAgIG5neF9wb29sX3QgKnBvb2wpCiB7CiAgICAgdV9jaGFyICAgKmJ1ZiwgKnByZXY7CiAgICAgc2l6ZV90ICAgIHNpemU7CkBAIC0xNzEsOCArMTc0LDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X3dpbjMyX3JlbmFtZV9maWxlKG5neF9zdHJfdCAqZnJvbSwgbmd4X3N0cl90ICp0bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3Bvb2xfdCAqcG9vbCkKK25neF9pbnRfdAorbmd4X3dpbjMyX3JlbmFtZV9maWxlKG5neF9zdHJfdCAqZnJvbSwgbmd4X3N0cl90ICp0bywgbmd4X3Bvb2xfdCAqcG9vbCkKIHsKICAgICB1X2NoYXIgICAgICAgICAgICAgKm5hbWU7CiAgICAgbmd4X2ludF90ICAgICAgICAgICByYzsKQEAgLTIzMyw3ICsyMzYsOCBAQAogCiAjaWYgMAogCi1uZ3hfaW50X3Qgbmd4X2ZpbGVfaW5mbyhjaGFyICpmaWxlLCBuZ3hfZmlsZV9pbmZvX3QgKnNiKQorbmd4X2ludF90CituZ3hfZmlsZV9pbmZvKGNoYXIgKmZpbGUsIG5neF9maWxlX2luZm9fdCAqc2IpCiB7CiAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSAgZmE7CiAKQEAgLTI1Niw3ICsyNjAsOCBAQAogI2VuZGlmCiAKIAotbmd4X2ludF90IG5neF9maWxlX2luZm8odV9jaGFyICpmaWxlLCBuZ3hfZmlsZV9pbmZvX3QgKnNiKQorbmd4X2ludF90CituZ3hfZmlsZV9pbmZvKHVfY2hhciAqZmlsZSwgbmd4X2ZpbGVfaW5mb190ICpzYikKIHsKICAgICAvKiBXaW45NSAqLwogCkBAIC0yNzAsNyArMjc1LDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X29wZW5fZGlyKG5neF9zdHJfdCAqbmFtZSwgbmd4X2Rpcl90ICpkaXIpCituZ3hfaW50X3QKK25neF9vcGVuX2RpcihuZ3hfc3RyX3QgKm5hbWUsIG5neF9kaXJfdCAqZGlyKQogewogICAgIG5neF9jcHlzdHJuKG5hbWUtPmRhdGEgKyBuYW1lLT5sZW4sIE5HWF9ESVJfTUFTSywgTkdYX0RJUl9NQVNLX0xFTiArIDEpOwogCkBAIC0yODcsNyArMjkzLDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X3JlYWRfZGlyKG5neF9kaXJfdCAqZGlyKQorbmd4X2ludF90CituZ3hfcmVhZF9kaXIobmd4X2Rpcl90ICpkaXIpCiB7CiAgICAgaWYgKGRpci0+cmVhZHkpIHsKICAgICAgICAgZGlyLT5yZWFkeSA9IDA7CkBAIC0zMTYsNyArMzIzLDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2ZpbGVfYXBwZW5kX21vZGUobmd4X2ZkX3QgZmQpCituZ3hfaW50X3QKK25neF9maWxlX2FwcGVuZF9tb2RlKG5neF9mZF90IGZkKQogewogI2lmIDAKICAgICBpZiAoTG9ja0ZpbGUoZmQsIDAsIDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpID09IDApIHsKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfdGltZS5oIGIvc3JjL29zL3dpbjMyL25neF90aW1lLmgKaW5kZXggM2FjNDBiNC4uNGMxNDk4NCAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF90aW1lLmgKKysrIGIvc3JjL29zL3dpbjMyL25neF90aW1lLmgKQEAgLTEyLDI5ICsxMiwzMCBAQAogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAKIAotdHlwZWRlZiBuZ3hfcmJ0cmVlX2tleV90ICBuZ3hfbXNlY190OwordHlwZWRlZiBuZ3hfcmJ0cmVlX2tleV90ICAgICAgbmd4X21zZWNfdDsKK3R5cGVkZWYgbmd4X3JidHJlZV9rZXlfaW50X3QgIG5neF9tc2VjX2ludF90OwogCi10eXBlZGVmIFNZU1RFTVRJTUUgICAgICAgIG5neF90bV90OwotdHlwZWRlZiBGSUxFVElNRSAgICAgICAgICBuZ3hfbXRpbWVfdDsKK3R5cGVkZWYgU1lTVEVNVElNRSAgICAgICAgICAgIG5neF90bV90OwordHlwZWRlZiBGSUxFVElNRSAgICAgICAgICAgICAgbmd4X210aW1lX3Q7CiAKLSNkZWZpbmUgbmd4X3RtX3NlYyAgICAgICAgd1NlY29uZAotI2RlZmluZSBuZ3hfdG1fbWluICAgICAgICB3TWludXRlCi0jZGVmaW5lIG5neF90bV9ob3VyICAgICAgIHdIb3VyCi0jZGVmaW5lIG5neF90bV9tZGF5ICAgICAgIHdEYXkKLSNkZWZpbmUgbmd4X3RtX21vbiAgICAgICAgd01vbnRoCi0jZGVmaW5lIG5neF90bV95ZWFyICAgICAgIHdZZWFyCi0jZGVmaW5lIG5neF90bV93ZGF5ICAgICAgIHdEYXlPZldlZWsKKyNkZWZpbmUgbmd4X3RtX3NlYyAgICAgICAgICAgIHdTZWNvbmQKKyNkZWZpbmUgbmd4X3RtX21pbiAgICAgICAgICAgIHdNaW51dGUKKyNkZWZpbmUgbmd4X3RtX2hvdXIgICAgICAgICAgIHdIb3VyCisjZGVmaW5lIG5neF90bV9tZGF5ICAgICAgICAgICB3RGF5CisjZGVmaW5lIG5neF90bV9tb24gICAgICAgICAgICB3TW9udGgKKyNkZWZpbmUgbmd4X3RtX3llYXIgICAgICAgICAgIHdZZWFyCisjZGVmaW5lIG5neF90bV93ZGF5ICAgICAgICAgICB3RGF5T2ZXZWVrCiAKLSNkZWZpbmUgbmd4X3RtX3NlY190ICAgICAgdV9zaG9ydAotI2RlZmluZSBuZ3hfdG1fbWluX3QgICAgICB1X3Nob3J0Ci0jZGVmaW5lIG5neF90bV9ob3VyX3QgICAgIHVfc2hvcnQKLSNkZWZpbmUgbmd4X3RtX21kYXlfdCAgICAgdV9zaG9ydAotI2RlZmluZSBuZ3hfdG1fbW9uX3QgICAgICB1X3Nob3J0Ci0jZGVmaW5lIG5neF90bV95ZWFyX3QgICAgIHVfc2hvcnQKLSNkZWZpbmUgbmd4X3RtX3dkYXlfdCAgICAgdV9zaG9ydAorI2RlZmluZSBuZ3hfdG1fc2VjX3QgICAgICAgICAgdV9zaG9ydAorI2RlZmluZSBuZ3hfdG1fbWluX3QgICAgICAgICAgdV9zaG9ydAorI2RlZmluZSBuZ3hfdG1faG91cl90ICAgICAgICAgdV9zaG9ydAorI2RlZmluZSBuZ3hfdG1fbWRheV90ICAgICAgICAgdV9zaG9ydAorI2RlZmluZSBuZ3hfdG1fbW9uX3QgICAgICAgICAgdV9zaG9ydAorI2RlZmluZSBuZ3hfdG1feWVhcl90ICAgICAgICAgdV9zaG9ydAorI2RlZmluZSBuZ3hfdG1fd2RheV90ICAgICAgICAgdV9zaG9ydAogCiAKLSNkZWZpbmUgbmd4X21zbGVlcCAgICAgICAgU2xlZXAKKyNkZWZpbmUgbmd4X21zbGVlcCAgICAgICAgICAgIFNsZWVwCiAKICNkZWZpbmUgTkdYX0hBVkVfR0VUVElNRVpPTkUgIDEKIAo=