ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCBhNGIwNzAwLi5iYWE5NTM3IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDYgKzIsNDggQEAKIENoYW5nZXMgc2luY2UgVS1Cb290IDEuMS40OgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisqIENvbnZlcnQgbWNjMjAwIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI4IEZlYiAyMDA2CisKKyogQWRkIGVudi12YXJpYWJsZSAidW5sb2NrIiB0byBoYW5kbGUgaW5pdGlhbCBzdGF0ZSBvZiBzZWN0b3JzCisgIChsb2NrZWQvdW5sb2NrZWQpLgorCisgIE9ubHkgdGhlIFUtQm9vdCBpbWFnZSBhbmQgaXQncyBlbnZpcm9ubWVudCBpcyBwcm90ZWN0ZWQsCisgIGFsbCBvdGhlciBzZWN0b3JzIGFyZSB1bnByb3RlY3RlZCAodW5sb2NrZWQpIGlmIGZsYXNoCisgIGhhcmR3YXJlIHByb3RlY3Rpb24gaXMgdXNlZCAoQ0ZHX0ZMQVNIX1BST1RFQ1RJT04pIGFuZAorICB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgInVubG9jayIgaXMgc2V0IHRvICJ5ZXMiLgorCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggRmViIDIwMDYKKworKiBVcGRhdGUgZHJpdmVycy9jZmlfZmxhc2guYzoKKyAgLSBmaW5kX3NlY3RvcigpIGNhbGxlZCBpbiBib3RoIHZlcnNpb25zIG9mIGZsYXNoX3dyaXRlX2NmaXdvcmQoKQorICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDI3dGggRmViIDIwMDYKKworKiBDRkkgc3VwcG9ydCBmb3IgYSB4OC94MTYgQU1EL1NwYW5zaW9uIGZsYXNoIGNvbmZpZ3VyZWQgaW4geDggbW9kZQorICBQYXRjaCBieSBKb3NlIE1hcmlhIExvcGV6LCAxNiBKYW4gMjAwNgorCisqIEFkZCBzdXBwb3J0IGZvciBBTUQvU3BhbnNpb24gRmxhc2hlcyBpbiBmbGFzaF93cml0ZV9jZmlidWZmZXIKKyAgUGF0Y2ggYnkgQWxleCBCYXN0b3MgYW5kIFRob21hcyBTY2hhZWZlciwgMjAwNS0wOC0yOQorCisqIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CisgIFdlICpzaG91bGQqIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3IgYml0cyBpZiB0aGUgcHJldmlvdXMgY2FsbAorICByZXR1cm5lZCBFUlJfT0sgKE90aGVyd2lzZSB3ZSB3aWxsIGhhdmUgb3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgaW4KKyAgZmxhc2hfc3RhdHVzX2NoZWNrKCkgYWxyZWFkeS4pICBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZCBvbmx5IGNoZWNrIGZvcgorICBlcnJvciBiaXRzIGlmIGZsYXNoX3N0YXR1c19jaGVjaygpIHJldHVybnMgRVJSX1RJTUVPVVQuCisgIFBhdGNoIGJ5IE1hcmN1cyBIYWxsLCAyMyBBdWcgMjAwNQorCisqIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CisgIC0gQWRkIENGR19GTEFTSF9QUk9URUNUX0NMRUFSIG9uIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKKyAgLSBQcm9oaWJpdCBidWZmZXIgd3JpdGUgd2hlbiBidWZmZXJfc2l6ZSBpcyAxIG9uIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKKyAgUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxOSBBdWcgMjAwNQorCisqIEZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgorICAtIEZpeCB3cm9uZyB0aW1lb3V0IHZhbHVlIHVzYWdlIGluIGZsYXNoX3N0YXR1c19jaGVjaygpCisgIC0gUm91bmQgd3JpdGVfdG91dCB1cCB3aGVuIGNvbnZlcnRpbmcgdG8gbXNlYyBpbiBmbGFzaF9nZXRfc2l6ZSgpCisgIC0gUmVtb3ZlIGNsZWFyaW5nIGZsYXNoIHN0YXR1cyBhdCB0aGUgZW5kIG9mIGZsYXNoX3dyaXRlX2NmaWJ1ZmZlcigpCisgICAgd2hpY2ggc2V0cyBJbnRlbCAyOEY2NDBKMyBmbGFzaCBiYWNrIHRvIGNvbW1hbmQgbW9kZSBvbiBDU0I0NzIKKyAgUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMDIgSnVseSAyMDA1CisKICogQWRkIGJhc2ljIHN1cHBvcnQgZm9yIHRoZSBTTU1BQ080IEJvYXJkIGZyb20gUGFuRGFDb20uCiAgIFBhdGNoIGJ5IEhlaWtvIFNjaG9jaGVyLCAyMCBGZWIgMjAwNgogCmRpZmYgLS1naXQgYS9ib2FyZC9tY2MyMDAvTWFrZWZpbGUgYi9ib2FyZC9tY2MyMDAvTWFrZWZpbGUKaW5kZXggMTYyNzM0Yi4uN2ZkYzA4OCAxMDA2NDQKLS0tIGEvYm9hcmQvbWNjMjAwL01ha2VmaWxlCisrKyBiL2JvYXJkL21jYzIwMC9NYWtlZmlsZQpAQCAtMjUsNyArMjUsNyBAQAogCiBMSUIJPSBsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubyBmbGFzaC5vCitPQkpTCTo9ICQoQk9BUkQpLm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL21jYzIwMC9mbGFzaC5jIGIvYm9hcmQvbWNjMjAwL2ZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMTc1N2EuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbWNjMjAwL2ZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MzggKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogS3lsZSBIYXJyaXMsIE5leHVzIFRlY2hub2xvZ2llcywgSW5jLiBraGFycmlzQG5leHVzLXRlY2gubmV0Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+Ci0jaW5jbHVkZSA8Zmxhc2guaD4KLQotLy8jIyNDSEQ6IGdlaPZydCB3aWVkZXIgcmF1cyBpc3Qgdm9tIFBYQTI3MSBmaWxlIQotI2RlZmluZSBGTEFTSF8yOEYyNTZMMThUIDB4MDBCMAkJLyogSW50ZWwgMjhGMjU2TDE4VCAoIDMyTSA9IDEyOEsgeCAyNTUgKyAzMmsgeCA0KSAqLwotI2RlZmluZSBGTEFTSF8yOEYyNTZMMThCIDB4MDBCMQkJLyogSW50ZWwgMjhGMjU2TDE4QiAoIDMyTSA9IDMyayB4IDQgKyAxMjhLIHggMjU1KSAgKi8KLSNkZWZpbmUgRkxBU0hfMjhGMjU2UDMwQiAweDAwMUMJCS8qIEludGVsIDI4RjI1NlAzMEIgKCAzMk0gPSAzMmsgeCA0ICsgMTI4SyB4IDI1NSkgICovCi0jZGVmaW5lIEZMQVNIXzI4RjI1NlAzMFQgMHgwMDE5CQkvKiBJbnRlbCAyOEYyNTZQMzBUICggMTI4SyB4IDI1NSArIDMyTSA9IDMyayB4IDQgKyAqLwotCi0jZGVmaW5lIElOVEVMX0lEXzI4RjAxNlMgICAgMHg2NmEwNjZhMAkvKiAyOEYwMTZTW1ZTXSBJRCAoMTZNID0gNTEyayB4IDE2KQkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEY4MDBCM1QgIDB4ODg5Mjg4OTIJLyogIDhNID0gNTEySyB4IDE2IHRvcCBib290IHNlY3RvcgkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEY4MDBCM0IgIDB4ODg5Mzg4OTMJLyogIDhNID0gNTEySyB4IDE2IGJvdHRvbSBib290IHNlY3RvcgkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYxNjBCM1QgIDB4ODg5MDg4OTAJLyogIDE2TSA9IDFNIHggMTYgdG9wIGJvb3Qgc2VjdG9yCSovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjE2MEIzQiAgMHg4ODkxODg5MQkvKiAgMTZNID0gMU0geCAxNiBib3R0b20gYm9vdCBzZWN0b3IJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMzIwQjNUICAweDg4OTY4ODk2CS8qICAzMk0gPSAyTSB4IDE2IHRvcCBib290IHNlY3RvcgkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYzMjBCM0IgIDB4ODg5Nzg4OTcJLyogIDMyTSA9IDJNIHggMTYgYm90dG9tIGJvb3Qgc2VjdG9yCSovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjY0MEIzVCAgMHg4ODk4ODg5OAkvKiAgNjRNID0gNE0geCAxNiB0b3AgYm9vdCBzZWN0b3IJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGNjQwQjNCICAweDg4OTk4ODk5CS8qICA2NE0gPSA0TSB4IDE2IGJvdHRvbSBib290IHNlY3RvcgkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYxNjBGM0IgIDB4ODhGNDg4RjQJLyogIDE2TSA9IDFNIHggMTYgYm90dG9tIGJvb3Qgc2VjdG9yCSovCi0KLSNkZWZpbmUgSU5URUxfSURfMjhGODAwQzNUICAweDg4QzA4OEMwCS8qICA4TSA9IDUxMksgeCAxNiB0b3AgYm9vdCBzZWN0b3IJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGODAwQzNCICAweDg4QzE4OEMxCS8qICA4TSA9IDUxMksgeCAxNiBib3R0b20gYm9vdCBzZWN0b3IJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMTYwQzNUICAweDg4QzI4OEMyCS8qICAxNk0gPSAxTSB4IDE2IHRvcCBib290IHNlY3RvcgkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYxNjBDM0IgIDB4ODhDMzg4QzMJLyogIDE2TSA9IDFNIHggMTYgYm90dG9tIGJvb3Qgc2VjdG9yCSovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjMyMEMzVCAgMHg4OEM0ODhDNAkvKiAgMzJNID0gMk0geCAxNiB0b3AgYm9vdCBzZWN0b3IJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMzIwQzNCICAweDg4QzU4OEM1CS8qICAzMk0gPSAyTSB4IDE2IGJvdHRvbSBib290IHNlY3RvcgkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEY2NDBDM1QgIDB4ODhDQzg4Q0MJLyogIDY0TSA9IDRNIHggMTYgdG9wIGJvb3Qgc2VjdG9yCSovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjY0MEMzQiAgMHg4OENEODhDRAkvKiAgNjRNID0gNE0geCAxNiBib3R0b20gYm9vdCBzZWN0b3IJKi8KLQotI2RlZmluZSBJTlRFTF9JRF8yOEYxMjhKMyAgIDB4ODkxODg5MTgJLyogIDE2TSA9IDhNIHggMTYgeCAxMjggKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMzIwSjUgICAweDAwMTQwMDE0CS8qICAzMk0gPSAxMjhLIHggIDMyCSovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjY0MEo1ICAgMHgwMDE1MDAxNQkvKiAgNjRNID0gMTI4SyB4ICA2NAkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYzMjBKM0EgIDB4MDAxNjAwMTYJLyogIDMyTSA9IDEyOEsgeCAgMzIJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGNjQwSjNBICAweDAwMTcwMDE3CS8qICA2NE0gPSAxMjhLIHggIDY0CSovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjI1NkwxOCAgMHg4ODEwODgxMAkvKiAgMzJNID0gMTI4SyB4IDI1NQkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYxMjhKM0EgIDB4MDAxODAwMTgJLyogMTI4TSA9IDEyOEsgeCAxMjgJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMjU2TDE4VCAweDg4MEQ4ODBECS8qIDI1Nk0gPSAxMjhLIHggMjU1ICsgMzJrIHggNCAqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYyNTZMMThCIDB4ODgxMDg4MTAJLyogMjU2TSA9ICAzMmsgeCA0ICAgKyAxMjhLIHggMjU1ICovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjI1NlAzMEIgMHg4OTFDODkxQwkvKiAyNTZNID0gIDMyayB4IDQgICArIDEyOEsgeCAyNTUgKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMjU2UDMwVCAweDg5MTk4OTE5CS8qIDI1Nk0gPSAgMTI4SyB4IDI1NSArIDMyayB4IDQgKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGNjRLMyAgICAweDg4MDE4ODAxCS8qICA2NE0gPSAgMzJLIHggMjU1ICsgMzJrIHggNCAqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYxMjhLMyAgIDB4ODgwMjg4MDIJLyogMTI4TSA9ICA2NEsgeCAyNTUgKyAzMmsgeCA0ICovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjI1NkszICAgMHg4ODAzODgwMwkvKiAyNTZNID0gMTI4SyB4IDI1NSArIDMyayB4IDQgKi8KLQotI2RlZmluZSBJTlRFTF9JRF8yOEYxNjBTMyAgIDB4MDBEMDAwRDAJLyogIDE2TSA9IDUxMksgeCAgMzIgKDY0a0IgeCAzMikJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMzIwUzMgICAweDAwRDQwMEQ0CS8qICAzMk0gPSA1MTJLIHggIDY0ICg2NGtCIHggNjQpCSovCi0KLQotZmxhc2hfaW5mb190IGZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LU107CS8qIGluZm8gZm9yIEZMQVNIIGNoaXBzICAgICovCi0KLS8qIEJvYXJkIHN1cHBvcnQgZm9yIDEgb3IgMiBmbGFzaCBkZXZpY2VzICovCi0jZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEgzMgotI3VuZGVmIEZMQVNIX1BPUlRfV0lEVEgxNgotCi0jaWZkZWYgRkxBU0hfUE9SVF9XSURUSDE2Ci0jZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEgJCXVzaG9ydAotI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRIVgkJdnVfc2hvcnQKLSNkZWZpbmUgU1dBUCh4KSAgICAgICAgICAgICAgIAkJKHgpCi0jZWxzZQotI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRICQl1bG9uZwotI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRIVgkJdnVfbG9uZwotI2RlZmluZSBTV0FQKHgpICAgICAgICAgICAgICAgCQkoeCkKLSNlbmRpZgotCi0vKiBJbnRlbC1jb21wYXRpYmxlIGZsYXNoIElEICovCi0jZGVmaW5lIElOVEVMX0NPTVBBVCAgMHgwMDg5MDA4OQotI2RlZmluZSBJTlRFTF9BTFQgICAgIDB4MDBCMDAwQjAKLQotCi0KLS8qIEludGVsLWNvbXBhdGlibGUgZmxhc2ggY29tbWFuZHMgKi8KLSNkZWZpbmUgSU5URUxfUFJPR1JBTSAweDAwMTAwMDEwCi0jZGVmaW5lIElOVEVMX0VSQVNFICAgMHgwMDIwMDAyMAotI2RlZmluZSBJTlRFTF9DTEVBUiAgIDB4MDA1MDAwNTAKLSNkZWZpbmUgSU5URUxfTE9DS0JJVCAweDAwNjAwMDYwCi0jZGVmaW5lIElOVEVMX1BST1RFQ1QgMHgwMDAxMDAwMQotI2RlZmluZSBJTlRFTF9TVEFUVVMgIDB4MDA3MDAwNzAKLSNkZWZpbmUgSU5URUxfUkVBRElEICAweDAwOTAwMDkwCi0jZGVmaW5lIElOVEVMX0NPTkZJUk0gMHgwMEQwMDBEMAotI2RlZmluZSBJTlRFTF9SRVNFVCAgIDB4RkZGRkZGRkYKLQotLyogSW50ZWwtY29tcGF0aWJsZSBmbGFzaCBzdGF0dXMgYml0cyAqLwotI2RlZmluZSBJTlRFTF9GSU5JU0hFRCAweDAwODAwMDgwCi0jZGVmaW5lIElOVEVMX09LICAgICAgIDB4MDA4MDAwODAKLQotI2RlZmluZSBGUFcJICAgRkxBU0hfUE9SVF9XSURUSAotI2RlZmluZSBGUFdWICAgRkxBU0hfUE9SVF9XSURUSFYKLQotI2RlZmluZSBtYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgiIiA6IDogOiAibWVtb3J5IikKLQotLy8vIyMjQ0hEOiBhdWNoIHdpZWRlciByYXVzISArIHN3aXRjaCBhbndlaXN1bmcgZvxyIGRlbiBQMzBpZ2VyIQotLyogRmxhc2ggT3JnYW5pemF0aW9uIFN0cnVjdHVyZSAqLwotdHlwZWRlZiBzdHJ1Y3QgT3JnRGVmIHsKLQl1bnNpZ25lZCBpbnQgc2VjdG9yX251bWJlcjsKLQl1bnNpZ25lZCBpbnQgc2VjdG9yX3NpemU7Ci19IE9yZ0RlZjsKLQotLyogRmxhc2ggT3JnYW5pemF0aW9ucyAqLwotT3JnRGVmIE9yZ0ludGVsXzI4RjI1NkwxOEJbXSA9IHsKLQl7NCwgMHg4MDAwfSwJCQkvKiA0ICogMzJrQnl0ZXMgc2VjdG9ycyAqLwotCXsyNTUsIDB4MjAwMDB9LAkJCS8qIDI1NSAqIDEyOGtCeXRlcyBzZWN0b3JzICovCi19OwotCi1PcmdEZWYgT3JnSW50ZWxfMjhGMjU2TDE4VFtdID0gewotCXsyNTUsIDB4MjAwMDB9LAkJCS8qIDI1NSAqIDEyOGtCeXRlcyBzZWN0b3JzICovCi0JezQsIDB4ODAwMH0JCQkvKiA0ICogMzJrQnl0ZXMgc2VjdG9ycyAqLwotfTsKLQotT3JnRGVmIE9yZ0ludGVsXzI4RjEyOEozQVtdID0gewotCXsxMjgsIDB4MjAwMDB9LAkJCS8qIDEyOCAqIDEyOGtCeXRlcyBzZWN0b3JzICovCi19Owotc3RhdGljIHVuc2lnbmVkIGludCBPcmdTZWN0VHlwZU51bV8yOEYyNTZMMTggPSAyOwotc3RhdGljIHVuc2lnbmVkIGludCBPcmdTZWN0VHlwZU51bV8yOEYyNTZKMyA9IDE7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZ1bmN0aW9ucwotICovCi1zdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKEZQVyAqYWRkciwgZmxhc2hfaW5mb190ICppbmZvKTsKLXN0YXRpYyBpbnQgd3JpdGVfZGF0YSAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCBGUFcgZGF0YSk7Ci1zdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyAodWxvbmcgYmFzZSwgZmxhc2hfaW5mb190ICppbmZvKTsKLXZvaWQgaW5saW5lIHNwaW5fd2hlZWwgKHZvaWQpOwotc3RhdGljIHZvaWQgZmxhc2hfc3luY19yZWFsX3Byb3RlY3QgKGZsYXNoX2luZm9fdCAqIGluZm8pOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgaW50ZWxfc2VjdG9yX3Byb3RlY3RlZCAoZmxhc2hfaW5mb190ICppbmZvLCB1c2hvcnQgc2VjdG9yKTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLXVuc2lnbmVkIGxvbmcgZmxhc2hfaW5pdCAodm9pZCkKLXsKLQlpbnQgaTsKLQl1bG9uZyBzaXplID0gMDsKLQlleHRlcm4gdm9pZCBmbGFzaF9wcmVpbml0KHZvaWQpOwotCWV4dGVybiB2b2lkIGZsYXNoX2FmdGVyaW5pdCh1bG9uZywgdWxvbmcpOwotCXVsb25nIGZsYXNoYmFzZSA9IENGR19GTEFTSF9CQVNFOwotCi0JZmxhc2hfcHJlaW5pdCgpOwotCi0JZm9yIChpID0gMDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7IGkrKykgewotCQlzd2l0Y2ggKGkpIHsKLQkJY2FzZSAwOgotCQkJbWVtc2V0KCZmbGFzaF9pbmZvW2ldLCAwLCBzaXplb2YoZmxhc2hfaW5mb190KSk7Ci0JCQlmbGFzaF9nZXRfc2l6ZSAoKEZQVyAqKSBmbGFzaGJhc2UsICZmbGFzaF9pbmZvW2ldKTsKLQkJCWZsYXNoX2dldF9vZmZzZXRzIChmbGFzaF9pbmZvW2ldLnN0YXJ0WzBdLCAmZmxhc2hfaW5mb1tpXSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXBhbmljICgiY29uZmlndXJlZCB0byBtYW55IGZsYXNoIGJhbmtzIVxuIik7Ci0JCQlicmVhazsKLQkJfQotCQlzaXplICs9IGZsYXNoX2luZm9baV0uc2l6ZTsKLQotCQkvKiBnZXQgdGhlIGgvdyBhbmQgcy93IHByb3RlY3Rpb24gc3RhdHVzIGluIHN5bmMgKi8KLQkJZmxhc2hfc3luY19yZWFsX3Byb3RlY3QoJmZsYXNoX2luZm9baV0pOwotCX0KLQotCS8qIFByb3RlY3QgbW9uaXRvciBhbmQgZW52aXJvbm1lbnQgc2VjdG9ycwotCSAqLwotI2lmIENGR19NT05JVE9SX0JBU0UgPj0gQ0ZHX0ZMQVNIX0JBU0UKLSNpZm5kZWYgQ09ORklHX0JPT1RfUk9NCi0JZmxhc2hfcHJvdGVjdCAoIEZMQUdfUFJPVEVDVF9TRVQsCi0JCQlDRkdfTU9OSVRPUl9CQVNFLAotCQkJQ0ZHX01PTklUT1JfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKLQkJCSZmbGFzaF9pbmZvWzBdICk7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYJQ0ZHX0VOVl9JU19JTl9GTEFTSAotCWZsYXNoX3Byb3RlY3QgKCBGTEFHX1BST1RFQ1RfU0VULAotCQkJQ0ZHX0VOVl9BRERSLAotCQkJQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TSVpFIC0gMSwgJmZsYXNoX2luZm9bMF0gKTsKLSNlbmRpZgotCi0JZmxhc2hfYWZ0ZXJpbml0KGZsYXNoX2luZm9bMF0uc3RhcnRbMF0sIGZsYXNoX2luZm9bMF0uc2l6ZSk7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyAodWxvbmcgYmFzZSwgZmxhc2hfaW5mb190ICppbmZvKQotewotCWludCBpOwotCi0JaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJcmV0dXJuOwotCX0KLQotCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0lOVEVMKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgewotCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiBQSFlTX0ZMQVNIX1NFQ1RfU0laRSk7Ci0JCX0KLQl9Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotdm9pZCBmbGFzaF9wcmludF9pbmZvIChmbGFzaF9pbmZvX3QgKmluZm8pCi17Ci0JaW50IGk7Ci0KLQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKLQljYXNlIEZMQVNIX01BTl9JTlRFTDoKLQkJcHJpbnRmICgiSU5URUwgIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKLQljYXNlIEZMQVNIXzI4RjEyOEozQToKLQkJcHJpbnRmICgiMjhGMTI4SjNBXG4iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZMQVNIXzI4RjY0MEozQToKLQkJcHJpbnRmICgiMjhGNjQwSjNBXG4iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZMQVNIXzI4RjMyMEozQToKLQkJcHJpbnRmICgiMjhGMzIwSjNBXG4iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZMQVNIXzI4RjI1NlAzMFQ6Ci0JCXByaW50ZiAoIkZMQVNIXzI4RjI1NlAzMFRcbiIpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByaW50ZiAoIlVua25vd24gQ2hpcCBUeXBlXG4iKTsKLQkJYnJlYWs7Ci0JfQotCi0JcHJpbnRmICgiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKLQkJCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7Ci0KLQlwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7Ci0JZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSB7Ci0JCWlmICgoaSAlIDUpID09IDApCi0JCQlwcmludGYgKCJcbiAgICIpOwotCQlwcmludGYgKCIgJTA4bFglcyIsCi0JCQlpbmZvLT5zdGFydFtpXSwKLQkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7Ci0JfQotCXByaW50ZiAoIlxuIik7Ci0JcmV0dXJuOwotfQotCi0vKgotICogVGhlIGZvbGxvd2luZyBjb2RlIGNhbm5vdCBiZSBydW4gZnJvbSBGTEFTSCEKLSAqLwotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplIChGUFcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQl2b2xhdGlsZSBGUFcgdmFsdWU7Ci0KLQkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kOiByZWFkIE1hbnVmYWN0dXJlciBJRCAqLwotCWFkZHJbMHg1NTU1XSA9IChGUFcpIDB4MDBBQTAwQUE7Ci0JYWRkclsweDJBQUFdID0gKEZQVykgMHgwMDU1MDA1NTsKLQlhZGRyWzB4NTU1NV0gPSAoRlBXKSAweDAwOTAwMDkwOwotCi0JbWIgKCk7Ci0JdWRlbGF5KDEwMCk7Ci0KLQl2YWx1ZSA9IGFkZHJbMF07Ci0KLQlzd2l0Y2ggKHZhbHVlKSB7Ci0KLQljYXNlIChGUFcpIElOVEVMX01BTlVGQUNUOgotCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9JTlRFTDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7Ci0JCWluZm8tPnNpemUgPSAwOwotCQlhZGRyWzBdID0gKEZQVykgMHgwMEZGMDBGRjsJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KLQkJcmV0dXJuICgwKTsJCQkvKiBubyBvciB1bmtub3duIGZsYXNoICAqLwotCX0KLQotCW1iICgpOwotCXZhbHVlID0gYWRkclsxXTsJCQkvKiBkZXZpY2UgSUQgICAgICAgICovCi0KLQlzd2l0Y2ggKHZhbHVlKSB7Ci0KLQljYXNlIChGUFcpIElOVEVMX0lEXzI4RjEyOEozQToKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGMTI4SjNBOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxMjg7Ci0JCWluZm8tPnNpemUgPSAweDAyMDAwMDAwOwotCQlpbmZvLT5zdGFydFswXSA9IENGR19GTEFTSF9CQVNFOwotCQlicmVhazsJCQkJLyogPT4gMzIgTUIgICAgICovCi0KLQljYXNlIChGUFcpIElOVEVMX0lEXzI4RjY0MEozQToKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGNjQwSjNBOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSA2NDsKLQkJaW5mby0+c2l6ZSA9IDB4MDEwMDAwMDA7Ci0JCWluZm8tPnN0YXJ0WzBdID0gQ0ZHX0ZMQVNIX0JBU0UgKyAweDAxMDAwMDAwOwotCQlicmVhazsJCQkJLyogPT4gMTYgTUIgICAgICovCi0KLQljYXNlIChGUFcpIChJTlRFTF9JRF8yOEYyNTZQMzBUKToKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGMjU2TDE4QjsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMTI4Oy8vZmFsc2NoISEhCi0JCWluZm8tPnNpemUgPSAweDAyMDAwMDAwOwotCQlpbmZvLT5zdGFydFswXSA9IENGR19GTEFTSF9CQVNFOwotCQlkZWJ1ZyAoIkludGVsIFN0cmF0YUZsYXNoIDI4RjI1NlAzMFQgZGV2aWNlIGluaXRpYWxpemVkXG4iKTsKLQkJYnJlYWs7CQkJLyogPT4gMzIgTUIJKi8KLQotCWNhc2UgKEZQVykgSU5URUxfSURfMjhGMzIwSjNBOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEYzMjBKM0E7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDMyOwotCQlpbmZvLT5zaXplID0gMHg4MDAwMDA7Ci0JCWluZm8tPnN0YXJ0WzBdID0gQ0ZHX0ZMQVNIX0JBU0UgKyAweDAxODAwMDAwOwotCQlicmVhazsJCQkJLyogPT4gOCBNQiAgICAgKi8KLQotCWRlZmF1bHQ6Ci0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGluZm8tPnNlY3Rvcl9jb3VudCA+IENGR19NQVhfRkxBU0hfU0VDVCkgewotCQlwcmludGYgKCIqKiBFUlJPUjogc2VjdG9yIGNvdW50ICVkID4gbWF4ICglZCkgKipcbiIsCi0JCQlpbmZvLT5zZWN0b3JfY291bnQsIENGR19NQVhfRkxBU0hfU0VDVCk7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IENGR19NQVhfRkxBU0hfU0VDVDsKLQl9Ci0KLQlhZGRyWzBdID0gKEZQVykgMHgwMEZGMDBGRjsJCS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCi0KLQlyZXR1cm4gKGluZm8tPnNpemUpOwotfQotCi0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHUtYm9vdCBmbGFzaCBzZWN0b3IgcHJvdGVjdGlvbiBzdGF0dXMKLSAqIChmbGFzaF9pbmZvX3QucHJvdGVjdFtdKSBpbiBzeW5jIHdpdGggdGhlIHNlY3RvciBwcm90ZWN0aW9uCi0gKiBzdGF0dXMgc3RvcmVkIGluIGhhcmR3YXJlLgotICovCi1zdGF0aWMgdm9pZCBmbGFzaF9zeW5jX3JlYWxfcHJvdGVjdCAoZmxhc2hfaW5mb190ICogaW5mbykKLXsKLQlpbnQgaTsKLQotCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewotCi0JY2FzZSBGTEFTSF8yOEYxMjhKM0E6Ci0JY2FzZSBGTEFTSF8yOEY2NDBKM0E6Ci0JY2FzZSBGTEFTSF8yOEYzMjBKM0E6Ci0JCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgewotCQkJaW5mby0+cHJvdGVjdFtpXSA9IGludGVsX3NlY3Rvcl9wcm90ZWN0ZWQoaW5mbywgaSk7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogbm8gaC93IHByb3RlY3Qgc3VwcG9ydCAqLwotCQlicmVhazsKLQl9Ci19Ci0KLQotLyoKLSAqIGNoZWNrcyBpZiAic2VjdG9yIiBpbiBiYW5rICJpbmZvIiBpcyBwcm90ZWN0ZWQuIFNob3VsZCB3b3JrIG9uIGludGVsCi0gKiBzdHJhdGEgZmxhc2ggY2hpcHMgMjhGeHh4SjN4IGluIDgtYml0IG1vZGUuCi0gKiBSZXR1cm5zIDEgaWYgc2VjdG9yIGlzIHByb3RlY3RlZCAob3IgdGltZWQtb3V0IHdoaWxlIHRyeWluZyB0byByZWFkCi0gKiBwcm90ZWN0aW9uIHN0YXR1cyksIDAgaWYgaXQgaXMgbm90LgotICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBpbnRlbF9zZWN0b3JfcHJvdGVjdGVkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVzaG9ydCBzZWN0b3IpCi17Ci0JRlBXViAqYWRkcjsKLQlGUFdWICpsb2NrX2NvbmZfYWRkcjsKLQl1bG9uZyBzdGFydDsKLQl1bnNpZ25lZCBjaGFyIHJldDsKLQotCS8qCi0JICogZmlyc3QsIHdhaXQgZm9yIHRoZSBXU00gdG8gYmUgZmluaXNoZWQuIFRoZSByYXRpb25hbGUgZm9yCi0JICogd2FpdGluZyBmb3IgdGhlIFdTTSB0byBiZWNvbWUgaWRsZSBmb3IgYXQgbW9zdAotCSAqIENGR19GTEFTSF9FUkFTRV9UT1VUIGlzIGFzIGZvbGxvd3MuIFRoZSBXU00gY2FuIGJlIGJ1c3kKLQkgKiBiZWNhdXNlIG9mOiAoMSkgZXJhc2UsICgyKSBwcm9ncmFtIG9yICgzKSBsb2NrIGJpdAotCSAqIGNvbmZpZ3VyYXRpb24uIFNvIHdlIGp1c3Qgd2FpdCBmb3IgdGhlIGxvbmdlc3QgdGltZW91dCBvZgotCSAqIHRoZSAoMSktKDMpLCBpLmUuIHRoZSBlcmFzZSB0aW1lb3V0LgotCSAqLwotCi0JLyogd2FpdCBhdCBsZWFzdCAzNW5zIChXMTIpIGJlZm9yZSBpc3N1aW5nIFJlYWQgU3RhdHVzIFJlZ2lzdGVyICovCi0JdWRlbGF5KDEpOwotCWFkZHIgPSAoRlBXViAqKSBpbmZvLT5zdGFydFtzZWN0b3JdOwotCSphZGRyID0gKEZQVykgSU5URUxfU1RBVFVTOwotCi0Jc3RhcnQgPSBnZXRfdGltZXIgKDApOwotCXdoaWxlICgoKmFkZHIgJiAoRlBXKSBJTlRFTF9GSU5JU0hFRCkgIT0gKEZQVykgSU5URUxfRklOSVNIRUQpIHsKLQkJaWYgKGdldF90aW1lciAoc3RhcnQpID4gQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKLQkJCSphZGRyID0gKEZQVykgSU5URUxfUkVTRVQ7IC8qIHJlc3RvcmUgcmVhZCBtb2RlICovCi0JCQlwcmludGYoIldTTSBidXN5IHRvbyBsb25nLCBjYW4ndCBnZXQgcHJvdCBzdGF0dXNcbiIpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0KLQkvKiBpc3N1ZSB0aGUgUmVhZCBJZGVudGlmaWVyIENvZGVzIGNvbW1hbmQgKi8KLQkqYWRkciA9IChGUFcpIElOVEVMX1JFQURJRDsKLQotCS8qIHdhaXQgYXQgbGVhc3QgMzVucyAoVzEyKSBiZWZvcmUgcmVhZGluZyAqLwotCXVkZWxheSgxKTsKLQotCS8qIEludGVsIGV4YW1wbGUgY29kZSB1c2VzIG9mZnNldCBvZiAyIGZvciAxNiBiaXQgZmxhc2ggKi8KLQlsb2NrX2NvbmZfYWRkciA9IChGUFdWICopIGluZm8tPnN0YXJ0W3NlY3Rvcl0gKyAyOwotCXJldCA9ICgqbG9ja19jb25mX2FkZHIgJiAoRlBXKSBJTlRFTF9QUk9URUNUKSA/IDEgOiAwOwotCi0JLyogcHV0IGZsYXNoIGJhY2sgaW4gcmVhZCBtb2RlICovCi0JKmFkZHIgPSAoRlBXKSBJTlRFTF9SRVNFVDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi1pbnQgZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCi17Ci0JaW50IGZsYWcsIHByb3QsIHNlY3Q7Ci0JdWxvbmcgdHlwZSwgc3RhcnQsIGxhc3Q7Ci0JaW50IHJjb2RlID0gMDsKLQotCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgewotCQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCQkJcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7Ci0JCX0KLQkJcmV0dXJuIDE7Ci0JfQotCi0JdHlwZSA9IChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKTsKLQlpZiAoKHR5cGUgIT0gRkxBU0hfTUFOX0lOVEVMKSkgewotCQlwcmludGYgKCJDYW4ndCBlcmFzZSB1bmtub3duIGZsYXNoIHR5cGUgJTA4bHggLSBhYm9ydGVkXG4iLAotCQkJaW5mby0+Zmxhc2hfaWQpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlwcm90ID0gMDsKLQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgKytzZWN0KSB7Ci0JCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7Ci0JCQlwcm90Kys7Ci0JCX0KLQl9Ci0KLQlpZiAocHJvdCkgewotCQlwcmludGYgKCItIFdhcm5pbmc6ICVkIHByb3RlY3RlZCBzZWN0b3JzIHdpbGwgbm90IGJlIGVyYXNlZCFcbiIsCi0JCQlwcm90KTsKLQl9IGVsc2UgewotCQlwcmludGYgKCJcbiIpOwotCX0KLQotCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKLQlsYXN0ID0gc3RhcnQ7Ci0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzICgpOwotCi0JLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLwotCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyBzZWN0KyspIHsKLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewkvKiBub3QgcHJvdGVjdGVkICovCi0JCQlGUFdWICphZGRyID0gKEZQV1YgKikgKGluZm8tPnN0YXJ0W3NlY3RdKTsKLQkJCUZQVyBzdGF0dXM7Ci0KLQkJCXByaW50ZiAoIkVyYXNpbmcgc2VjdG9yICUyZCAuLi4gIiwgc2VjdCk7Ci0KLQkJCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCi0JCQlzdGFydCA9IGdldF90aW1lcigwKTsKLQotCQkJKmFkZHIgPSAoRlBXKSAweDAwNTAwMDUwOwkvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgKi8KLQkJCSphZGRyID0gKEZQVykgMHgwMDIwMDAyMDsJLyogZXJhc2Ugc2V0dXAgKi8KLQkJCSphZGRyID0gKEZQVykgMHgwMEQwMDBEMDsJLyogZXJhc2UgY29uZmlybSAqLwotCi0JCQl3aGlsZSAoKChzdGF0dXMgPSAqYWRkcikgJiAoRlBXKSAweDAwODAwMDgwKSAhPSAoRlBXKSAweDAwODAwMDgwKSB7Ci0JCQkJaWYgKGdldF90aW1lcihzdGFydCkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgewotCQkJCQlwcmludGYgKCJUaW1lb3V0XG4iKTsKLQkJCQkJKmFkZHIgPSAoRlBXKSAweDAwQjAwMEIwOwkvKiBzdXNwZW5kIGVyYXNlICAgICAqLwotCQkJCQkqYWRkciA9IChGUFcpIDB4MDBGRjAwRkY7CS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLwotCQkJCQlyY29kZSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJKmFkZHIgPSAweDAwNTAwMDUwOwkvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgY21kLiAgICovCi0JCQkqYWRkciA9IDB4MDBGRjAwRkY7CS8qIHJlc2VzdCB0byByZWFkIG1vZGUgICAgICAgICAgKi8KLQotCQkJcHJpbnRmICgiIGRvbmVcbiIpOwotCQl9Ci0JfQotCXJldHVybiByY29kZTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29weSBtZW1vcnkgdG8gZmxhc2gsIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICogNCAtIEZsYXNoIG5vdCBpZGVudGlmaWVkCi0gKi8KLQotaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqaW5mbywgdWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQotewotCXVsb25nIGNwLCB3cDsKLQlGUFcgZGF0YTsKLQlpbnQgY291bnQsIGksIGwsIHJjLCBwb3J0X3dpZHRoOwotCi0JaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJcmV0dXJuIDQ7Ci0JfQotLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCi0jaWZkZWYgRkxBU0hfUE9SVF9XSURUSDE2Ci0Jd3AgPSAoYWRkciAmIH4xKTsKLQlwb3J0X3dpZHRoID0gMjsKLSNlbHNlCi0Jd3AgPSAoYWRkciAmIH4zKTsKLQlwb3J0X3dpZHRoID0gNDsKLSNlbmRpZgotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHN0YXJ0IGJ5dGVzCi0JICovCi0JaWYgKChsID0gYWRkciAtIHdwKSAhPSAwKSB7Ci0JCWRhdGEgPSAwOwotCQlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgbDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKSBjcCk7Ci0JCX0KLQkJZm9yICg7IGkgPCBwb3J0X3dpZHRoICYmIGNudCA+IDA7ICsraSkgewotCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotCQkJLS1jbnQ7Ci0JCQkrK2NwOwotCQl9Ci0JCWZvciAoOyBjbnQgPT0gMCAmJiBpIDwgcG9ydF93aWR0aDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKSBjcCk7Ci0JCX0KLQotCQlpZiAoKHJjID0gd3JpdGVfZGF0YSAoaW5mbywgd3AsIFNXQVAgKGRhdGEpKSkgIT0gMCkgewotCQkJcmV0dXJuIChyYyk7Ci0JCX0KLQkJd3AgKz0gcG9ydF93aWR0aDsKLQl9Ci0KLQkvKgotCSAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAotCSAqLwotCWNvdW50ID0gMDsKLQl3aGlsZSAoY250ID49IHBvcnRfd2lkdGgpIHsKLQkJZGF0YSA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBwb3J0X3dpZHRoOyArK2kpIHsKLQkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLQkJfQotCQlpZiAoKHJjID0gd3JpdGVfZGF0YSAoaW5mbywgd3AsIFNXQVAgKGRhdGEpKSkgIT0gMCkgewotCQkJcmV0dXJuIChyYyk7Ci0JCX0KLQkJd3AgKz0gcG9ydF93aWR0aDsKLQkJY250IC09IHBvcnRfd2lkdGg7Ci0JCWlmIChjb3VudCsrID4gMHg4MDApIHsKLQkJCXNwaW5fd2hlZWwgKCk7Ci0JCQljb3VudCA9IDA7Ci0JCX0KLQl9Ci0KLQlpZiAoY250ID09IDApIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci0KLQkvKgotCSAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcwotCSAqLwotCWRhdGEgPSAwOwotCWZvciAoaSA9IDAsIGNwID0gd3A7IGkgPCBwb3J0X3dpZHRoICYmIGNudCA+IDA7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0JCS0tY250OwotCX0KLQlmb3IgKDsgaSA8IHBvcnRfd2lkdGg7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKSBjcCk7Ci0JfQotCi0JcmV0dXJuICh3cml0ZV9kYXRhIChpbmZvLCB3cCwgU1dBUCAoZGF0YSkpKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogV3JpdGUgYSB3b3JkIG9yIGhhbGZ3b3JkIHRvIEZsYXNoLCByZXR1cm5zOgotICogMCAtIE9LCi0gKiAxIC0gd3JpdGUgdGltZW91dAotICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqLwotc3RhdGljIGludCB3cml0ZV9kYXRhIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIEZQVyBkYXRhKQotewotCUZQV1YgKmFkZHIgPSAoRlBXViAqKSBkZXN0OwotCXVsb25nIHN0YXR1czsKLQl1bG9uZyBzdGFydDsKLQlpbnQgZmxhZzsKLQotCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwotCWlmICgoKmFkZHIgJiBkYXRhKSAhPSBkYXRhKSB7Ci0JCXByaW50ZiAoIm5vdCBlcmFzZWQgYXQgJTA4bHggKCVseClcbiIsICh1bG9uZykgYWRkciwgKmFkZHIpOwotCQlyZXR1cm4gKDIpOwotCX0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzICgpOwotCi0JKmFkZHIgPSAoRlBXKSAweDAwNDAwMDQwOwkvKiB3cml0ZSBzZXR1cCAqLwotCSphZGRyID0gZGF0YTsKLQotCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCi0Jc3RhcnQgPSBnZXRfdGltZXIoMCk7Ci0KLQkvKiB3YWl0IHdoaWxlIHBvbGxpbmcgdGhlIHN0YXR1cyByZWdpc3RlciAqLwotCXdoaWxlICgoKHN0YXR1cyA9ICphZGRyKSAmIChGUFcpIDB4MDA4MDAwODApICE9IChGUFcpIDB4MDA4MDAwODApIHsKLQkJaWYgKGdldF90aW1lcihzdGFydCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgewotCQkJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLwotCQkJcmV0dXJuICgxKTsKLQkJfQotCX0KLQotCSphZGRyID0gKEZQVykgMHgwMEZGMDBGRjsJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KLQotCXJldHVybiAoMCk7Ci19Ci0KLXZvaWQgaW5saW5lIHNwaW5fd2hlZWwgKHZvaWQpCi17Ci0Jc3RhdGljIGludCBwID0gMDsKLQlzdGF0aWMgY2hhciB3W10gPSAiXFwvLSI7Ci0KLQlwcmludGYgKCJcMDEwJWMiLCB3W3BdKTsKLQkoKytwID09IDMpID8gKHAgPSAwKSA6IDA7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNldC9DbGVhciBzZWN0b3IncyBsb2NrIGJpdCwgcmV0dXJuczoKLSAqIDAgLSBPSwotICogMSAtIEVycm9yICh0aW1lb3V0LCB2b2x0YWdlIHByb2JsZW1zLCBldGMuKQotICovCi1pbnQgZmxhc2hfcmVhbF9wcm90ZWN0IChmbGFzaF9pbmZvX3QgKmluZm8sIGxvbmcgc2VjdG9yLCBpbnQgcHJvdCkKLXsKLQl1bG9uZyBzdGFydDsKLQlpbnQgaTsKLQlpbnQgcmMgPSAwOwotCXZ1X2xvbmcgKmFkZHIgPSAodnVfbG9uZyAqKShpbmZvLT5zdGFydFtzZWN0b3JdKTsKLQlpbnQgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwotCi0JKmFkZHIgPSBJTlRFTF9DTEVBUjsJLyogQ2xlYXIgc3RhdHVzIHJlZ2lzdGVyICovCi0JaWYgKHByb3QpIHsJCQkvKiBTZXQgc2VjdG9yIGxvY2sgYml0ICovCi0JCSphZGRyID0gSU5URUxfTE9DS0JJVDsJLyogU2VjdG9yIGxvY2sgYml0ICovCi0JCSphZGRyID0gSU5URUxfUFJPVEVDVDsJLyogc2V0ICovCi0JfQotCWVsc2UgewkJCQkvKiBDbGVhciBzZWN0b3IgbG9jayBiaXQgKi8KLQkJKmFkZHIgPSBJTlRFTF9MT0NLQklUOwkvKiBBbGwgc2VjdG9ycyBsb2NrIGJpdHMgKi8KLQkJKmFkZHIgPSBJTlRFTF9DT05GSVJNOwkvKiBjbGVhciAqLwotCX0KLQotCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOwotCi0Jd2hpbGUgKCgqYWRkciAmIElOVEVMX0ZJTklTSEVEKSAhPSBJTlRFTF9GSU5JU0hFRCkgewotCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9VTkxPQ0tfVE9VVCkgewotCQkJcHJpbnRmKCJGbGFzaCBsb2NrIGJpdCBvcGVyYXRpb24gdGltZWQgb3V0XG4iKTsKLQkJCXJjID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCphZGRyICE9IElOVEVMX09LKSB7Ci0JCXByaW50ZigiRmxhc2ggbG9jayBiaXQgb3BlcmF0aW9uIGZhaWxlZCBhdCAlMDhYLCBDU1I9JTA4WFxuIiwKLQkJICAgICAgICh1aW50KWFkZHIsICh1aW50KSphZGRyKTsKLQkJcmMgPSAxOwotCX0KLQotCWlmICghcmMpCi0JCWluZm8tPnByb3RlY3Rbc2VjdG9yXSA9IHByb3Q7Ci0KLQkvKgotCSAqIENsZWFyIGxvY2sgYml0IGNvbW1hbmQgY2xlYXJzIGFsbCBzZWN0b3JzIGxvY2sgYml0cywgc28KLQkgKiB3ZSBoYXZlIHRvIHJlc3RvcmUgbG9jayBiaXRzIG9mIHByb3RlY3RlZCBzZWN0b3JzLgotCSAqIFdBUk5JTkc6IGNvZGUgYmVsb3cgcmUtbG9ja3Mgc2VjdG9ycyBvbmx5IGZvciBvbmUgYmFuayAoaW5mbykuCi0JICogVGhpcyBjYXVzZXMgcHJvYmxlbXMgb24gYm9hcmRzIHdoZXJlIHNldmVyYWwgYmFua3Mgc2hhcmUKLQkgKiB0aGUgc2FtZSBjaGlwLCBhcyBzZWN0b3JzIGluIG90aGVyZSBiYW5rcyB3aWxsIGJlIHVubG9ja2VkCi0JICogYnV0IG5vdCByZS1sb2NrZWQuIEl0IHdvcmtzIGZpbmUgb24gcG01MjAgdGhvdWdoLCBhcyB0aGVyZQotCSAqIGlzIG9ubHkgb25lIGNoaXAgYW5kIG9uZSBiYW5rLgotCSAqLwotCWlmICghcHJvdCkKLQl7Ci0JCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKLQkJewotCQkJaWYgKGluZm8tPnByb3RlY3RbaV0pCi0JCQl7Ci0JCQkJc3RhcnQgPSBnZXRfdGltZXIoMCk7Ci0JCQkJYWRkciA9ICh2dV9sb25nICopKGluZm8tPnN0YXJ0W2ldKTsKLQkJCQkqYWRkciA9IElOVEVMX0xPQ0tCSVQ7CS8qIFNlY3RvciBsb2NrIGJpdCAqLwotCQkJCSphZGRyID0gSU5URUxfUFJPVEVDVDsJLyogc2V0ICovCi0JCQkJd2hpbGUgKCgqYWRkciAmIElOVEVMX0ZJTklTSEVEKSAhPSBJTlRFTF9GSU5JU0hFRCkKLQkJCQl7Ci0JCQkJCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1VOTE9DS19UT1VUKQotCQkJCQl7Ci0JCQkJCQlwcmludGYoIkZsYXNoIGxvY2sgYml0IG9wZXJhdGlvbiB0aW1lZCBvdXRcbiIpOwotCQkJCQkJcmMgPSAxOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJLyoKLQkJICogZ2V0IHRoZSBzL3cgc2VjdG9yIHByb3RlY3Rpb24gc3RhdHVzIGluIHN5bmMgd2l0aCB0aGUgaC93LAotCQkgKiBpbiBjYXNlIHNvbWV0aGluZyB3ZW50IHdyb25nIGR1cmluZyB0aGUgcmUtbG9ja2luZy4KLQkJICovCi0JCWZsYXNoX3N5bmNfcmVhbF9wcm90ZWN0KGluZm8pOyAvKiByZXNldHMgZmxhc2ggdG8gcmVhZCAgbW9kZSAqLwotCX0KLQotCWlmIChmbGFnKQotCQllbmFibGVfaW50ZXJydXB0cygpOwotCi0JKmFkZHIgPSBJTlRFTF9SRVNFVDsJCS8qIFJlc2V0IHRvIHJlYWQgYXJyYXkgbW9kZSAqLwotCi0JcmV0dXJuIHJjOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWNjMjAwL2ZsYXNoLmggYi9ib2FyZC9tY2MyMDAvZmxhc2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRjNWQwNC4uMDAwMDAwMAotLS0gYS9ib2FyZC9tY2MyMDAvZmxhc2guaAorKysgL2Rldi9udWxsCkBAIC0xLDQzNyArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLTggKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpZm5kZWYgX0ZMQVNIX0hfCi0jZGVmaW5lIF9GTEFTSF9IXwotCi0jaWZuZGVmIENGR19OT19GTEFTSAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRkxBU0ggSW5mbzogY29udGFpbnMgY2hpcCBzcGVjaWZpYyBkYXRhLCBwZXIgRkxBU0ggYmFuawotICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bG9uZwlzaXplOwkJCS8qIHRvdGFsIGJhbmsgc2l6ZSBpbiBieXRlcwkJKi8KLQl1c2hvcnQJc2VjdG9yX2NvdW50OwkJLyogbnVtYmVyIG9mIGVyYXNlIHVuaXRzCQkqLwotCXVsb25nCWZsYXNoX2lkOwkJLyogY29tYmluZWQgZGV2aWNlICYgbWFudWZhY3R1cmVyIGNvZGUJKi8KLQl1bG9uZwlzdGFydFtDRkdfTUFYX0ZMQVNIX1NFQ1RdOyAgIC8qIHBoeXNpY2FsIHNlY3RvciBzdGFydCBhZGRyZXNzZXMgKi8KLQl1Y2hhcglwcm90ZWN0W0NGR19NQVhfRkxBU0hfU0VDVF07IC8qIHNlY3RvciBwcm90ZWN0aW9uIHN0YXR1cwkqLwotI2lmZGVmIENGR19GTEFTSF9DRkkKLQl1Y2hhcglwb3J0d2lkdGg7CQkvKiB0aGUgd2lkdGggb2YgdGhlIHBvcnQJCSovCi0JdWNoYXIJY2hpcHdpZHRoOwkJLyogdGhlIHdpZHRoIG9mIHRoZSBjaGlwCQkqLwotCXVzaG9ydAlidWZmZXJfc2l6ZTsJCS8qICMgb2YgYnl0ZXMgaW4gd3JpdGUgYnVmZmVyCQkqLwotCXVsb25nCWVyYXNlX2Jsa190b3V0OwkJLyogbWF4aW11bSBibG9jayBlcmFzZSB0aW1lb3V0CQkqLwotCXVsb25nCXdyaXRlX3RvdXQ7CQkvKiBtYXhpbXVtIHdyaXRlIHRpbWVvdXQJCSovCi0JdWxvbmcJYnVmZmVyX3dyaXRlX3RvdXQ7CS8qIG1heGltdW0gYnVmZmVyIHdyaXRlIHRpbWVvdXQJCSovCi0JdXNob3J0CXZlbmRvcjsJCQkvKiB0aGUgcHJpbWFyeSB2ZW5kb3IgaWQJCSovCi0JdXNob3J0CWNtZF9yZXNldDsJCS8qIFZlbmRvciBzcGVjaWZpYyByZXNldCBjb21tYW5kCSovCi0JdXNob3J0CWludGVyZmFjZTsJCS8qIHVzZWQgZm9yIHg4L3gxNiBhZGp1c3RtZW50cwkJKi8KLSNlbmRpZgotfSBmbGFzaF9pbmZvX3Q7Ci0KLS8qCi0gKiBWYWx1ZXMgZm9yIHRoZSB3aWR0aCBvZiB0aGUgcG9ydAotICovCi0jZGVmaW5lIEZMQVNIX0NGSV84QklUCQkweDAxCi0jZGVmaW5lIEZMQVNIX0NGSV8xNkJJVAkJMHgwMgotI2RlZmluZSBGTEFTSF9DRklfMzJCSVQJCTB4MDQKLSNkZWZpbmUgRkxBU0hfQ0ZJXzY0QklUCQkweDA4Ci0vKgotICogVmFsdWVzIGZvciB0aGUgd2lkdGggb2YgdGhlIGNoaXAKLSAqLwotI2RlZmluZSBGTEFTSF9DRklfQlk4CQkweDAxCi0jZGVmaW5lIEZMQVNIX0NGSV9CWTE2CQkweDAyCi0jZGVmaW5lIEZMQVNIX0NGSV9CWTMyCQkweDA0Ci0jZGVmaW5lIEZMQVNIX0NGSV9CWTY0CQkweDA4Ci0vKiBjb252ZXJ0IGJldHdlZW4gYml0IHZhbHVlIGFuZCBudW1lcmljIHZhbHVlICovCi0jZGVmaW5lIENGSV9GTEFTSF9TSElGVF9XSURUSAkzCi0vKgotICogVmFsdWVzIGZvciB0aGUgZmxhc2ggZGV2aWNlIGludGVyZmFjZQotICovCi0jZGVmaW5lIEZMQVNIX0NGSV9YOAkJMHgwMAotI2RlZmluZSBGTEFTSF9DRklfWDE2CQkweDAxCi0jZGVmaW5lIEZMQVNIX0NGSV9YOFgxNgkJMHgwMgotCi0vKiBjb252ZXJ0IGJldHdlZW4gYml0IHZhbHVlIGFuZCBudW1lcmljIHZhbHVlICovCi0jZGVmaW5lIENGSV9GTEFTSF9TSElGVF9XSURUSAkzCi0vKiBQcm90b3R5cGVzICovCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIGZsYXNoX2luaXQgKHZvaWQpOwotZXh0ZXJuIHZvaWQgZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICopOwotZXh0ZXJuIGludCBmbGFzaF9lcmFzZQkoZmxhc2hfaW5mb190ICosIGludCwgaW50KTsKLWV4dGVybiBpbnQgZmxhc2hfc2VjdF9lcmFzZSAodWxvbmcgYWRkcl9maXJzdCwgdWxvbmcgYWRkcl9sYXN0KTsKLWV4dGVybiBpbnQgZmxhc2hfc2VjdF9wcm90ZWN0IChpbnQgZmxhZywgdWxvbmcgYWRkcl9maXJzdCwgdWxvbmcgYWRkcl9sYXN0KTsKLQotLyogY29tbW9uL2ZsYXNoLmMgKi8KLWV4dGVybiB2b2lkIGZsYXNoX3Byb3RlY3QgKGludCBmbGFnLCB1bG9uZyBmcm9tLCB1bG9uZyB0bywgZmxhc2hfaW5mb190ICppbmZvKTsKLWV4dGVybiBpbnQgZmxhc2hfd3JpdGUgKHVjaGFyICosIHVsb25nLCB1bG9uZyk7Ci1leHRlcm4gZmxhc2hfaW5mb190ICphZGRyMmluZm8gKHVsb25nKTsKLWV4dGVybiBpbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpOwotCi0vKiBib2FyZC8/L2ZsYXNoLmMgKi8KLSNpZiBkZWZpbmVkKENGR19GTEFTSF9QUk9URUNUSU9OKQotZXh0ZXJuIGludCBmbGFzaF9yZWFsX3Byb3RlY3QoZmxhc2hfaW5mb190ICppbmZvLCBsb25nIHNlY3RvciwgaW50IHByb3QpOwotZXh0ZXJuIHZvaWQgZmxhc2hfcmVhZF91c2VyX3NlcmlhbChmbGFzaF9pbmZvX3QgKiBpbmZvLCB2b2lkICogYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKLWV4dGVybiB2b2lkIGZsYXNoX3JlYWRfZmFjdG9yeV9zZXJpYWwoZmxhc2hfaW5mb190ICogaW5mbywgdm9pZCAqIGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGxlbik7Ci0jZW5kaWYJLyogQ0ZHX0ZMQVNIX1BST1RFQ1RJT04gKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogcmV0dXJuIGNvZGVzIGZyb20gZmxhc2hfd3JpdGUoKToKLSAqLwotI2RlZmluZSBFUlJfT0sJCQkJMAotI2RlZmluZSBFUlJfVElNT1VUCQkJMQotI2RlZmluZSBFUlJfTk9UX0VSQVNFRAkJCTIKLSNkZWZpbmUgRVJSX1BST1RFQ1RFRAkJCTQKLSNkZWZpbmUgRVJSX0lOVkFMCQkJOAotI2RlZmluZSBFUlJfQUxJR04JCQkxNgotI2RlZmluZSBFUlJfVU5LTk9XTl9GTEFTSF9WRU5ET1IJMzIKLSNkZWZpbmUgRVJSX1VOS05PV05fRkxBU0hfVFlQRQkJNjQKLSNkZWZpbmUgRVJSX1BST0dfRVJST1IJCQkxMjgKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUHJvdGVjdGlvbiBGbGFncyBmb3IgZmxhc2hfcHJvdGVjdCgpOgotICovCi0jZGVmaW5lIEZMQUdfUFJPVEVDVF9TRVQJMHgwMQotI2RlZmluZSBGTEFHX1BST1RFQ1RfQ0xFQVIJMHgwMgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEZXZpY2UgSURzCi0gKi8KLQotI2RlZmluZSBBTURfTUFOVUZBQ1QJMHgwMDAxMDAwMQkvKiBBTUQJICAgbWFudWYuIElEIGluIEQyMy4uRDE2LCBENy4uRDAgKi8KLSNkZWZpbmUgRlVKX01BTlVGQUNUCTB4MDAwNDAwMDQJLyogRlVKSVRTVSBtYW51Zi4gSUQgaW4gRDIzLi5EMTYsIEQ3Li5EMCAqLwotI2RlZmluZSBBVE1fTUFOVUZBQ1QJMHgwMDFGMDAxRgkvKiBBVE1FTCAqLwotI2RlZmluZSBTVE1fTUFOVUZBQ1QJMHgwMDIwMDAyMAkvKiBTVE0gKFRob21zb24pIG1hbnVmLiBJRCBpbiBEMjMuLiAtIi0gKi8KLSNkZWZpbmUgU1NUX01BTlVGQUNUCTB4MDBCRjAwQkYJLyogU1NUCSAgIG1hbnVmLiBJRCBpbiBEMjMuLkQxNiwgRDcuLkQwICovCi0jZGVmaW5lIE1UX01BTlVGQUNUCTB4MDA4OTAwODkJLyogTVQJICAgbWFudWYuIElEIGluIEQyMy4uRDE2LCBENy4uRDAgKi8KLSNkZWZpbmUgSU5URUxfTUFOVUZBQ1QJMHgwMDg5MDA4OQkvKiBJTlRFTCAgIG1hbnVmLiBJRCBpbiBEMjMuLkQxNiwgRDcuLkQwICovCi0jZGVmaW5lIElOVEVMX0FMVF9NQU5VCTB4MDBCMDAwQjAJLyogYWx0ZXJuYXRlIElOVEVMIG5hbXVmYWN0dXJlciBJRAkqLwotI2RlZmluZSBNWF9NQU5VRkFDVAkweDAwQzIwMEMyCS8qIE1YSUMJICAgbWFudWYuIElEIGluIEQyMy4uRDE2LCBENy4uRDAgKi8KLSNkZWZpbmUgVE9TSF9NQU5VRkFDVAkweDAwOTgwMDk4CS8qIFRPU0hJQkEgbWFudWYuIElEIGluIEQyMy4uRDE2LCBENy4uRDAgKi8KLSNkZWZpbmUgTVQyX01BTlVGQUNUCTB4MDAyQzAwMkMJLyogYWx0ZXJuYXRlIE1JQ1JPTiBtYW51ZmFjdHVyZXIgSUQqLwotI2RlZmluZSBFWENFTF9NQU5VRkFDVAkweDAwNEEwMDRBCS8qIEV4Y2VsIFNlbWljb25kdWN0b3IgICAgICAgICAgICAgICAgICAqLwotCi0JCQkJCS8qIE1pY3JvbiBUZWNobm9sb2dpZXMgKElOVEVMIGNvbXBhdC4pCSovCi0jZGVmaW5lIE1UX0lEXzI4RjQwMF9UCTB4NDQ3MDQ0NzAJLyogMjhGNDAwQjMgSUQgKCA0IE0sIHRvcCBib290IHNlY3RvcikJKi8KLSNkZWZpbmUgTVRfSURfMjhGNDAwX0IJMHg0NDcxNDQ3MQkvKiAyOEY0MDBCMyBJRCAoIDQgTSwgYm90dG9tIGJvb3Qgc2VjdCkgKi8KLQotI2RlZmluZSBBTURfSURfTFYwNDBCCTB4NEYJCS8qIDI5TFYwNDBCIElECQkJCSovCi0JCQkJCS8qIDQgTWJpdCwgNTEySyB4IDgsCQkJKi8KLQkJCQkJLyogOCA2NEsgeCA4IHVuaWZvcm0gc2VjdG9ycwkJKi8KLQotI2RlZmluZSBBTURfSURfRjA0MEIJMHhBNAkJLyogMjlGMDQwQiBJRAkJCQkqLwotCQkJCQkvKiA0IE1iaXQsIDUxMksgeCA4LAkJCSovCi0JCQkJCS8qIDggNjRLIHggOCB1bmlmb3JtIHNlY3RvcnMJCSovCi0jZGVmaW5lIFNUTV9JRF9NMjlXMDQwQiAweEUzCQkvKiBNMjlXMDQwQiBJRAkJCQkqLwotCQkJCQkvKiA0IE1iaXQsIDUxMksgeCA4LAkJCSovCi0JCQkJCS8qIDggNjRLIHggOCB1bmlmb3JtIHNlY3RvcnMJCSovCi0jZGVmaW5lIEFNRF9JRF9GMDgwQgkweEQ1CQkvKiAyOUYwODAgIElEICAoIDEgTSkJCQkqLwotCQkJCQkvKiA4IE1iaXQsIDUxMksgeCAxNiwJCQkqLwotCQkJCQkvKiA4IDY0SyB4IDE2IHVuaWZvcm0gc2VjdG9ycwkJKi8KLSNkZWZpbmUgQU1EX0lEX0YwMTZECTB4QUQJCS8qIDI5RjAxNiAgSUQgICggMiBNIHggOCkJCSovCi0jZGVmaW5lIEFNRF9JRF9GMDMyQgkweDQxCQkvKiAyOUYwMzIgIElEICAoIDQgTSB4IDgpCQkqLwotI2RlZmluZSBBTURfSURfTFYxMTZEVAkweEM3CQkvKiAyOUxWMTE2RFQgICAoIDIgTSB4IDgsIHRvcCBib290IHNlY3QpICovCi0jZGVmaW5lIEFNRF9JRF9MVjExNkRCICAweDRDCQkvKiAyOUxWMTE2REIgICAoIDIgTSB4IDgsIGJvdHRvbSBib290IHNlY3QpICovCi0jZGVmaW5lIEFNRF9JRF9MVjAxNkIJMHhjOAkJLyogMjlMVjAxNiBJRCAgKCAyIE0geCA4KQkJKi8KLQotI2RlZmluZSBBTURfSURfUEwxNjBDQiAgMHgyMjQ1MjI0NSAgICAgIC8qIDI5UEwxNjBDQiBJRCAoMTYgTSwgYm90dG9tIGJvb3Qgc2VjdCAqLwotCi0jZGVmaW5lIEFNRF9JRF9MVjQwMFQJMHgyMkI5MjJCOQkvKiAyOUxWNDAwVCBJRCAoIDQgTSwgdG9wIGJvb3Qgc2VjdG9yKQkqLwotI2RlZmluZSBBTURfSURfTFY0MDBCCTB4MjJCQTIyQkEJLyogMjlMVjQwMEIgSUQgKCA0IE0sIGJvdHRvbSBib290IHNlY3QpICovCi0KLSNkZWZpbmUgQU1EX0lEX0xWMDMzQwkweEEzCQkvKiAyOUxWMDMzQyBJRCAoIDQgTSB4IDgpCQkqLwotI2RlZmluZSBBTURfSURfTFYwNjVECTB4OTMJCS8qIDI5TFYwNjVEIElEICggOCBNIHggOCkJCSovCi0KLSNkZWZpbmUgQU1EX0lEX0xWODAwVAkweDIyREEyMkRBCS8qIDI5TFY4MDBUIElEICggOCBNLCB0b3AgYm9vdCBzZWN0b3IpCSovCi0jZGVmaW5lIEFNRF9JRF9MVjgwMEIJMHgyMjVCMjI1QgkvKiAyOUxWODAwQiBJRCAoIDggTSwgYm90dG9tIGJvb3Qgc2VjdCkgKi8KLQotI2RlZmluZSBBTURfSURfTFYxNjBUCTB4MjJDNDIyQzQJLyogMjlMVjE2MFQgSUQgKDE2IE0sIHRvcCBib290IHNlY3RvcikJKi8KLSNkZWZpbmUgQU1EX0lEX0xWMTYwQgkweDIyNDkyMjQ5CS8qIDI5TFYxNjBCIElEICgxNiBNLCBib3R0b20gYm9vdCBzZWN0KSAqLwotCi0jZGVmaW5lIEFNRF9JRF9ETDE2M1QJMHgyMjI4MjIyOAkvKiAyOURMMTYzVCBJRCAoMTYgTSwgdG9wIGJvb3Qgc2VjdG9yKQkqLwotI2RlZmluZSBBTURfSURfREwxNjNCCTB4MjIyQjIyMkIJLyogMjlETDE2M0IgSUQgKDE2IE0sIGJvdHRvbSBib290IHNlY3QpCSovCi0KLSNkZWZpbmUgQU1EX0lEX0xWMzIwVAkweDIyRjYyMkY2CS8qIDI5TFYzMjBUIElEICgzMiBNLCB0b3AgYm9vdCBzZWN0b3IpCSovCi0jZGVmaW5lIE1YX0lEX0xWMzIwVAkweDIyQTcyMkE3CS8qIDI5TFYzMjBUIGJ5IE1hY3Jvbml4LCBBTUQgY29tcGF0aWJsZSAqLwotI2RlZmluZSBBTURfSURfTFYzMjBCCTB4MjJGOTIyRjkJLyogMjlMVjMyMEIgSUQgKDMyIE0sIGJvdHRvbSBib290IHNlY3QpICovCi0jZGVmaW5lIE1YX0lEX0xWMzIwQgkweDIyQTgyMkE4CS8qIDI5TFYzMjBCIGJ5IE1hY3Jvbml4LCBBTUQgY29tcGF0aWJsZSAqLwotCi0jZGVmaW5lIEFNRF9JRF9ETDMyMlQJMHgyMjU1MjI1NQkvKiAyOURMMzIyVCBJRCAoMzIgTSwgdG9wIGJvb3Qgc2VjdG9yKQkqLwotI2RlZmluZSBBTURfSURfREwzMjJCCTB4MjI1NjIyNTYJLyogMjlETDMyMkIgSUQgKDMyIE0sIGJvdHRvbSBib290IHNlY3QpICovCi0jZGVmaW5lIEFNRF9JRF9ETDMyM1QJMHgyMjUwMjI1MAkvKiAyOURMMzIzVCBJRCAoMzIgTSwgdG9wIGJvb3Qgc2VjdG9yKQkqLwotI2RlZmluZSBBTURfSURfREwzMjNCCTB4MjI1MzIyNTMJLyogMjlETDMyM0IgSUQgKDMyIE0sIGJvdHRvbSBib290IHNlY3QpICovCi0jZGVmaW5lIEFNRF9JRF9ETDMyNFQJMHgyMjVDMjI1QwkvKiAyOURMMzI0VCBJRCAoMzIgTSwgdG9wIGJvb3Qgc2VjdG9yKQkqLwotI2RlZmluZSBBTURfSURfREwzMjRCCTB4MjI1RjIyNUYJLyogMjlETDMyNEIgSUQgKDMyIE0sIGJvdHRvbSBib290IHNlY3QpICovCi0KLSNkZWZpbmUgQU1EX0lEX0RMNjQwCTB4MjI3RTIyN0UJLyogMjlETDY0MEQgSUQgKDY0IE0sIGR1YWwgYm9vdCBzZWN0b3JzKSovCi0jZGVmaW5lIEFNRF9JRF9NSVJST1IJMHgyMjdFMjI3RQkvKiAxc3QgSUQgd29yZCBmb3IgTWlycm9yQml0IGZhbWlseSAqLwotI2RlZmluZSBBTURfSURfREw2NDBHXzIJMHgyMjAyMjIwMgkvKiAybmQgSUQgd29yZCBmb3IgQU0yOURMNjQwRyAgYXQgMHgzOCAqLwotI2RlZmluZSBBTURfSURfREw2NDBHXzMJMHgyMjAxMjIwMQkvKiAzcmQgSUQgd29yZCBmb3IgQU0yOURMNjQwRyAgYXQgMHgzYyAqLwotI2RlZmluZSBBTURfSURfTFY2NDBVXzIJMHgyMjBDMjIwQwkvKiAybmQgSUQgd29yZCBmb3IgQU0yOUxWNjQwTSAgYXQgMHgzOCAqLwotI2RlZmluZSBBTURfSURfTFY2NDBVXzMJMHgyMjAxMjIwMQkvKiAzcmQgSUQgd29yZCBmb3IgQU0yOUxWNjQwTSAgYXQgMHgzYyAqLwotI2RlZmluZSBBTURfSURfTFY2NDBNVF8yIDB4MjIxMDIyMTAJLyogMm5kIElEIHdvcmQgZm9yIEFNMjlMVjY0ME1UIGF0IDB4MzggKi8KLSNkZWZpbmUgQU1EX0lEX0xWNjQwTVRfMyAweDIyMDEyMjAxCS8qIDNyZCBJRCB3b3JkIGZvciBBTTI5TFY2NDBNVCBhdCAweDNjICovCi0jZGVmaW5lIEFNRF9JRF9MVjY0ME1CXzIgMHgyMjEwMjIxMAkvKiAybmQgSUQgd29yZCBmb3IgQU0yOUxWNjQwTUIgYXQgMHgzOCAqLwotI2RlZmluZSBBTURfSURfTFY2NDBNQl8zIDB4MjIwMDIyMDAJLyogM3JkIElEIHdvcmQgZm9yIEFNMjlMVjY0ME1CIGF0IDB4M2MgKi8KLSNkZWZpbmUgQU1EX0lEX0xWMTI4VV8yIDB4MjIxMjIyMTIJLyogMm5kIElEIHdvcmQgZm9yIEFNMjlMVjEyOE0gIGF0IDB4MzggKi8KLSNkZWZpbmUgQU1EX0lEX0xWMTI4VV8zIDB4MjIwMDIyMDAJLyogM3JkIElEIHdvcmQgZm9yIEFNMjlMVjEyOE0gIGF0IDB4M2MgKi8KLSNkZWZpbmUgQU1EX0lEX0xWMjU2VV8yIDB4MjIxMjIyMTIJLyogMm5kIElEIHdvcmQgZm9yIEFNMjlMVjI1Nk0gIGF0IDB4MzggKi8KLSNkZWZpbmUgQU1EX0lEX0xWMjU2VV8zIDB4MjIwMTIyMDEJLyogM3JkIElEIHdvcmQgZm9yIEFNMjlMVjI1Nk0gIGF0IDB4M2MgKi8KLSNkZWZpbmUgQU1EX0lEX0dMMDY0TV8yIDB4MjIxMzIyMTMJLyogMm5kIElEIHdvcmQgZm9yIFMyOUdMMDY0TS1SNiAqLwotI2RlZmluZSBBTURfSURfR0wwNjRNXzMgMHgyMjAxMjIwMQkvKiAzcmQgSUQgd29yZCBmb3IgUzI5R0wwNjRNLVI2ICovCi0KLSNkZWZpbmUgQU1EX0lEX0xWMzIwQl8yCTB4MjIxQTIyMUEJLyogMmQgSUQgd29yZCBmb3IgQU0yOUxWMzIwTUIgYXQgMHgzOCAqLwotI2RlZmluZSBBTURfSURfTFYzMjBCXzMgMHgyMjAwMjIwMAkvKiAzZCBJRCB3b3JkIGZvciBBTTI5TFYzMjBNQiBhdCAweDNjICovCi0KLSNkZWZpbmUgQU1EX0lEX0xWNjQwVQkweDIyRDcyMkQ3CS8qIDI5TFY2NDBVIElEICg2NCBNLCB1bmlmb3JtIHNlY3RvcnMpCSovCi0KLSNkZWZpbmUgQVRNX0lEX0JWMTYxNAkweDAwMDAwMEMwCS8qIDQ5QlYxNjE0ICBJRCAqLwotI2RlZmluZSBBVE1fSURfQlYxNjE0QQkweDAwMDAwMEM4CS8qIDQ5QlYxNjE0QSBJRCAqLwotI2RlZmluZSBBVE1fSURfQlY2NDE2CTB4MDAwMDAwRDYJLyogNDlCVjY0MTYgIElEICovCi0KLSNkZWZpbmUgRlVKSV9JRF8yOUY4MDBCQSAgMHgyMjU4MjI1OAkvKiBNQk0yOUY4MDBCQSBJRCAgKDhNKSAqLwotI2RlZmluZSBGVUpJX0lEXzI5RjgwMFRBICAweDIyRDYyMkQ2CS8qIE1CTTI5RjgwMFRBIElEICAoOE0pICovCi0jZGVmaW5lIEZVSklfSURfMjlMVjY1MFVFIDB4MjJkNzIyZDcJLyogTUJNMjlMVjY1MFVFLzY1MVVFIElEICg4TSA9IDEyOCB4IDMya1dvcmQpICovCi0KLSNkZWZpbmUgU1NUX0lEX3hGMjAwQQkweDI3ODkyNzg5CS8qIDM5eEYyMDBBIElEICggMk0gPSAxMjhLIHggMTYgKQkqLwotI2RlZmluZSBTU1RfSURfeEY0MDBBCTB4Mjc4MDI3ODAJLyogMzl4RjQwMEEgSUQgKCA0TSA9IDI1NksgeCAxNiApCSovCi0jZGVmaW5lIFNTVF9JRF94RjgwMEEJMHgyNzgxMjc4MQkvKiAzOXhGODAwQSBJRCAoIDhNID0gNTEySyB4IDE2ICkJKi8KLSNkZWZpbmUgU1NUX0lEX3hGMTYwQQkweDI3ODIyNzgyCS8qIDM5eEY4MDBBIElEICgxNk0gPQkxTSB4IDE2ICkJKi8KLSNkZWZpbmUgU1NUX0lEX3hGMTYwMQkweDIzNEIyMzRCCS8qIDM5eEYxNjAxIElEICgxNk0gPQkxTSB4IDE2ICkJKi8KLSNkZWZpbmUgU1NUX0lEX3hGMTYwMgkweDIzNEEyMzRBCS8qIDM5eEYxNjAyIElEICgxNk0gPQkxTSB4IDE2ICkJKi8KLSNkZWZpbmUgU1NUX0lEX3hGMzIwMQkweDIzNUIyMzVCCS8qIDM5eEYzMjAxIElEICgzMk0gPQkyTSB4IDE2ICkJKi8KLSNkZWZpbmUgU1NUX0lEX3hGMzIwMgkweDIzNUEyMzVBCS8qIDM5eEYzMjAyIElEICgzMk0gPQkyTSB4IDE2ICkJKi8KLSNkZWZpbmUgU1NUX0lEX3hGNjQwMQkweDIzNkIyMzZCCS8qIDM5eEY2NDAxIElEICg2NE0gPQk0TSB4IDE2ICkJKi8KLSNkZWZpbmUgU1NUX0lEX3hGNjQwMgkweDIzNkEyMzZBCS8qIDM5eEY2NDAyIElEICg2NE0gPQk0TSB4IDE2ICkJKi8KLSNkZWZpbmUgU1NUX0lEX3hGMDQwCTB4QkZEN0JGRDcJLyogMzl4RjA0MCBJRCAoNTEyS0IgPSA0TWJpdCB4IDgpCSovCi0KLSNkZWZpbmUgU1RNX0lEX0YwNDBCCTB4RTIJCS8qIE0yOUYwNDBCIElEICggNE0gPSA1MTJLIHggOAkpCSovCi0JCQkJCS8qIDggNjRLIHggOCB1bmlmb3JtIHNlY3RvcnMJCSovCi0KLSNkZWZpbmUgU1RNX0lEX3g4MDBBQgkweDAwNUIwMDVCCS8qIE0yOVc4MDBBQiBJRCAoOE0gPSA1MTJLIHggMTYgKQkqLwotI2RlZmluZSBTVE1fSURfMjlXMzIwRFQgMHgyMkNBMjJDQQkvKiBNMjlXMzIwRFQgSUQgKDMyIE0sIHRvcCBib290IHNlY3RvcikgKi8KLSNkZWZpbmUgU1RNX0lEXzI5VzMyMERCIDB4MjJDQjIyQ0IJLyogTTI5VzMyMERCIElEICgzMiBNLCBib3R0b20gYm9vdCBzZWN0KQkqLwotI2RlZmluZSBTVE1fSURfMjlXMDQwQgkweDAwRTMwMEUzCS8qIE0yOVcwNDBCIElEICg0TSA9IDUxMksgeCA4KQkqLwotCi0jZGVmaW5lIElOVEVMX0lEXzI4RjAxNlMgICAgMHg2NmEwNjZhMAkvKiAyOEYwMTZTW1ZTXSBJRCAoMTZNID0gNTEyayB4IDE2KQkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEY4MDBCM1QgIDB4ODg5Mjg4OTIJLyogIDhNID0gNTEySyB4IDE2IHRvcCBib290IHNlY3RvcgkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEY4MDBCM0IgIDB4ODg5Mzg4OTMJLyogIDhNID0gNTEySyB4IDE2IGJvdHRvbSBib290IHNlY3RvcgkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYxNjBCM1QgIDB4ODg5MDg4OTAJLyogIDE2TSA9IDFNIHggMTYgdG9wIGJvb3Qgc2VjdG9yCSovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjE2MEIzQiAgMHg4ODkxODg5MQkvKiAgMTZNID0gMU0geCAxNiBib3R0b20gYm9vdCBzZWN0b3IJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMzIwQjNUICAweDg4OTY4ODk2CS8qICAzMk0gPSAyTSB4IDE2IHRvcCBib290IHNlY3RvcgkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYzMjBCM0IgIDB4ODg5Nzg4OTcJLyogIDMyTSA9IDJNIHggMTYgYm90dG9tIGJvb3Qgc2VjdG9yCSovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjY0MEIzVCAgMHg4ODk4ODg5OAkvKiAgNjRNID0gNE0geCAxNiB0b3AgYm9vdCBzZWN0b3IJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGNjQwQjNCICAweDg4OTk4ODk5CS8qICA2NE0gPSA0TSB4IDE2IGJvdHRvbSBib290IHNlY3RvcgkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYxNjBGM0IgIDB4ODhGNDg4RjQJLyogIDE2TSA9IDFNIHggMTYgYm90dG9tIGJvb3Qgc2VjdG9yCSovCi0KLSNkZWZpbmUgSU5URUxfSURfMjhGODAwQzNUICAweDg4QzA4OEMwCS8qICA4TSA9IDUxMksgeCAxNiB0b3AgYm9vdCBzZWN0b3IJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGODAwQzNCICAweDg4QzE4OEMxCS8qICA4TSA9IDUxMksgeCAxNiBib3R0b20gYm9vdCBzZWN0b3IJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMTYwQzNUICAweDg4QzI4OEMyCS8qICAxNk0gPSAxTSB4IDE2IHRvcCBib290IHNlY3RvcgkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYxNjBDM0IgIDB4ODhDMzg4QzMJLyogIDE2TSA9IDFNIHggMTYgYm90dG9tIGJvb3Qgc2VjdG9yCSovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjMyMEMzVCAgMHg4OEM0ODhDNAkvKiAgMzJNID0gMk0geCAxNiB0b3AgYm9vdCBzZWN0b3IJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMzIwQzNCICAweDg4QzU4OEM1CS8qICAzMk0gPSAyTSB4IDE2IGJvdHRvbSBib290IHNlY3RvcgkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEY2NDBDM1QgIDB4ODhDQzg4Q0MJLyogIDY0TSA9IDRNIHggMTYgdG9wIGJvb3Qgc2VjdG9yCSovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjY0MEMzQiAgMHg4OENEODhDRAkvKiAgNjRNID0gNE0geCAxNiBib3R0b20gYm9vdCBzZWN0b3IJKi8KLQotI2RlZmluZSBJTlRFTF9JRF8yOEYxMjhKMyAgIDB4ODkxODg5MTgJLyogIDE2TSA9IDhNIHggMTYgeCAxMjggKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMzIwSjUgICAweDAwMTQwMDE0CS8qICAzMk0gPSAxMjhLIHggIDMyCSovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjY0MEo1ICAgMHgwMDE1MDAxNQkvKiAgNjRNID0gMTI4SyB4ICA2NAkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYzMjBKM0EgIDB4MDAxNjAwMTYJLyogIDMyTSA9IDEyOEsgeCAgMzIJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGNjQwSjNBICAweDAwMTcwMDE3CS8qICA2NE0gPSAxMjhLIHggIDY0CSovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjI1NkwxOCAgMHg4ODEwODgxMAkvKiAgMzJNID0gMTI4SyB4IDI1NQkqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYxMjhKM0EgIDB4MDAxODAwMTgJLyogMTI4TSA9IDEyOEsgeCAxMjgJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMjU2TDE4VCAweDg4MEQ4ODBECS8qIDI1Nk0gPSAxMjhLIHggMjU1ICsgMzJrIHggNCAqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYyNTZMMThCIDB4ODgxMDg4MTAJLyogMjU2TSA9ICAzMmsgeCA0ICAgKyAxMjhLIHggMjU1ICovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjI1NlAzMEIgMHg4OTFDODkxQwkvKiAyNTZNID0gIDMyayB4IDQgICArIDEyOEsgeCAyNTUgKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMjU2UDMwVCAweDg5MTk4OTE5CS8qIDI1Nk0gPSAgMTI4SyB4IDI1NSArIDMyayB4IDQgKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGNjRLMyAgICAweDg4MDE4ODAxCS8qICA2NE0gPSAgMzJLIHggMjU1ICsgMzJrIHggNCAqLwotI2RlZmluZSBJTlRFTF9JRF8yOEYxMjhLMyAgIDB4ODgwMjg4MDIJLyogMTI4TSA9ICA2NEsgeCAyNTUgKyAzMmsgeCA0ICovCi0jZGVmaW5lIElOVEVMX0lEXzI4RjI1NkszICAgMHg4ODAzODgwMwkvKiAyNTZNID0gMTI4SyB4IDI1NSArIDMyayB4IDQgKi8KLQotI2RlZmluZSBJTlRFTF9JRF8yOEYxNjBTMyAgIDB4MDBEMDAwRDAJLyogIDE2TSA9IDUxMksgeCAgMzIgKDY0a0IgeCAzMikJKi8KLSNkZWZpbmUgSU5URUxfSURfMjhGMzIwUzMgICAweDAwRDQwMEQ0CS8qICAzMk0gPSA1MTJLIHggIDY0ICg2NGtCIHggNjQpCSovCi0KLS8qIE5vdGUgdGhhdCB0aGUgU2hhcnAgMjhGMDE2U0MgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBJbnRlbCBFMjhGMDE2U0MgKi8KLSNkZWZpbmUgU0hBUlBfSURfMjhGMDE2U0NMICAweEFBQUFBQUFBCS8qIExIMjhGMDE2U0NULUw5NSAyTXg4LCAzMiA2NGsgYmxvY2tzCSovCi0jZGVmaW5lIFNIQVJQX0lEXzI4RjAxNlNDWiAgMHhBMEEwQTBBMAkvKiBMSDI4RjAxNlNDVC1aNCAgMk14OCwgMzIgNjRrIGJsb2NrcwkqLwotI2RlZmluZSBTSEFSUF9JRF8yOEYwMDhTQyAgIDB4QTZBNkE2QTYJLyogTEgyOEYwMDhTQ1QtTDEyIDFNeDgsIDE2IDY0ayBibG9ja3MJKi8KLQkJCQkJLyogTEgyOEYwMDhTQ1ItTDg1IDFNeDgsIDE2IDY0ayBibG9ja3MJKi8KLQotI2RlZmluZSBUT1NIX0lEX0ZWVDE2MAkweEMyCQkvKiBUQzU4RlZUMTYwIElEICgxNiBNLCB0b3AgKQkJKi8KLSNkZWZpbmUgVE9TSF9JRF9GVkIxNjAJMHg0MwkJLyogVEM1OEZWVDE2MCBJRCAoMTYgTSwgYm90dG9tICkJKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogSW50ZXJuYWwgRkxBU0ggaWRlbnRpZmljYXRpb24gY29kZXMKLSAqCi0gKiBCZSBjYXJlZnVsIHdoZW4gYWRkaW5nIG5ldyB0eXBlISBPZGQgbnVtYmVycyBhcmUgImJvdHRvbSBib290IHNlY3RvciIgdHlwZXMhCi0gKi8KLQotI2RlZmluZSBGTEFTSF9BTTA0MAkweDAwMDEJCS8qIEFNRCBBbTI5RjA0MEIsIEFtMjlMVjA0MEIJCSovCi0JCQkJCS8qIEJyaWdodCBNaWNybyBCTTI5RjA0MAkJKi8KLQkJCQkJLyogRnVqaXRzdSBNQk0yOUYwNDBBCQkJKi8KLQkJCQkJLyogU1RNIE0yOVcwNDBCCQkJCSovCi0JCQkJCS8qIFNHUyBUaG9tc29uIE0yOUYwNDBCCQkJKi8KLQkJCQkJLyogOCA2NEsgeCA4IHVuaWZvcm0gc2VjdG9ycwkJKi8KLSNkZWZpbmUgRkxBU0hfQU00MDBUCTB4MDAwMgkJLyogQU1EIEFNMjlMVjQwMAkJCSovCi0jZGVmaW5lIEZMQVNIX0FNNDAwQgkweDAwMDMKLSNkZWZpbmUgRkxBU0hfQU04MDBUCTB4MDAwNAkJLyogQU1EIEFNMjlMVjgwMAkJCSovCi0jZGVmaW5lIEZMQVNIX0FNODAwQgkweDAwMDUKLSNkZWZpbmUgRkxBU0hfQU0xMTZEVAkweDAwMjYJCS8qIEFNRCBBTTI5TFYxMTZEVCAoMk14OGJpdCkgKi8KLSNkZWZpbmUgRkxBU0hfQU0xMTZEQgkweDAwMjcJCS8qIEFNRCBBTTI5TFYxMTZEQiAoMk14OGJpdCkgKi8KLSNkZWZpbmUgRkxBU0hfQU0xNjBUCTB4MDAwNgkJLyogQU1EIEFNMjlMVjE2MAkJCSovCi0jZGVmaW5lIEZMQVNIX0FNMTYwTFYJMHgwMDQ2CQkvKiBBTUQyOUxWMTYwREIgKDJNID0gMk14OGJpdCApICovCi0jZGVmaW5lIEZMQVNIX0FNMTYwQgkweDAwMDcKLSNkZWZpbmUgRkxBU0hfQU0zMjBUCTB4MDAwOAkJLyogQU1EIEFNMjlMVjMyMAkJCSovCi0jZGVmaW5lIEZMQVNIX0FNMzIwQgkweDAwMDkKLQotI2RlZmluZSBGTEFTSF9BTTA4MAkweDAwMEEJCS8qIEFNRCBBbTI5RjA4MEIJCQkqLwotCQkJCQkvKiAxNiA2NEsgeCA4IHVuaWZvcm0gc2VjdG9ycwkJKi8KLQotI2RlZmluZSBGTEFTSF9BTURMMzIyVAkweDAwMTAJCS8qIEFNRCBBTTI5REwzMjIJCQkqLwotI2RlZmluZSBGTEFTSF9BTURMMzIyQgkweDAwMTEKLSNkZWZpbmUgRkxBU0hfQU1ETDMyM1QJMHgwMDEyCQkvKiBBTUQgQU0yOURMMzIzCQkJKi8KLSNkZWZpbmUgRkxBU0hfQU1ETDMyM0IJMHgwMDEzCi0jZGVmaW5lIEZMQVNIX0FNREwzMjRUCTB4MDAxNAkJLyogQU1EIEFNMjlETDMyNAkJCSovCi0jZGVmaW5lIEZMQVNIX0FNREwzMjRCCTB4MDAxNQotCi0jZGVmaW5lIEZMQVNIX0FNRExWMDMzQwkweDAwMTgKLSNkZWZpbmUgRkxBU0hfQU1ETFYwNjVECTB4MDAxQQotCi0jZGVmaW5lIEZMQVNIX0FNREw2NDAJMHgwMDE2CQkvKiBBTUQgQU0yOURMNjQwRAkJCSovCi0jZGVmaW5lIEZMQVNIX0FNRDAxNgkweDAwMTgJCS8qIEFNRCBBTTI5RjAxNkQJCQkqLwotI2RlZmluZSBGTEFTSF9BTURMNjQwTUIJMHgwMDE5CQkvKiBBTUQgQU0yOUxWNjQwTUIgKDY0TSwgYm90dG9tIGJvb3Qgc2VjdCkqLwotI2RlZmluZSBGTEFTSF9BTURMNjQwTVQJMHgwMDFBCQkvKiBBTUQgQU0yOUxWNjQwTVQgKDY0TSwgdG9wIGJvb3Qgc2VjdCkgKi8KLQotI2RlZmluZSBGTEFTSF9TU1QyMDBBCTB4MDA0MAkJLyogU1NUIDM5eEYyMDBBIElEICggIDJNID0gMTI4SyB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfU1NUNDAwQQkweDAwNDIJCS8qIFNTVCAzOXhGNDAwQSBJRCAoICA0TSA9IDI1NksgeCAxNiApCSovCi0jZGVmaW5lIEZMQVNIX1NTVDgwMEEJMHgwMDQ0CQkvKiBTU1QgMzl4RjgwMEEgSUQgKCAgOE0gPSA1MTJLIHggMTYgKQkqLwotI2RlZmluZSBGTEFTSF9TU1QxNjBBCTB4MDA0NgkJLyogU1NUIDM5eEYxNjBBIElEICggMTZNID0gICAxTSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfU1NUMzIwCTB4MDA0OAkJLyogU1NUIDM5eEYxNjBBIElEICggMTZNID0gICAxTSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfU1NUNjQwCTB4MDA0QQkJLyogU1NUIDM5eEYxNjBBIElEICggMTZNID0gICAxTSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfU1NUMDQwCTB4MDAwRQkJLyogU1NUIDM5eEYwNDAgSUQgKDUxMktCID0gNE1iaXQgeCA4ICkJKi8KLQotI2RlZmluZSBGTEFTSF9TVE04MDBBQgkweDAwNTEJCS8qIFNUTSBNMjlXRjgwMEFCICAoICA4TSA9IDUxMksgeCAxNiApCSovCi0jZGVmaW5lIEZMQVNIX1NUTVczMjBEVCAweDAwNTIJCS8qIFNUTSBNMjlXMzIwRFQgICAoMzIgTSwgdG9wIGJvb3Qgc2VjdG9yKQkqLwotI2RlZmluZSBGTEFTSF9TVE1XMzIwREIgMHgwMDUzCQkvKiBTVE0gTTI5VzMyMERCICAgKDMyIE0sIGJvdHRvbSBib290IHNlY3QpKi8KLSNkZWZpbmUgRkxBU0hfU1RNMzIwREIJMHgwMENCCQkvKiBTVE0gTTI5VzMyMERCICg0TSA9IDY0SyB4IDY0LCBib3R0b20pKi8KLSNkZWZpbmUgRkxBU0hfU1RNODAwRFQJMHgwMEQ3CQkvKiBTVE0gTTI5VzgwMERUICgxTSA9IDY0SyB4IDE2LCB0b3ApCSovCi0jZGVmaW5lIEZMQVNIX1NUTTgwMERCCTB4MDA1QgkJLyogU1RNIE0yOVc4MDBEQiAoMU0gPSA2NEsgeCAxNiwgYm90dG9tKSovCi0KLSNkZWZpbmUgRkxBU0hfMjhGNDAwX1QJMHgwMDYyCQkvKiBNVCAgMjhGNDAwQjMgSUQgKCAgNE0gPSAyNTZLIHggMTYgKQkqLwotI2RlZmluZSBGTEFTSF8yOEY0MDBfQgkweDAwNjMJCS8qIE1UICAyOEY0MDBCMyBJRCAoICA0TSA9IDI1NksgeCAxNiApCSovCi0KLSNkZWZpbmUgRkxBU0hfSU5URUw4MDBUIDB4MDA3NAkJLyogSU5URUwgMjhGODAwQjNUICggIDhNID0gNTEySyB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfSU5URUw4MDBCIDB4MDA3NQkJLyogSU5URUwgMjhGODAwQjNCICggIDhNID0gNTEySyB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfSU5URUwxNjBUIDB4MDA3NgkJLyogSU5URUwgMjhGMTYwQjNUICggMTZNID0gIDEgTSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfSU5URUwxNjBCIDB4MDA3NwkJLyogSU5URUwgMjhGMTYwQjNCICggMTZNID0gIDEgTSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfSU5URUwzMjBUIDB4MDA3OAkJLyogSU5URUwgMjhGMzIwQjNUICggMzJNID0gIDIgTSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfSU5URUwzMjBCIDB4MDA3OQkJLyogSU5URUwgMjhGMzIwQjNCICggMzJNID0gIDIgTSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfSU5URUw2NDBUIDB4MDA3QQkJLyogSU5URUwgMjhGMzIwQjNUICggNjRNID0gIDQgTSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfSU5URUw2NDBCIDB4MDA3QgkJLyogSU5URUwgMjhGMzIwQjNCICggNjRNID0gIDQgTSB4IDE2ICkJKi8KLQotI2RlZmluZSBGTEFTSF8yOEYwMDhTNQkweDAwODAJCS8qIEludGVsIDI4RjAwOFM1ICAoICAxTSA9ICA2NEsgeCAxNiApCSovCi0jZGVmaW5lIEZMQVNIXzI4RjAxNlNWCTB4MDA4MQkJLyogSW50ZWwgMjhGMDE2U1YgICggMTZNID0gNTEyayB4IDMyICkJKi8KLSNkZWZpbmUgRkxBU0hfMjhGODAwX0IJMHgwMDgzCQkvKiBJbnRlbCBFMjhGODAwQiAgKCAgMU0gPSA/ICkJCSovCi0jZGVmaW5lIEZMQVNIX0FNMjlGODAwQiAweDAwODQJCS8qIEFNRCBBbTI5RjgwMEJCICAoICAxTSA9ID8gKQkJKi8KLSNkZWZpbmUgRkxBU0hfMjhGMzIwSjUJMHgwMDg1CQkvKiBJbnRlbCAyOEYzMjBKNSAgKCAgNE0gPSAxMjhLIHggMzIgKQkqLwotI2RlZmluZSBGTEFTSF8yOEYxNjBTMwkweDAwODYJCS8qIEludGVsIDI4RjE2MFMzICAoIDE2TSA9IDUxMksgeCAzMiApCSovCi0jZGVmaW5lIEZMQVNIXzI4RjMyMFMzCTB4MDA4OAkJLyogSW50ZWwgMjhGMzIwUzMgICggMzJNID0gNTEySyB4IDY0ICkJKi8KLSNkZWZpbmUgRkxBU0hfQU02NDBVCTB4MDA5MAkJLyogQU1EIEFtMjlMVjY0MFUgICggNjRNID0gNE0geCAxNiApCSovCi0jZGVmaW5lIEZMQVNIX0FNMDMzQwkweDAwOTEJCS8qIEFNRCBBTTI5TFYwMzMgICAoIDMyTSA9IDRNIHggOCApCSovCi0jZGVmaW5lIEZMQVNIX0xIMjhGMDE2U0NUIDB4MDA5MgkvKiBTaGFycCAyOEYwMTZTQ1QgKCA4IE1lZyBGbGFzaCBTSU1NICkgKi8KLSNkZWZpbmUgRkxBU0hfMjhGMTYwRjNCIDB4MDA5MwkJLyogSW50ZWwgMjhGMTYwRjNCICggMTZNID0gMU0geCAxNiApCSovCi0KLSNkZWZpbmUgRkxBU0hfMjhGNjQwSjUJMHgwMDk5CQkvKiBJTlRFTCAyOEY2NDBKNSAgKCA2NE0gPSAxMjhLIHggIDY0KQkqLwotCi0jZGVmaW5lIEZMQVNIXzI4RjgwMEMzVCAweDAwOUEJCS8qIEludGVsIDI4RjgwMEMzVCAoICA4TSA9IDUxMksgeCAxNiApCSovCi0jZGVmaW5lIEZMQVNIXzI4RjgwMEMzQiAweDAwOUIJCS8qIEludGVsIDI4RjgwMEMzQiAoICA4TSA9IDUxMksgeCAxNiApCSovCi0jZGVmaW5lIEZMQVNIXzI4RjE2MEMzVCAweDAwOUMJCS8qIEludGVsIDI4RjE2MEMzVCAoIDE2TSA9IDFNIHggMTYgKQkqLwotI2RlZmluZSBGTEFTSF8yOEYxNjBDM0IgMHgwMDlECQkvKiBJbnRlbCAyOEYxNjBDM0IgKCAxNk0gPSAxTSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfMjhGMzIwQzNUIDB4MDA5RQkJLyogSW50ZWwgMjhGMzIwQzNUICggMzJNID0gMk0geCAxNiApCSovCi0jZGVmaW5lIEZMQVNIXzI4RjMyMEMzQiAweDAwOUYJCS8qIEludGVsIDI4RjMyMEMzQiAoIDMyTSA9IDJNIHggMTYgKQkqLwotI2RlZmluZSBGTEFTSF8yOEY2NDBDM1QgMHgwMEEwCQkvKiBJbnRlbCAyOEY2NDBDM1QgKCA2NE0gPSA0TSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfMjhGNjQwQzNCIDB4MDBBMQkJLyogSW50ZWwgMjhGNjQwQzNCICggNjRNID0gNE0geCAxNiApCSovCi0jZGVmaW5lIEZMQVNIX0FNTFYzMjBVCTB4MDBBMgkJLyogQU1EIDI5TFYzMjBNICAgICggMzJNID0gMk0geCAxNiApCSovCi0jZGVmaW5lIEZMQVNIX0FNTFY2NDBVCTB4MDBBNAkJLyogQU1EIDI5TFY2NDBNICAgICggNjRNID0gNE0geCAxNiApCSovCi0jZGVmaW5lIEZMQVNIX0FNTFYxMjhVCTB4MDBBNgkJLyogQU1EIDI5TFYxMjhNCSAgICggMTI4TSA9IDhNIHggMTYgKQkqLwotI2RlZmluZSBGTEFTSF9BTUxWMzIwQiAgMHgwMEE3CQkvKiBBTUQgMjlMVjMyME1CICAgKCAzMk0gPSAyTSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfQU1MVjMyMFQJMHgwMEE4CQkvKiBBTUQgMjlMVjMyME1UICAgKCAzMk0gPSAyTSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfQU1MVjI1NlUJMHgwMEFBCQkvKiBBTUQgMjlMVjI1Nk0JICAgKCAyNTZNID0gMTZNIHggMTYgKQkqLwotI2RlZmluZSBGTEFTSF9NWExWMzIwQiAgMHgwMEFCCQkvKiBNWCAgMjlMVjMyME1CICAgKCAzMk0gPSAyTSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfTVhMVjMyMFQJMHgwMEFDCQkvKiBNWCAgMjlMVjMyME1UICAgKCAzMk0gPSAyTSB4IDE2ICkJKi8KLSNkZWZpbmUgRkxBU0hfMjhGMjU2TDE4VCAweDAwQjAJCS8qIEludGVsIDI4RjI1NkwxOFQgKCAzMk0gPSAxMjhLIHggMjU1ICsgMzJrIHggNCkgKi8KLSNkZWZpbmUgRkxBU0hfMjhGMjU2TDE4QiAweDAwQjEJCS8qIEludGVsIDI4RjI1NkwxOEIgKCAzMk0gPSAzMmsgeCA0ICsgMTI4SyB4IDI1NSkgICovCi0jZGVmaW5lIEZMQVNIXzI4RjI1NlAzMEIgMHgwMDFDCQkvKiBJbnRlbCAyOEYyNTZQMzBCICggMzJNID0gMzJrIHggNCArIDEyOEsgeCAyNTUpICAqLwotI2RlZmluZSBGTEFTSF8yOEYyNTZQMzBUIDB4MDAxOQkJLyogSW50ZWwgMjhGMjU2UDMwVCAoIDEyOEsgeCAyNTUgKyAzMk0gPSAzMmsgeCA0ICsgKi8KLSNkZWZpbmUgRkxBU0hfQU1ETDE2M1QJMHgwMEIyCQkvKiBBTUQgQU0yOURMMTYzVCAoMk0geCAxNiApCQkJKi8KLSNkZWZpbmUgRkxBU0hfQU1ETDE2M0IJMHgwMEIzCi0jZGVmaW5lIEZMQVNIXzI4RjY0SzMJMHgwMEI0CQkvKiBJbnRlbCAyOEY2NEszICAgKCAgNjRNKQkJKi8KLSNkZWZpbmUgRkxBU0hfMjhGMTI4SzMJMHgwMEI2CQkvKiBJbnRlbCAyOEYxMjhLMyAgKCAxMjhNID0gOE0geCAxNiApICAgKi8KLSNkZWZpbmUgRkxBU0hfMjhGMjU2SzMJMHgwMEI4CQkvKiBJbnRlbCAyOEYyNTZLMyAgKCAyNTZNID0gMTZNIHggMTYgKSAgKi8KLQotI2RlZmluZSBGTEFTSF8yOEYzMjBKM0EgMHgwMEMwCQkvKiBJTlRFTCAyOEYzMjBKM0EgKCAzMk0gPSAxMjhLIHggIDMyKQkqLwotI2RlZmluZSBGTEFTSF8yOEY2NDBKM0EgMHgwMEMyCQkvKiBJTlRFTCAyOEY2NDBKM0EgKCA2NE0gPSAxMjhLIHggIDY0KQkqLwotI2RlZmluZSBGTEFTSF8yOEYxMjhKM0EgMHgwMEM0CQkvKiBJTlRFTCAyOEYxMjhKM0EgKDEyOE0gPSAxMjhLIHggMTI4KQkqLwotCi0jZGVmaW5lIEZMQVNIX0ZVSkxWNjUwCTB4MDBEMAkJLyogRnVqaXRzdSBNQk0gMjlMVjY1MFVFLzY1MVVFCQkqLwotI2RlZmluZSBGTEFTSF9NVDI4UzRNMTZMQyAweDAwRTEJLyogTWljcm9uIE1UMjhTNE0xNkxDIAkJCSovCi0jZGVmaW5lIEZMQVNIX1MyOUdMMDY0TSAweDAwRjAJCS8qIFNwYW5zaW9uIFMyOUdMMDY0TS1SNgkJKi8KLQotI2RlZmluZSBGTEFTSF9VTktOT1dOCTB4RkZGRgkJLyogdW5rbm93biBmbGFzaCB0eXBlCQkJKi8KLQotCi0vKiBtYW51ZmFjdHVyZXIgb2Zmc2V0cwotICovCi0jZGVmaW5lIEZMQVNIX01BTl9BTUQJMHgwMDAwMDAwMAkvKiBBTUQJCQkJCSovCi0jZGVmaW5lIEZMQVNIX01BTl9GVUoJMHgwMDAxMDAwMAkvKiBGdWppdHN1CQkJCSovCi0jZGVmaW5lIEZMQVNIX01BTl9CTQkweDAwMDIwMDAwCS8qIEJyaWdodCBNaWNyb2VsZWN0cm9uaWNzCQkqLwotI2RlZmluZSBGTEFTSF9NQU5fTVgJMHgwMDAzMDAwMAkvKiBNWElDCQkJCQkqLwotI2RlZmluZSBGTEFTSF9NQU5fU1RNCTB4MDAwNDAwMDAKLSNkZWZpbmUgRkxBU0hfTUFOX1RPU0gJMHgwMDA1MDAwMAkvKiBUb3NoaWJhCQkJCSovCi0jZGVmaW5lIEZMQVNIX01BTl9FWENFTCAweDAwMDYwMDAwICAgICAgLyogRXhjZWwgU2VtaWNvbmR1Y3RvciAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZMQVNIX01BTl9TU1QJMHgwMDEwMDAwMAotI2RlZmluZSBGTEFTSF9NQU5fSU5URUwgMHgwMDMwMDAwMAotI2RlZmluZSBGTEFTSF9NQU5fTVQJMHgwMDQwMDAwMAotI2RlZmluZSBGTEFTSF9NQU5fU0hBUlAgMHgwMDUwMDAwMAotCi0KLSNkZWZpbmUgRkxBU0hfVFlQRU1BU0sJMHgwMDAwRkZGRgkvKiBleHRyYWN0IEZMQVNIIHR5cGUJaW5mb3JtYXRpb24JKi8KLSNkZWZpbmUgRkxBU0hfVkVORE1BU0sJMHhGRkZGMDAwMAkvKiBleHRyYWN0IEZMQVNIIHZlbmRvciBpbmZvcm1hdGlvbgkqLwotCi0jZGVmaW5lIEZMQVNIX0FNRF9DT01QCTB4MDAwRkZGRkYJLyogVXAgdG8gdGhpcyBJRCwgRkxBU0ggaXMgY29tcGF0aWJsZQkqLwotCQkJCQkvKiB3aXRoIEFNRCwgRnVqaXRzdSBhbmQgU1NUCQkqLwotCQkJCQkvKiAoSkVERUMgc3RhbmRhcmQgY29tbWFuZHMgPykJCSovCi0KLSNkZWZpbmUgRkxBU0hfQlRZUEUJMHgwMDAxCQkvKiBtYXNrIGZvciBib3R0b20gYm9vdCBzZWN0b3IgdHlwZQkqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBUaW1lb3V0IGNvbnN0YW50czoKLSAqCi0gKiBXZSBjYW4ndCBmaW5kIGFueSBzcGVjaWZpY2F0aW9ucyBmb3IgbWF4aW11bSBjaGlwIGVyYXNlIHRpbWVzLAotICogc28gdGhlc2UgdmFsdWVzIGFyZSBndWVzdGltYXRlcy4KLSAqLwotI2RlZmluZSBGTEFTSF9FUkFTRV9USU1FT1VUCTEyMDAwMAkvKiB0aW1lb3V0IGZvciBlcmFzaW5nIGluIG1zCQkqLwotI2RlZmluZSBGTEFTSF9XUklURV9USU1FT1VUCTUwMAkvKiB0aW1lb3V0IGZvciB3cml0ZXMgIGluIG1zCQkqLwotCi0jZW5kaWYgLyogIUNGR19OT19GTEFTSCAqLwotCi0jZW5kaWYgLyogX0ZMQVNIX0hfICovCmRpZmYgLS1naXQgYS9ib2FyZC9tY2MyMDAvbWNjMjAwLmMgYi9ib2FyZC9tY2MyMDAvbWNjMjAwLmMKaW5kZXggZDdmOTVjOC4uNDcwNzM5MCAxMDA2NDQKLS0tIGEvYm9hcmQvbWNjMjAwL21jYzIwMC5jCisrKyBiL2JvYXJkL21jYzIwMC9tY2MyMDAuYwpAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgIm10NDhsYzhtMzJiMi02LTcuaCIKICNlbmRpZgogCitleHRlcm4gZmxhc2hfaW5mb190IGZsYXNoX2luZm9bXTsJLyogRkxBU0ggY2hpcHMgaW5mbyAqLworCiAvLyMjI0NIRDogd2VubiBSQU1CT09UIGdlaGVuIHd1ZXJkZSwgLi4uLgogI2lmbmRlZiBDRkdfUkFNQk9PVAogc3RhdGljIHZvaWQgc2RyYW1fc3RhcnQgKGludCBoaV9hZGRyKQpAQCAtMjQ0LDQ2ICsyNDYsNTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBmbGFzaF9wcmVpbml0KHZvaWQpCi17Ci0JLyoKLQkgKiBOb3csIHdoZW4gd2UgYXJlIGluIFJBTSwgZW5hYmxlIGZsYXNoIHdyaXRlCi0JICogYWNjZXNzIGZvciBkZXRlY3Rpb24gcHJvY2Vzcy4KLQkgKiBOb3RlIHRoYXQgQ1NfQk9PVCBjYW5ub3QgYmUgY2xlYXJlZCB3aGVuCi0JICogZXhlY3V0aW5nIGluIGZsYXNoLgotCSAqLwotI2lmIGRlZmluZWQoQ09ORklHX01HVDUxMDApCi0JKih2dV9sb25nICopTVBDNVhYWF9BRERFQ1IgJj0gfigxIDw8IDI1KTsgLyogZGlzYWJsZSBDU19CT09UICovCi0JKih2dV9sb25nICopTVBDNVhYWF9BRERFQ1IgfD0gKDEgPDwgMTYpOyAvKiBlbmFibGUgQ1MwICovCi0jZW5kaWYKLQkqKHZ1X2xvbmcgKilNUEM1WFhYX0JPT1RDU19DRkcgJj0gfjB4MTsgLyogY2xlYXIgUk8gKi8KLX0KLQotdm9pZCBmbGFzaF9hZnRlcmluaXQodWxvbmcgc3RhcnQsIHVsb25nIHNpemUpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfQk9PVF9ST00pCi0JLyogYWRqdXN0IG1hcHBpbmcgKi8KLQkqKHZ1X2xvbmcgKilNUEM1WFhYX0NTMV9TVEFSVCA9Ci0JCQlTVEFSVF9SRUcoc3RhcnQpOwotCSoodnVfbG9uZyAqKU1QQzVYWFhfQ1MxX1NUT1AgPQotCQkJU1RPUF9SRUcoc3RhcnQsIHNpemUpOwotI2Vsc2UKLQkvKiBhZGp1c3QgbWFwcGluZyAqLwotCSoodnVfbG9uZyAqKU1QQzVYWFhfQk9PVENTX1NUQVJUID0gKih2dV9sb25nICopTVBDNVhYWF9DUzBfU1RBUlQgPQotCQkJU1RBUlRfUkVHKHN0YXJ0KTsKLQkqKHZ1X2xvbmcgKilNUEM1WFhYX0JPT1RDU19TVE9QID0gKih2dV9sb25nICopTVBDNVhYWF9DUzBfU1RPUCA9Ci0JCQlTVE9QX1JFRyhzdGFydCwgc2l6ZSk7Ci0jZW5kaWYKLX0KLQotCi1leHRlcm4gZmxhc2hfaW5mb190IGZsYXNoX2luZm9bXTsJLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMgKi8KLQogaW50IG1pc2NfaW5pdF9yICh2b2lkKQogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCS8qIGFkanVzdCBmbGFzaCBzdGFydCAqLwotCWdkLT5iZC0+YmlfZmxhc2hzdGFydCA9IGZsYXNoX2luZm9bMF0uc3RhcnRbMF07CisKKwkvKgorCSAqIEFkanVzdCBmbGFzaCBzdGFydCBhbmQgb2Zmc2V0IHRvIGRldGVjdGVkIHZhbHVlcworCSAqLworCWdkLT5iZC0+YmlfZmxhc2hzdGFydCA9IDAgLSBnZC0+YmQtPmJpX2ZsYXNoc2l6ZTsKKwlnZC0+YmQtPmJpX2ZsYXNob2Zmc2V0ID0gMDsKKworCS8qCisJICogQ2hlY2sgaWYgYm9vdCBGTEFTSCBpc24ndCBtYXggc2l6ZQorCSAqLworCWlmIChnZC0+YmQtPmJpX2ZsYXNoc2l6ZSA8ICgwIC0gQ0ZHX0ZMQVNIX0JBU0UpKSB7CisJCS8qIGFkanVzdCBtYXBwaW5nICovCisJCSoodnVfbG9uZyAqKU1QQzVYWFhfQk9PVENTX1NUQVJUID0gKih2dV9sb25nICopTVBDNVhYWF9DUzBfU1RBUlQgPQorCQkJU1RBUlRfUkVHKGdkLT5iZC0+YmlfZmxhc2hzdGFydCk7CisJCSoodnVfbG9uZyAqKU1QQzVYWFhfQk9PVENTX1NUT1AgPSAqKHZ1X2xvbmcgKilNUEM1WFhYX0NTMF9TVE9QID0KKwkJCVNUT1BfUkVHKGdkLT5iZC0+YmlfZmxhc2hzdGFydCwgZ2QtPmJkLT5iaV9mbGFzaHNpemUpOworCisJCS8qCisJCSAqIFJlLWNoZWNrIHRvIGdldCBjb3JyZWN0IGJhc2UgYWRkcmVzcworCQkgKi8KKwkJZmxhc2hfZ2V0X3NpemUoZ2QtPmJkLT5iaV9mbGFzaHN0YXJ0LCBDRkdfTUFYX0ZMQVNIX0JBTktTIC0gMSk7CisKKwkJLyoKKwkJICogUmUtZG8gZmxhc2ggcHJvdGVjdGlvbiB1cG9uIG5ldyBhZGRyZXNzZXMKKwkJICovCisJCWZsYXNoX3Byb3RlY3QgKEZMQUdfUFJPVEVDVF9DTEVBUiwKKwkJCSAgICAgICBnZC0+YmQtPmJpX2ZsYXNoc3RhcnQsIDB4ZmZmZmZmZmYsCisJCQkgICAgICAgJmZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LUyAtIDFdKTsKKworCQkvKiBNb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLworCQlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfU0VULAorCQkJICAgICAgIENGR19NT05JVE9SX0JBU0UsIENGR19NT05JVE9SX0JBU0UgKyBtb25pdG9yX2ZsYXNoX2xlbiAtIDEsCisJCQkgICAgICAgJmZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LUyAtIDFdKTsKKworCQkvKiBFbnZpcm9ubWVudCBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KKwkJZmxhc2hfcHJvdGVjdCAoRkxBR19QUk9URUNUX1NFVCwKKwkJCSAgICAgICBDRkdfRU5WX0FERFIsCisJCQkgICAgICAgQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUgLSAxLAorCQkJICAgICAgICZmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1MgLSAxXSk7CisKKwkJLyogUmVkdW5kYW50IGVudmlyb25tZW50IHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLworCQlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfU0VULAorCQkJICAgICAgIENGR19FTlZfQUREUl9SRURVTkQsCisJCQkgICAgICAgQ0ZHX0VOVl9BRERSX1JFRFVORCArIENGR19FTlZfU0laRV9SRURVTkQgLSAxLAorCQkJICAgICAgICZmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1MgLSAxXSk7CisJfQorCiAJcmV0dXJuICgwKTsKIH0KIApkaWZmIC0tZ2l0IGEvYm9hcmQvdHFtODV4eC90cW04NXh4LmMgYi9ib2FyZC90cW04NXh4L3RxbTg1eHguYwppbmRleCAxM2VhNmY0Li5iMzZiZWFkIDEwMDY0NAotLS0gYS9ib2FyZC90cW04NXh4L3RxbTg1eHguYworKysgYi9ib2FyZC90cW04NXh4L3RxbTg1eHguYwpAQCAtNDAsNyArNDAsNiBAQAogCiB2b2lkIGxvY2FsX2J1c19pbml0ICh2b2lkKTsKIGxvbmcgaW50IGZpeGVkX3NkcmFtICh2b2lkKTsKLXVsb25nIGZsYXNoX2dldF9zaXplICh1bG9uZyBiYXNlLCBpbnQgYmFua251bSk7CiAKICNpZmRlZiBDT05GSUdfQ1BNMgogLyoKQEAgLTI5Niw3ICsyOTUsNyBAQAogCiAJCS8qIE1vbml0b3IgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCiAJCWZsYXNoX3Byb3RlY3QgKEZMQUdfUFJPVEVDVF9TRVQsCi0JCQkgICAgICAgQ0ZHX01PTklUT1JfQkFTRSwgMHhmZmZmZmZmZiwKKwkJCSAgICAgICBDRkdfTU9OSVRPUl9CQVNFLCBDRkdfTU9OSVRPUl9CQVNFICsgbW9uaXRvcl9mbGFzaF9sZW4gLSAxLAogCQkJICAgICAgICZmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1MgLSAxXSk7CiAKIAkJLyogRW52aXJvbm1lbnQgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NmaV9mbGFzaC5jIGIvZHJpdmVycy9jZmlfZmxhc2guYwppbmRleCA0YjdhMTEwLi5kZjE3ZGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NmaV9mbGFzaC5jCisrKyBiL2RyaXZlcnMvY2ZpX2ZsYXNoLmMKQEAgLTEwNCwxMiArMTA0LDE1IEBACiAjZGVmaW5lIEFNRF9DTURfRVJBU0VfU0VDVE9SCQkweDMwCiAjZGVmaW5lIEFNRF9DTURfVU5MT0NLX1NUQVJUCQkweEFBCiAjZGVmaW5lIEFNRF9DTURfVU5MT0NLX0FDSwkJMHg1NQorI2RlZmluZSBBTURfQ01EX1dSSVRFX1RPX0JVRkZFUgkJMHgyNQorI2RlZmluZSBBTURfQ01EX1dSSVRFX0JVRkZFUl9DT05GSVJNCTB4MjkKIAogI2RlZmluZSBBTURfU1RBVFVTX1RPR0dMRQkJMHg0MAogI2RlZmluZSBBTURfU1RBVFVTX0VSUk9SCQkweDIwCi0jZGVmaW5lIEFNRF9BRERSX0VSQVNFX1NUQVJUCQkweDU1NQotI2RlZmluZSBBTURfQUREUl9TVEFSVAkJCTB4NTU1Ci0jZGVmaW5lIEFNRF9BRERSX0FDSwkJCTB4MkFBCisKKyNkZWZpbmUgQU1EX0FERFJfRVJBU0VfU1RBUlQJKChpbmZvLT5wb3J0d2lkdGggPT0gRkxBU0hfQ0ZJXzhCSVQpID8gMHhBQUEgOiAweDU1NSkKKyNkZWZpbmUgQU1EX0FERFJfU1RBUlQJCSgoaW5mby0+cG9ydHdpZHRoID09IEZMQVNIX0NGSV84QklUKSA/IDB4QUFBIDogMHg1NTUpCisjZGVmaW5lIEFNRF9BRERSX0FDSwkJKChpbmZvLT5wb3J0d2lkdGggPT0gRkxBU0hfQ0ZJXzhCSVQpID8gMHg1NTUgOiAweDJBQSkKIAogI2RlZmluZSBGTEFTSF9PRkZTRVRfQ0ZJCQkweDU1CiAjZGVmaW5lIEZMQVNIX09GRlNFVF9DRklfUkVTUAkJMHgxMApAQCAtMTc1LDYgKzE3OCwxMyBAQAogZmxhc2hfaW5mb190IGZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LU107CQkvKiBGTEFTSCBjaGlwcyBpbmZvICovCiAjZW5kaWYKIAorLyoKKyAqIENoZWNrIGlmIGNoaXAgd2lkdGggaXMgZGVmaW5lZC4gSWYgbm90LCBzdGFydCBkZXRlY3Rpbmcgd2l0aCA4Yml0LgorICovCisjaWZuZGVmIENGR19GTEFTSF9DRklfV0lEVEgKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9XSURUSAlGTEFTSF9DRklfOEJJVAorI2VuZGlmCisKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb25zCkBAIC0xOTAsNyArMjAwLDYgQEAKIHN0YXRpYyBpbnQgZmxhc2hfaXNzZXQgKGZsYXNoX2luZm9fdCAqIGluZm8sIGZsYXNoX3NlY3RfdCBzZWN0LCB1aW50IG9mZnNldCwgdWNoYXIgY21kKTsKIHN0YXRpYyBpbnQgZmxhc2hfdG9nZ2xlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBmbGFzaF9zZWN0X3Qgc2VjdCwgdWludCBvZmZzZXQsIHVjaGFyIGNtZCk7CiBzdGF0aWMgaW50IGZsYXNoX2RldGVjdF9jZmkgKGZsYXNoX2luZm9fdCAqIGluZm8pOwotdWxvbmcgZmxhc2hfZ2V0X3NpemUgKHVsb25nIGJhc2UsIGludCBiYW5rbnVtKTsKIHN0YXRpYyBpbnQgZmxhc2hfd3JpdGVfY2Zpd29yZCAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgY2Zpd29yZF90IGN3b3JkKTsKIHN0YXRpYyBpbnQgZmxhc2hfZnVsbF9zdGF0dXNfY2hlY2sgKGZsYXNoX2luZm9fdCAqIGluZm8sIGZsYXNoX3NlY3RfdCBzZWN0b3IsCiAJCQkJICAgIHVsb25nIHRvdXQsIGNoYXIgKnByb21wdCk7CkBAIC0zMjgsNiArMzM3LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogdW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKQpAQCAtMzQ1LDYgKzM1NSwyNCBAQAogCQkJCWksIGZsYXNoX2luZm9baV0uc2l6ZSwgZmxhc2hfaW5mb1tpXS5zaXplIDw8IDIwKTsKICNlbmRpZiAvKiBDRkdfRkxBU0hfUVVJRVRfVEVTVCAqLwogCQl9CisjaWZkZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKwkJZWxzZSB7CisJCQljaGFyICpzID0gZ2V0ZW52KCJ1bmxvY2siKTsKKworCQkJaWYgKCgocyA9IGdldGVudigidW5sb2NrIikpICE9IE5VTEwpICYmIChzdHJjbXAocywgInllcyIpID09IDApKSB7CisJCQkJLyoKKwkJCQkgKiBPbmx5IHRoZSBVLUJvb3QgaW1hZ2UgYW5kIGl0J3MgZW52aXJvbm1lbnQgaXMgcHJvdGVjdGVkLAorCQkJCSAqIGFsbCBvdGhlciBzZWN0b3JzIGFyZSB1bnByb3RlY3RlZCAodW5sb2NrZWQpIGlmIGZsYXNoCisJCQkJICogaGFyZHdhcmUgcHJvdGVjdGlvbiBpcyB1c2VkIChDRkdfRkxBU0hfUFJPVEVDVElPTikgYW5kCisJCQkJICogdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICJ1bmxvY2siIGlzIHNldCB0byAieWVzIi4KKwkJCQkgKi8KKwkJCQlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfQ0xFQVIsCisJCQkJCSAgICAgICBmbGFzaF9pbmZvW2ldLnN0YXJ0WzBdLAorCQkJCQkgICAgICAgZmxhc2hfaW5mb1tpXS5zdGFydFswXSArIGZsYXNoX2luZm9baV0uc2l6ZSAtIDEsCisJCQkJCSAgICAgICAmZmxhc2hfaW5mb1tpXSk7CisJCQl9CisJCX0KKyNlbmRpZiAvKiBDRkdfRkxBU0hfUFJPVEVDVElPTiAqLwogCX0KIAogCS8qIE1vbml0b3IgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCkBAIC01NjUsNyArNTkzLDIyIEBACiAJYnVmZmVyZWRfc2l6ZSA9IChpbmZvLT5wb3J0d2lkdGggLyBpbmZvLT5jaGlwd2lkdGgpOwogCWJ1ZmZlcmVkX3NpemUgKj0gaW5mby0+YnVmZmVyX3NpemU7CiAJd2hpbGUgKGNudCA+PSBpbmZvLT5wb3J0d2lkdGgpIHsKLQkJaSA9IGJ1ZmZlcmVkX3NpemUgPiBjbnQgPyBjbnQgOiBidWZmZXJlZF9zaXplOworCQkvKiBwcm9oaWJpdCBidWZmZXIgd3JpdGUgd2hlbiBidWZmZXJfc2l6ZSBpcyAxICovCisJCWlmIChpbmZvLT5idWZmZXJfc2l6ZSA9PSAxKSB7CisJCQljd29yZC5sID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5wb3J0d2lkdGg7IGkrKykKKwkJCQlmbGFzaF9hZGRfYnl0ZSAoaW5mbywgJmN3b3JkLCAqc3JjKyspOworCQkJaWYgKChyYyA9IGZsYXNoX3dyaXRlX2NmaXdvcmQgKGluZm8sIHdwLCBjd29yZCkpICE9IDApCisJCQkJcmV0dXJuIHJjOworCQkJd3AgKz0gaW5mby0+cG9ydHdpZHRoOworCQkJY250IC09IGluZm8tPnBvcnR3aWR0aDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogd3JpdGUgYnVmZmVyIHVudGlsIG5leHQgYnVmZmVyZWRfc2l6ZSBhbGlnbmVkIGJvdW5kYXJ5ICovCisJCWkgPSBidWZmZXJlZF9zaXplIC0gKHdwICUgYnVmZmVyZWRfc2l6ZSk7CisJCWlmIChpID4gY250KQorCQkJaSA9IGNudDsKIAkJaWYgKChyYyA9IGZsYXNoX3dyaXRlX2NmaWJ1ZmZlciAoaW5mbywgd3AsIHNyYywgaSkpICE9IEVSUl9PSykKIAkJCXJldHVybiByYzsKIAkJaSAtPSBpICYgKGluZm8tPnBvcnR3aWR0aCAtIDEpOwpAQCAtNzA1LDcgKzc0OCw3IEBACiAJLyogV2FpdCBmb3IgY29tbWFuZCBjb21wbGV0aW9uICovCiAJc3RhcnQgPSBnZXRfdGltZXIgKDApOwogCXdoaWxlIChmbGFzaF9pc19idXN5IChpbmZvLCBzZWN0b3IpKSB7Ci0JCWlmIChnZXRfdGltZXIgKHN0YXJ0KSA+IGluZm8tPmVyYXNlX2Jsa190b3V0ICogQ0ZHX0haKSB7CisJCWlmIChnZXRfdGltZXIgKHN0YXJ0KSA+IHRvdXQpIHsKIAkJCXByaW50ZiAoIkZsYXNoICVzIHRpbWVvdXQgYXQgYWRkcmVzcyAlbHggZGF0YSAlbHhcbiIsCiAJCQkJcHJvbXB0LCBpbmZvLT5zdGFydFtzZWN0b3JdLAogCQkJCWZsYXNoX3JlYWRfbG9uZyAoaW5mbywgc2VjdG9yLCAwKSk7CkBAIC03MjksNyArNzcyLDcgQEAKIAlzd2l0Y2ggKGluZm8tPnZlbmRvcikgewogCWNhc2UgQ0ZJX0NNRFNFVF9JTlRFTF9FWFRFTkRFRDoKIAljYXNlIENGSV9DTURTRVRfSU5URUxfU1RBTkRBUkQ6Ci0JCWlmICgocmV0Y29kZSAhPSBFUlJfT0spCisJCWlmICgocmV0Y29kZSA9PSBFUlJfT0spCiAJCSAgICAmJiAhZmxhc2hfaXNlcXVhbCAoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9TVEFUVVNfRE9ORSkpIHsKIAkJCXJldGNvZGUgPSBFUlJfSU5WQUw7CiAJCQlwcmludGYgKCJGbGFzaCAlcyBlcnJvciBhdCBhZGRyZXNzICVseFxuIiwgcHJvbXB0LApAQCAtOTg1LDcgKzEwMjgsNyBAQAogewogCWRlYnVnICgiZmxhc2ggZGV0ZWN0IGNmaVxuIik7CiAKLQlmb3IgKGluZm8tPnBvcnR3aWR0aCA9IEZMQVNIX0NGSV84QklUOworCWZvciAoaW5mby0+cG9ydHdpZHRoID0gQ0ZHX0ZMQVNIX0NGSV9XSURUSDsKIAkgICAgIGluZm8tPnBvcnR3aWR0aCA8PSBGTEFTSF9DRklfNjRCSVQ7IGluZm8tPnBvcnR3aWR0aCA8PD0gMSkgewogCQlmb3IgKGluZm8tPmNoaXB3aWR0aCA9IEZMQVNIX0NGSV9CWTg7CiAJCSAgICAgaW5mby0+Y2hpcHdpZHRoIDw9IGluZm8tPnBvcnR3aWR0aDsKQEAgLTExMDYsOCArMTE0OSw5IEBACiAJCWluZm8tPmVyYXNlX2Jsa190b3V0ID0gKHRtcCAqICgxIDw8IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sIEZMQVNIX09GRlNFVF9FTUFYX1RPVVQpKSk7CiAJCXRtcCA9IDEgPDwgZmxhc2hfcmVhZF91Y2hhciAoaW5mbywgRkxBU0hfT0ZGU0VUX1dCVE9VVCk7CiAJCWluZm8tPmJ1ZmZlcl93cml0ZV90b3V0ID0gKHRtcCAqICgxIDw8IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sIEZMQVNIX09GRlNFVF9XQk1BWF9UT1VUKSkpOwotCQl0bXAgPSAxIDw8IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sIEZMQVNIX09GRlNFVF9XVE9VVCk7Ci0JCWluZm8tPndyaXRlX3RvdXQgPSAodG1wICogKDEgPDwgZmxhc2hfcmVhZF91Y2hhciAoaW5mbywgRkxBU0hfT0ZGU0VUX1dNQVhfVE9VVCkpKSAvIDEwMDA7CisJCXRtcCA9ICgxIDw8IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sIEZMQVNIX09GRlNFVF9XVE9VVCkpICoKKwkJICAgICAgKDEgPDwgZmxhc2hfcmVhZF91Y2hhciAoaW5mbywgRkxBU0hfT0ZGU0VUX1dNQVhfVE9VVCkpOworCQlpbmZvLT53cml0ZV90b3V0ID0gdG1wIC8gMTAwMCArICh0bXAgJSAxMDAwID8gMSA6IDApOyAvKiByb3VuZCB1cCB3aGVuIGNvbnZlcnRpbmcgdG8gbXMgKi8KIAkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fQ0ZJOwogCQlpZiAoKGluZm8tPmludGVyZmFjZSA9PSBGTEFTSF9DRklfWDhYMTYpICYmIChpbmZvLT5jaGlwd2lkdGggPT0gRkxBU0hfQ0ZJX0JZOCkpIHsKIAkJCWluZm8tPnBvcnR3aWR0aCA+Pj0gMTsJLyogWFhYIC0gTmVlZCB0byB0ZXN0IG9uIHg4L3gxNiBpbiBwYXJhbGxlbC4gKi8KQEAgLTExMTgsMTMgKzExNjIsMjYgQEAKIAlyZXR1cm4gKGluZm8tPnNpemUpOwogfQogCisvKiBsb29wIHRocm91Z2ggdGhlIHNlY3RvcnMgZnJvbSB0aGUgaGlnaGVzdCBhZGRyZXNzCisgKiB3aGVuIHRoZSBwYXNzZWQgYWRkcmVzcyBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBzZWN0b3IgYWRkcmVzcworICogd2UgaGF2ZSBhIG1hdGNoCisgKi8KK3N0YXRpYyBmbGFzaF9zZWN0X3QgZmluZF9zZWN0b3IgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIGFkZHIpCit7CisJZmxhc2hfc2VjdF90IHNlY3RvcjsKKworCWZvciAoc2VjdG9yID0gaW5mby0+c2VjdG9yX2NvdW50IC0gMTsgc2VjdG9yID49IDA7IHNlY3Rvci0tKSB7CisJCWlmIChhZGRyID49IGluZm8tPnN0YXJ0W3NlY3Rvcl0pCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHNlY3RvcjsKK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgaW50IGZsYXNoX3dyaXRlX2NmaXdvcmQgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIGRlc3QsCiAJCQkJY2Zpd29yZF90IGN3b3JkKQogewotCiAJY2ZpcHRyX3QgY3RsYWRkcjsKIAljZmlwdHJfdCBjcHRyOwogCWludCBmbGFnOwpAQCAtMTE4OCwyNiArMTI0NSwxMiBAQAogCWlmIChmbGFnKQogCQllbmFibGVfaW50ZXJydXB0cyAoKTsKIAotCXJldHVybiBmbGFzaF9mdWxsX3N0YXR1c19jaGVjayAoaW5mbywgMCwgaW5mby0+d3JpdGVfdG91dCwgIndyaXRlIik7CisJcmV0dXJuIGZsYXNoX2Z1bGxfc3RhdHVzX2NoZWNrIChpbmZvLCBmaW5kX3NlY3RvciAoaW5mbywgZGVzdCksCisJCQkJCWluZm8tPndyaXRlX3RvdXQsICJ3cml0ZSIpOwogfQogCiAjaWZkZWYgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUKIAotLyogbG9vcCB0aHJvdWdoIHRoZSBzZWN0b3JzIGZyb20gdGhlIGhpZ2hlc3QgYWRkcmVzcwotICogd2hlbiB0aGUgcGFzc2VkIGFkZHJlc3MgaXMgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgc2VjdG9yIGFkZHJlc3MKLSAqIHdlIGhhdmUgYSBtYXRjaAotICovCi1zdGF0aWMgZmxhc2hfc2VjdF90IGZpbmRfc2VjdG9yIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBhZGRyKQotewotCWZsYXNoX3NlY3RfdCBzZWN0b3I7Ci0KLQlmb3IgKHNlY3RvciA9IGluZm8tPnNlY3Rvcl9jb3VudCAtIDE7IHNlY3RvciA+PSAwOyBzZWN0b3ItLSkgewotCQlpZiAoYWRkciA+PSBpbmZvLT5zdGFydFtzZWN0b3JdKQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiBzZWN0b3I7Ci19Ci0KIHN0YXRpYyBpbnQgZmxhc2hfd3JpdGVfY2ZpYnVmZmVyIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBkZXN0LCB1Y2hhciAqIGNwLAogCQkJCSAgaW50IGxlbikKIHsKQEAgLTEyMTYsNjYgKzEyNTksMTA2IEBACiAJaW50IHJldGNvZGU7CiAJdm9sYXRpbGUgY2ZpcHRyX3Qgc3JjOwogCXZvbGF0aWxlIGNmaXB0cl90IGRzdDsKLQkvKiBidWZmZXJlZCB3cml0ZXMgaW4gdGhlIEFNRCBjaGlwIHNldCBpcyBub3Qgc3VwcG9ydGVkIHlldCAqLwotCWlmKChpbmZvLT52ZW5kb3IgPT0gIENGSV9DTURTRVRfQU1EX1NUQU5EQVJEKSB8fAotCQkoaW5mby0+dmVuZG9yID09IENGSV9DTURTRVRfQU1EX0VYVEVOREVEKSkKLQkJcmV0dXJuIEVSUl9JTlZBTDsKIAotCXNyYy5jcCA9IGNwOwotCWRzdC5jcCA9ICh1Y2hhciAqKSBkZXN0OwotCXNlY3RvciA9IGZpbmRfc2VjdG9yIChpbmZvLCBkZXN0KTsKLQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3RvciwgMCwgRkxBU0hfQ01EX0NMRUFSX1NUQVRVUyk7Ci0JZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX0NNRF9XUklURV9UT19CVUZGRVIpOwotCWlmICgocmV0Y29kZSA9Ci0JICAgICBmbGFzaF9zdGF0dXNfY2hlY2sgKGluZm8sIHNlY3RvciwgaW5mby0+YnVmZmVyX3dyaXRlX3RvdXQsCi0JCQkJICJ3cml0ZSB0byBidWZmZXIiKSkgPT0gRVJSX09LKSB7Ci0JCS8qIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGxvb3BzIGJ5IHRoZSB3aWR0aCBvZiB0aGUgcG9ydAkqLwotCQlzd2l0Y2ggKGluZm8tPnBvcnR3aWR0aCkgewotCQljYXNlIEZMQVNIX0NGSV84QklUOgotCQkJY250ID0gbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgotCQkJY250ID0gbGVuID4+IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBGTEFTSF9DRklfMzJCSVQ6Ci0JCQljbnQgPSBsZW4gPj4gMjsKLQkJCWJyZWFrOwotCQljYXNlIEZMQVNIX0NGSV82NEJJVDoKLQkJCWNudCA9IGxlbiA+PiAzOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gRVJSX0lOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsICh1Y2hhcikgY250IC0gMSk7Ci0JCXdoaWxlIChjbnQtLSA+IDApIHsKKwlzd2l0Y2ggKGluZm8tPnZlbmRvcikgeworCWNhc2UgQ0ZJX0NNRFNFVF9JTlRFTF9TVEFOREFSRDoKKwljYXNlIENGSV9DTURTRVRfSU5URUxfRVhURU5ERUQ6CisJCXNyYy5jcCA9IGNwOworCQlkc3QuY3AgPSAodWNoYXIgKikgZGVzdDsKKwkJc2VjdG9yID0gZmluZF9zZWN0b3IgKGluZm8sIGRlc3QpOworCQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3RvciwgMCwgRkxBU0hfQ01EX0NMRUFSX1NUQVRVUyk7CisJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9DTURfV1JJVEVfVE9fQlVGRkVSKTsKKwkJaWYgKChyZXRjb2RlID0gZmxhc2hfc3RhdHVzX2NoZWNrIChpbmZvLCBzZWN0b3IsIGluZm8tPmJ1ZmZlcl93cml0ZV90b3V0LAorCQkJCQkJICAgIndyaXRlIHRvIGJ1ZmZlciIpKSA9PSBFUlJfT0spIHsKKwkJCS8qIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGxvb3BzIGJ5IHRoZSB3aWR0aCBvZiB0aGUgcG9ydAkqLwogCQkJc3dpdGNoIChpbmZvLT5wb3J0d2lkdGgpIHsKIAkJCWNhc2UgRkxBU0hfQ0ZJXzhCSVQ6Ci0JCQkJKmRzdC5jcCsrID0gKnNyYy5jcCsrOworCQkJCWNudCA9IGxlbjsKIAkJCQlicmVhazsKIAkJCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgotCQkJCSpkc3Qud3ArKyA9ICpzcmMud3ArKzsKKwkJCQljbnQgPSBsZW4gPj4gMTsKIAkJCQlicmVhazsKIAkJCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgotCQkJCSpkc3QubHArKyA9ICpzcmMubHArKzsKKwkJCQljbnQgPSBsZW4gPj4gMjsKIAkJCQlicmVhazsKIAkJCWNhc2UgRkxBU0hfQ0ZJXzY0QklUOgotCQkJCSpkc3QubGxwKysgPSAqc3JjLmxscCsrOworCQkJCWNudCA9IGxlbiA+PiAzOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlyZXR1cm4gRVJSX0lOVkFMOwogCQkJCWJyZWFrOwogCQkJfQorCQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsICh1Y2hhcikgY250IC0gMSk7CisJCQl3aGlsZSAoY250LS0gPiAwKSB7CisJCQkJc3dpdGNoIChpbmZvLT5wb3J0d2lkdGgpIHsKKwkJCQljYXNlIEZMQVNIX0NGSV84QklUOgorCQkJCQkqZHN0LmNwKysgPSAqc3JjLmNwKys7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgorCQkJCQkqZHN0LndwKysgPSAqc3JjLndwKys7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgorCQkJCQkqZHN0LmxwKysgPSAqc3JjLmxwKys7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgRkxBU0hfQ0ZJXzY0QklUOgorCQkJCQkqZHN0LmxscCsrID0gKnNyYy5sbHArKzsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJcmV0dXJuIEVSUl9JTlZBTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsCisJCQkJCSBGTEFTSF9DTURfV1JJVEVfQlVGRkVSX0NPTkZJUk0pOworCQkJcmV0Y29kZSA9IGZsYXNoX2Z1bGxfc3RhdHVzX2NoZWNrIChpbmZvLCBzZWN0b3IsCisJCQkJCQkJICAgaW5mby0+YnVmZmVyX3dyaXRlX3RvdXQsCisJCQkJCQkJICAgImJ1ZmZlciB3cml0ZSIpOwogCQl9Ci0JCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLAotCQkJCSBGTEFTSF9DTURfV1JJVEVfQlVGRkVSX0NPTkZJUk0pOwotCQlyZXRjb2RlID0KLQkJCWZsYXNoX2Z1bGxfc3RhdHVzX2NoZWNrIChpbmZvLCBzZWN0b3IsCi0JCQkJCQkgaW5mby0+YnVmZmVyX3dyaXRlX3RvdXQsCi0JCQkJCQkgImJ1ZmZlciB3cml0ZSIpOworCQlyZXR1cm4gcmV0Y29kZTsKKworCWNhc2UgQ0ZJX0NNRFNFVF9BTURfU1RBTkRBUkQ6CisJY2FzZSBDRklfQ01EU0VUX0FNRF9FWFRFTkRFRDoKKwkJc3JjLmNwID0gY3A7CisJCWRzdC5jcCA9ICh1Y2hhciAqKSBkZXN0OworCQlzZWN0b3IgPSBmaW5kX3NlY3RvciAoaW5mbywgZGVzdCk7CisKKwkJZmxhc2hfdW5sb2NrX3NlcShpbmZvLDApOworCQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3RvciwgMCwgQU1EX0NNRF9XUklURV9UT19CVUZGRVIpOworCisJCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7CisJCWNhc2UgRkxBU0hfQ0ZJXzhCSVQ6CisJCQljbnQgPSBsZW47CisJCQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3RvciwgMCwgICh1Y2hhcikgY250IC0gMSk7CisJCQl3aGlsZSAoY250LS0gPiAwKSAqZHN0LmNwKysgPSAqc3JjLmNwKys7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9DRklfMTZCSVQ6CisJCQljbnQgPSBsZW4gPj4gMTsKKwkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCAgKHVjaGFyKSBjbnQgLSAxKTsKKwkJCXdoaWxlIChjbnQtLSA+IDApICpkc3Qud3ArKyA9ICpzcmMud3ArKzsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX0NGSV8zMkJJVDoKKwkJCWNudCA9IGxlbiA+PiAyOworCQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsICAodWNoYXIpIGNudCAtIDEpOworCQkJd2hpbGUgKGNudC0tID4gMCkgKmRzdC5scCsrID0gKnNyYy5scCsrOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfQ0ZJXzY0QklUOgorCQkJY250ID0gbGVuID4+IDM7CisJCQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3RvciwgMCwgICh1Y2hhcikgY250IC0gMSk7CisJCQl3aGlsZSAoY250LS0gPiAwKSAqZHN0LmxscCsrID0gKnNyYy5sbHArKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIEVSUl9JTlZBTDsKKwkJfQorCisJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCBBTURfQ01EX1dSSVRFX0JVRkZFUl9DT05GSVJNKTsKKwkJcmV0Y29kZSA9IGZsYXNoX2Z1bGxfc3RhdHVzX2NoZWNrIChpbmZvLCBzZWN0b3IsIGluZm8tPmJ1ZmZlcl93cml0ZV90b3V0LAorCQkJCQkJICAgImJ1ZmZlciB3cml0ZSIpOworCQlyZXR1cm4gcmV0Y29kZTsKKworCWRlZmF1bHQ6CisJCWRlYnVnICgiVW5rbm93biBDb21tYW5kIFNldFxuIik7CisJCXJldHVybiBFUlJfSU5WQUw7CiAJfQotCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9DTURfQ0xFQVJfU1RBVFVTKTsKLQlyZXR1cm4gcmV0Y29kZTsKIH0KICNlbmRpZiAvKiBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSAqLwogI2VuZGlmIC8qIENGR19GTEFTSF9DRkkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9tY2MyMDAuaCBiL2luY2x1ZGUvY29uZmlncy9tY2MyMDAuaAppbmRleCA1ZjFmZDg4Li5hOGE4OTM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvbWNjMjAwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL21jYzIwMC5oCkBAIC01MiwxNSArNTIsMTEgQEAKICNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwLCAyMzA0MDAgfQogCi0KLS8vIyMjQ0hEOiBNUEM1MTAwIGdpYnQgZXMgbmljaHQgLT4gd2VnIGRhbWl0IQotI2lmZGVmIENPTkZJR19NUEM1MjAwCS8qIE1QQzUxMDAgUENJIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiAqLwogLyoKICAqIFBDSSBNYXBwaW5nOgogICogMHg0MDAwMDAwMCAtIDB4NGZmZmZmZmYgLSBQQ0kgTWVtb3J5CiAgKiAweDUwMDAwMDAwIC0gMHg1MGZmZmZmZiAtIFBDSSBJTyBTcGFjZQogICovCi0vL1dlbm4gZ2VodCBQQ0kgcmF1cyEKICNkZWZpbmUgQ09ORklHX1BDSQkJMQogI2RlZmluZSBDT05GSUdfUENJX1BOUAkJMQogI2RlZmluZSBDT05GSUdfUENJX1NDQU5fU0hPVwkxCkBAIC04MiwxMiArNzgsNiBAQAogCiAjZGVmaW5lIEFERF9QQ0lfQ01EIAkJQ0ZHX0NNRF9QQ0kKIAotI2Vsc2UJLyogTVBDNTEwMCAqLwotCi0jZGVmaW5lIEFERF9QQ0lfQ01ECQkwICAvKiBubyBDRkdfQ01EX1BDSSAqLwotCi0jZW5kaWYKLQogLyogUGFydGl0aW9ucyAqLwogI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgogCkBAIC0xMDAsMTIgKzkwLDcgQEAKICNkZWZpbmUgQUREX1VTQl9DTUQgICAgICAgICAgICAgMAogI2VuZGlmCiAKLS8vIyMjQ0hEOiBCT09UUk9tIHJhdXMhCi0jaWYgZGVmaW5lZChDT05GSUdfQk9PVF9ST00pCi0jZGVmaW5lIEFERF9ET0NfQ01EICAgICAgICAgICAgIDAKLSNlbHNlCiAjZGVmaW5lIEFERF9ET0NfQ01EICAgICAgICAgICAgIENGR19DTURfRE9DCi0jZW5kaWYKIAogLyoKICAqIFN1cHBvcnRlZCBjb21tYW5kcwpAQCAtMTIwLDcgKzEwNSw2IEBACiAJCQkJQ0ZHX0NNRF9FRVBST00JfCBcCiAJCQkJQ0ZHX0NNRF9GQVQJfCBcCiAJCQkJQ0ZHX0NNRF9JMkMJfCBcCi0JCQkJQ0ZHX0NNRF9JREUJfCBcCiAJCQkJQ0ZHX0NNRF9ORlMJfCBcCiAJCQkJQ0ZHX0NNRF9TTlRQCSkKIApAQCAtMTQwLDcgKzEyNCw3IEBACiAKICNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQkJXAogCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQlcCi0JImhvc3RuYW1lPWxtcGNcMCIJCQkJCQlcCisJImhvc3RuYW1lPW1jYzIwMFwwIgkJCQkJCVwKIAkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiCQkJXAogCQkibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofVwwIgkJCVwKIAkicmFtYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3JhbSByd1wwIgkJCVwKQEAgLTE1MiwyNCArMTM2LDI4IEBACiAJImZsYXNoX3NlbGY9cnVuIHJhbWFyZ3MgYWRkaXA7IgkJCQkJXAogCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn0gJHtyYW1kaXNrX2FkZHJ9XDAiCQlcCiAJIm5ldF9uZnM9dGZ0cCAyMDAwMDAgJHtib290ZmlsZX07cnVuIG5mc2FyZ3MgYWRkaXA7Ym9vdG1cMCIJXAotCSJyb290cGF0aD0vb3B0L2VsZGszMC9wcGNfODJ4eFwwIgkJCQlcCi0JImJvb3RmaWxlPS90ZnRwYm9vdC9MTVBDL3VJbWFnZVwwIgkJCQlcCisJInJvb3RwYXRoPS9vcHQvZWxkay9wcGNfODJ4eFwwIgkJCQkJXAorCSJib290ZmlsZT0vdGZ0cGJvb3QvbWNjMjAwL3VJbWFnZVwwIgkJCQlcCiAJImJhdWRyYXRlPTExNTIwMFwwIgkJCQkJCVwKLQkic2VydmVyaXA9MTkyLjE2OC4wLjFcMCIJCQkJCVwKLQkiaXBhZGRyPTE5Mi4xNjguMC4yXDAiCQkJCQkJXAotCSJldGhhZGRyPTAwOjAyOjQ0OjdkOjczOjNiXDAiCQkJCQkJXAorCSJsb2FkPXRmdHAgMTAwMDAwIC90ZnRwYm9vdC9tY2MyMDAvdS1ib290LmJpblwwIgkJXAorCSJ1cGRhdGU9cHJvdGVjdCBvZmYgZmZmMDAwMDAgZmZmM2ZmZmY7ZXJhIGZmZjAwMDAwIGZmZjNmZmZmOyIJXAorCQkiY3AuYiAxMDAwMDAgZmZmMDAwMDAgNDAwMDA7IgkJCSAgICAgICAgXAorCQkic2V0ZW52IGZpbGVzaXplO3NhdmVlbnZcMCIJCQkJXAorCSJ1cGQ9cnVuIGxvYWQ7cnVuIHVwZGF0ZVwwIgkJCQkJXAorCSJzZXJ2ZXJpcD0xOTIuMTY4LjEuMVwwIgkJCQkJXAorCSJpcGFkZHI9MTkyLjE2OC4xMzMuMTQ0XDAiCQkJCQlcCisJIm5ldG1hc2s9MjU1LjI1NS4wLjBcMCIJCQkJCQlcCisJInVubG9jaz15ZXNcMCIJCQkJCQkJXAorCSJldGhhZGRyPTAwOjAyOjQ0OjdkOjczOjNiXDAiCQkJCQlcCiAJIiIKIAogI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJInJ1biBmbGFzaF9zZWxmIgogCi0jaWYgZGVmaW5lZChDT05GSUdfTVBDNTIwMCkKIC8qCiAgKiBJUEIgQnVzIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24uCiAgKi8KICN1bmRlZiBDRkdfSVBCU1BFRURfMTMzICAgCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLwotI2VuZGlmCiAKLS8vIyMjQ0hEOiBFRVByb20gY29uZmlnIFJUQyBjb25maWcgc29sbHRlIHJhdXMsIGdpYnQgZXMgbmNpaHQgYmVpIHVucyBhdWYgSTJDIQogLyoKICAqIEkyQyBjb25maWd1cmF0aW9uCiAgKi8KQEAgLTE5MywxMSArMTgxLDkgQEAKICNkZWZpbmUgQ09ORklHX1JUQ19QQ0Y4NTYzCiAjZGVmaW5lIENGR19JMkNfUlRDX0FERFIJCTB4NTEKIAotLy8jIyNDSEQ6IG1laW5lciBBbnNpY2h0IG5hY2ggYXVjaCByYXVzIQogLyoKICAqIERpc2stT24tQ2hpcCBjb25maWd1cmF0aW9uCiAgKi8KLQogI2RlZmluZSBDRkdfRE9DX1NIT1JUX1RJTUVPVVQKICNkZWZpbmUgQ0ZHX01BWF9ET0NfREVWSUNFCTEJLyogTWF4IG51bWJlciBvZiBET0MgZGV2aWNlcwkqLwogCkBAIC0yMDYsNTYgKzE5Miw0NiBAQAogI2RlZmluZSBDRkdfRE9DX0JBU0UJCTB4RTAwMDAwMDAKICNkZWZpbmUgQ0ZHX0RPQ19TSVpFCQkweDAwMTAwMDAwCiAKLS8vIyMjQ0hEOiBCT09UUk9tIHJhdXMhCi0jaWYgZGVmaW5lZChDT05GSUdfQk9PVF9ST00pCiAvKgogICogRmxhc2ggY29uZmlndXJhdGlvbiAoOCwxNiBvciAzMiBNQikKICAqIFRFWFQgYmFzZSBhbHdheXMgYXQgMHhGRkYwMDAwMAogICogRU5WX0FERFIgYWx3YXlzIGF0ICAweEZGRjQwMDAwCi0gKiBGTEFTSF9CQVNFIGF0IDB4RkMwMDAwMDAgZm9yIDMyIE1CCi0gKiAgICAgICAgICAgICAgIDB4RkQwMDAwMDAgZm9yIDE2IE1CCi0gKiAgICAgICAgICAgICAgIDB4RkQ4MDAwMDAgZm9yICA4IE1CCi0gKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4ZmMwMDAwMDAKLSNkZWZpbmUgQ0ZHX0ZMQVNIX1NJWkUJCTB4MDIwMDAwMDAKLSNkZWZpbmUgQ0ZHX0JPT1RST01fQkFTRQkweEZGRjAwMDAwCi0jZGVmaW5lIENGR19CT09UUk9NX1NJWkUJMHgwMDA4MDAwMAotI2RlZmluZSBDRkdfRU5WX0FERFIJCSgweEZERjAwMDAwICsgMHg0MDAwMCkKLSNlbHNlCi0vKgotICogRmxhc2ggY29uZmlndXJhdGlvbiAoOCwxNiBvciAzMiBNQikKLSAqIFRFWFQgYmFzZSBhbHdheXMgYXQgMHhGRkYwMDAwMAotICogRU5WX0FERFIgYWx3YXlzIGF0ICAweEZGRjQwMDAwCi0gKiBGTEFTSF9CQVNFIGF0IDB4RkUwMDAwMDAgZm9yIDMyIE1CCisgKiBGTEFTSF9CQVNFIGF0IDB4RkMwMDAwMDAgZm9yIDY0IE1CIChvbmx5IDMyTUIgYXJlIHN1cHBvcnRlZCwgbm90IGVub3VnaCBhZGRyIGxpbmVzISEhKQorICogICAgICAgICAgICAgICAweEZFMDAwMDAwIGZvciAzMiBNQgogICogICAgICAgICAgICAgICAweEZGMDAwMDAwIGZvciAxNiBNQgogICogICAgICAgICAgICAgICAweEZGODAwMDAwIGZvciAgOCBNQgogICovCi0jZGVmaW5lIENGR19GTEFTSF9CQVNFCQkweGZlMDAwMDAwCi0jZGVmaW5lIENGR19GTEFTSF9TSVpFCQkweDAyMDAwMDAwCi0jZGVmaW5lIENGR19FTlZfQUREUgkJKDB4RkZGMDAwMDAgKyAweDQwMDAwKQotI2VuZGlmCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtIG9mIG1lbW9yeSBiYW5rcyAgICAgICovCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQkweGZjMDAwMDAwCisjZGVmaW5lIENGR19GTEFTSF9TSVpFCQkweDA0MDAwMDAwCiAKLSNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTEyOAkvKiBtYXggbnVtIG9mIHNlY3RzIG9uIG9uZSBjaGlwICovCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkJLyogVGhlIGZsYXNoIGlzIENGSSBjb21wYXRpYmxlCSovCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogVXNlIGNvbW1vbiBDRkkgZHJpdmVyCSovCiAKLSNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMjQwMDAwCS8qIEZsYXNoIEVyYXNlIFRpbWVvdXQgKGluIG1zKSAgKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIEZsYXNoIFdyaXRlIFRpbWVvdXQgKGluIG1zKSAgKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX0xPQ0tfVE9VVAk1CS8qIFRpbWVvdXQgZm9yIEZsYXNoIFNldCBMb2NrIEJpdCAoaW4gbXMpICovCi0jZGVmaW5lIENGR19GTEFTSF9VTkxPQ0tfVE9VVAkxMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBDbGVhciBMb2NrIEJpdHMgKGluIG1zKSAqLwotI2RlZmluZSBDRkdfRkxBU0hfUFJPVEVDVElPTgkJLyogIlJlYWwiIChoYXJkd2FyZSkgc2VjdG9ycyBwcm90ZWN0aW9uICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCXsgQ0ZHX0ZMQVNIX0JBU0UgfQogCi0jZGVmaW5lIFBIWVNfRkxBU0hfU0VDVF9TSVpFCTB4MDAwNDAwMDAgLyogMjU2IEtCIHNlY3RvcnMgKHgyKSAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAk1MTIJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCiAKLSN1bmRlZiBDT05GSUdfRkxBU0hfMTZCSVQJLyogRmxhc2ggaXMgMzItYml0ICovCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFIDEJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikJKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04JMQkvKiBoYXJkd2FyZSBmbGFzaCBwcm90ZWN0aW9uCQkqLwogCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpCSovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCiAKLS8qCi0gKiBFbnZpcm9ubWVudCBzZXR0aW5ncwotICovCi0jZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQotI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MTAwMDAKLSNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHg0MDAwMAotI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQkxCisjZGVmaW5lIENGR19GTEFTSF9FTVBUWV9JTkZPCQkvKiBwcmludCAnRScgZm9yIGVtcHR5IHNlY3RvciBvbiBmbGluZm8gKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QJMQkvKiBkb24ndCB3YXJuIHVwb24gdW5rbm93biBmbGFzaAkqLworCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0ggICAgIDEJLyogdXNlIEZMQVNIIGZvciBlbnZpcm9ubWVudCB2YXJzCSovCisKKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHg0MDAwMCAJLyogc2l6ZSBvZiBvbmUgY29tcGxldGUgc2VjdG9yCSovCisjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19NT05JVE9SX0JBU0UgKyBDRkdfTU9OSVRPUl9MRU4pCisjZGVmaW5lCUNGR19FTlZfU0laRQkJMHgyMDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCisKKy8qIEFkZHJlc3MgYW5kIHNpemUgb2YgUmVkdW5kYW50IEVudmlyb25tZW50IFNlY3RvcgkqLworI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFX1JFRFVORAkoQ0ZHX0VOVl9TSVpFKQorCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEJLyogYWxsb3cgbW9kaWZpY2F0aW9uIG9mIHZlbmRvciBwYXJhbXMgKi8KIAogLyoKICAqIE1lbW9yeSBtYXAKQEAgLTI3OSw3ICsyNTUsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uaXRvcgkqLwotI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKDEyOCA8PCAxMCkJLyogUmVzZXJ2ZSAxMjgga0IgZm9yIG1hbGxvYygpCSovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoNTEyIDw8IDEwKQkvKiBSZXNlcnZlIDUxMiBrQiBmb3IgbWFsbG9jKCkJKi8KICNkZWZpbmUgQ0ZHX0JPT1RNQVBTWgkJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXggKi8KIAogLyoKQEAgLTI5MCw3ICsyNjYsNyBAQAogICogRGVmaW5lIENPTkZJR19GRUNfMTBNQklUIHRvIGZvcmNlIEZFQyBhdCAxME1iCiAgKi8KIC8qICNkZWZpbmUgQ09ORklHX0ZFQ18xME1CSVQgMSAqLwotI2RlZmluZSBDT05GSUdfUEhZX0FERFIJCTB4MDAKKyNkZWZpbmUgQ09ORklHX1BIWV9BRERSCQkxCiAKIC8qCiAgKiBHUElPIGNvbmZpZ3VyYXRpb24KQEAgLTMyNCwyNSArMzAwLDkgQEAKIC8qCiAgKiBWYXJpb3VzIGxvdy1sZXZlbCBzZXR0aW5ncwogICovCi0jaWYgZGVmaW5lZChDT05GSUdfTVBDNTIwMCkKICNkZWZpbmUgQ0ZHX0hJRDBfSU5JVAkJSElEMF9JQ0UgfCBISUQwX0lDRkkKICNkZWZpbmUgQ0ZHX0hJRDBfRklOQUwJCUhJRDBfSUNFCi0jZWxzZQotI2RlZmluZSBDRkdfSElEMF9JTklUCQkwCi0jZGVmaW5lIENGR19ISUQwX0ZJTkFMCQkwCi0jZW5kaWYKIAotLy8jIyNDSEQ6IGhpZXIgc29sbHRlIGRhcyBCT09UX1JPTSByYXVzIQotI2lmIGRlZmluZWQoQ09ORklHX0JPT1RfUk9NKQotI2RlZmluZSBDRkdfQk9PVENTX1NUQVJUCUNGR19CT09UUk9NX0JBU0UKLSNkZWZpbmUgQ0ZHX0JPT1RDU19TSVpFCQlDRkdfQk9PVFJPTV9TSVpFCi0jZGVmaW5lIENGR19CT09UQ1NfQ0ZHCQkweDAwMDQ3ODAwCi0jZGVmaW5lIENGR19DUzBfU1RBUlQJCUNGR19CT09UUk9NX0JBU0UKLSNkZWZpbmUgQ0ZHX0NTMF9TSVpFCQlDRkdfQk9PVFJPTV9TSVpFCi0jZGVmaW5lIENGR19DUzFfU1RBUlQJCUNGR19GTEFTSF9CQVNFCi0jZGVmaW5lIENGR19DUzFfU0laRQkJQ0ZHX0ZMQVNIX1NJWkUKLSNkZWZpbmUgQ0ZHX0NTMV9DRkcJCTB4MDAwNGZiMDAKLSNlbHNlCiAjZGVmaW5lIENGR19CT09UQ1NfU1RBUlQJQ0ZHX0ZMQVNIX0JBU0UKICNkZWZpbmUgQ0ZHX0JPT1RDU19TSVpFCQlDRkdfRkxBU0hfU0laRQogI2RlZmluZSBDRkdfQk9PVENTX0NGRwkJMHgwMDA0ZmIwMApAQCAtMzUxLDcgKzMxMSw2IEBACiAjZGVmaW5lIENGR19DUzFfU1RBUlQJCUNGR19ET0NfQkFTRQogI2RlZmluZSBDRkdfQ1MxX1NJWkUJCUNGR19ET0NfU0laRQogI2RlZmluZSBDRkdfQ1MxX0NGRwkJMHgwMDA0NzgwMAotI2VuZGlmCiAKICNkZWZpbmUgQ0ZHX0NTX0JVUlNUCQkweDAwMDAwMDAwCiAjZGVmaW5lIENGR19DU19ERUFEQ1lDTEUJMHgzMzMzMzMzMwpAQCAtMzY1LDM4ICszMjQsNCBAQAogI2RlZmluZSBDT05GSUdfVVNCX0NMT0NLCTB4MDAwMUJCQkIKICNkZWZpbmUgQ09ORklHX1VTQl9DT05GSUcJMHgwMDAwNTAwMAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBJREUvQVRBIHN0dWZmIFN1cHBvcnRzIElERSBoYXJkZGlzawotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLS8vIyMjQ0hEOiBlaWdlbnRsaWNoIGRhcyBnYW56ZSBJREUgemV1Z3MgcmF1cyAoSURFIHdpcmQgZGVyemVpdCBuY2lodCBtZWhyIGdlc2Nhbm50ISkKLSN1bmRlZiAgQ09ORklHX0lERV84eHhfUENDQVJECQkvKiBVc2UgSURFIHdpdGggUEMgQ2FyZAlBZGFwdGVyCSovCi0KLSN1bmRlZglDT05GSUdfSURFXzh4eF9ESVJFQ1QJCS8qIERpcmVjdCBJREUgICAgbm90IHN1cHBvcnRlZAkqLwotI3VuZGVmCUNPTkZJR19JREVfTEVECQkJLyogTEVEICAgZm9yIGlkZSBub3Qgc3VwcG9ydGVkCSovCi0KLSN1bmRlZglDT05GSUdfSURFX1JFU0VUCQkvKiByZXNldCBmb3IgaWRlIHN1cHBvcnRlZAkqLwotI2RlZmluZSBDT05GSUdfSURFX1BSRUlOSVQKLSN1bmRlZglDT05GSUdfSURFX1BSRUlOSVQKLQotI2RlZmluZSBDRkdfSURFX01BWEJVUwkJMAkvKiBtYXguIDEgSURFIGJ1cwkJKi8KLSNkZWZpbmUgQ0ZHX0lERV9NQVhERVZJQ0UJMgkvKiBtYXguIDIgZHJpdmUgcGVyIElERSBidXMJKi8KLQotI2RlZmluZSBDRkdfQVRBX0lERTBfT0ZGU0VUCTB4MDAwMAotCi0jZGVmaW5lIENGR19BVEFfQkFTRV9BRERSCU1QQzVYWFhfQVRBCi0KLS8qIE9mZnNldCBmb3IgZGF0YSBJL08JCQkqLwotI2RlZmluZSBDRkdfQVRBX0RBVEFfT0ZGU0VUCSgweDAwNjApCi0KLS8qIE9mZnNldCBmb3Igbm9ybWFsIHJlZ2lzdGVyIGFjY2Vzc2VzCSovCi0jZGVmaW5lIENGR19BVEFfUkVHX09GRlNFVAkoQ0ZHX0FUQV9EQVRBX09GRlNFVCkKLQotLyogT2Zmc2V0IGZvciBhbHRlcm5hdGUgcmVnaXN0ZXJzCSovCi0jZGVmaW5lIENGR19BVEFfQUxUX09GRlNFVAkoMHgwMDVDKQotCi0vKiBJbnRlcnZhbCBiZXR3ZWVuIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENGR19BVEFfU1RSSURFICAgICAgICAgIDQKLQogI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZmxhc2guaCBiL2luY2x1ZGUvZmxhc2guaAppbmRleCAwNjlhYTYzLi45MTA4NzIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZsYXNoLmgKKysrIGIvaW5jbHVkZS9mbGFzaC5oCkBAIC04MCw2ICs4MCw3IEBACiBleHRlcm4gaW50IGZsYXNoX2VyYXNlCShmbGFzaF9pbmZvX3QgKiwgaW50LCBpbnQpOwogZXh0ZXJuIGludCBmbGFzaF9zZWN0X2VyYXNlICh1bG9uZyBhZGRyX2ZpcnN0LCB1bG9uZyBhZGRyX2xhc3QpOwogZXh0ZXJuIGludCBmbGFzaF9zZWN0X3Byb3RlY3QgKGludCBmbGFnLCB1bG9uZyBhZGRyX2ZpcnN0LCB1bG9uZyBhZGRyX2xhc3QpOworZXh0ZXJuIHVsb25nIGZsYXNoX2dldF9zaXplICh1bG9uZyBiYXNlLCBpbnQgYmFua251bSk7CiAKIC8qIGNvbW1vbi9mbGFzaC5jICovCiBleHRlcm4gdm9pZCBmbGFzaF9wcm90ZWN0IChpbnQgZmxhZywgdWxvbmcgZnJvbSwgdWxvbmcgdG8sIGZsYXNoX2luZm9fdCAqaW5mbyk7CkBAIC0yNzQsNiArMjc1LDEyIEBACiAjZGVmaW5lIElOVEVMX0lEXzI4RjY0SzMgICAgMHg4ODAxODgwMQkvKiAgNjRNID0gIDMySyB4IDI1NSArIDMyayB4IDQgKi8KICNkZWZpbmUgSU5URUxfSURfMjhGMTI4SzMgICAweDg4MDI4ODAyCS8qIDEyOE0gPSAgNjRLIHggMjU1ICsgMzJrIHggNCAqLwogI2RlZmluZSBJTlRFTF9JRF8yOEYyNTZLMyAgIDB4ODgwMzg4MDMJLyogMjU2TSA9IDEyOEsgeCAyNTUgKyAzMmsgeCA0ICovCisjZGVmaW5lIElOVEVMX0lEXzI4RjY0UDMwVCAgMHg4ODE3ODgxNwkvKiAgNjRNID0gIDMySyB4IDI1NSArIDMyayB4IDQgKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGNjRQMzBCICAweDg4MUE4ODFBCS8qICA2NE0gPSAgMzJLIHggMjU1ICsgMzJrIHggNCAqLworI2RlZmluZSBJTlRFTF9JRF8yOEYxMjhQMzBUIDB4ODgxODg4MTgJLyogMTI4TSA9ICA2NEsgeCAyNTUgKyAzMmsgeCA0ICovCisjZGVmaW5lIElOVEVMX0lEXzI4RjEyOFAzMEIgMHg4ODFCODgxQgkvKiAxMjhNID0gIDY0SyB4IDI1NSArIDMyayB4IDQgKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGMjU2UDMwVCAweDg4MTk4ODE5CS8qIDI1Nk0gPSAxMjhLIHggMjU1ICsgMzJrIHggNCAqLworI2RlZmluZSBJTlRFTF9JRF8yOEYyNTZQMzBCIDB4ODgxQzg4MUMJLyogMjU2TSA9IDEyOEsgeCAyNTUgKyAzMmsgeCA0ICovCiAKICNkZWZpbmUgSU5URUxfSURfMjhGMTYwUzMgICAweDAwRDAwMEQwCS8qICAxNk0gPSA1MTJLIHggIDMyICg2NGtCIHggMzIpCSovCiAjZGVmaW5lIElOVEVMX0lEXzI4RjMyMFMzICAgMHgwMEQ0MDBENAkvKiAgMzJNID0gNTEySyB4ICA2NCAoNjRrQiB4IDY0KQkqLwo=